String.prototype.trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};

String.prototype.startsWith = function(str)
{return (this.match("^"+str)==str)}

var updateMade = false;

function confirmExit()
{
	if(changesMade())
  		return "Any unsaved changed will be lost.";
}
function saveMade()
{
	updateMade = false;
}
function changesMade()
{
	return updateMade;
}
function warnIfUnsavedChanges()
{
	var inputFields = document.getElementsByTagName('input');
	var selectFields = document.getElementsByTagName('select');
	var textareaFields = document.getElementsByTagName('textarea');

	var i=0;
	var field = null;

	for(i=0; i<inputFields.length; i++)
	{
		field = inputFields[i];
		field.onchange = function() {updateMade = true;};
	}
	
	for(i=0; i<textareaFields.length; i++)
	{
		field = textareaFields[i];
		field.onchange = function() {updateMade = true;};
	}	

	for(i=0; i<selectFields.length; i++)
	{
		field = selectFields[i];
		
		if((field.name.indexOf('navSection') < 0) && (field.name.indexOf('jumpTo') < 0))
			field.onchange = function() {updateMade = true;};
	}	
	
	window.onbeforeunload = confirmExit;
}
function getLeftPostion(obj)
{
	var curleft = 0;
	
    if(obj.offsetParent)
    {
		while(1) 
        {
			curleft += obj.offsetLeft;
			
			if(!obj.offsetParent)
            	break;
			
			obj = obj.offsetParent;
        }
	}
    else if(obj.x)
	{
		curleft += obj.x;
	}
	
	return curleft;
}

function getTopPosition(obj)
{
	var curtop = 0;
	
	if(obj.offsetParent)
	{
		while(1)
		{
			curtop += obj.offsetTop;
			
			if(!obj.offsetParent)
				break;
				
			obj = obj.offsetParent;
		}
	}
	else if(obj.y)
	{
		curtop += obj.y;
	}
	
	return curtop;
 }

function selectElementWithValue(selectList, elementValue)
{
	var optionCounter; 
	
	for (optionCounter = 0; optionCounter < selectList.length; optionCounter++) 
	{ 
		if(selectList.options[optionCounter].value == elementValue)
		{
			selectList.selectedIndex = optionCounter;
		}
	}
}

function startsWithUpperCase(value)
{
	if(value.length == 0)
		return false;
	
	if((value.charCodeAt(0) >= 65) && (value.charCodeAt(0) <= 90))
		return true;
	else
		return false;
}

function validZipCode(value)
{
	//assume valid is 55555 or 55555-4444
	
	if((value.length != 5) && (value.length != 10))
		return false;
	
	if(value.length == 5)
	{
		if(IsNumeric(value))
			return true;
		else
			return false;
	}
	
	if(value.indexOf("-") < 0)
		return false;
	
	var parts = value.split("-");
	
	if((parts[0].length != 5) || (parts[1].length != 4))
		return false;
	
	if(IsNumeric(parts[0]) && IsNumeric(parts[1]))
		return true;
	
	return false;
}

function IsPopulated(value)
{
	if((value == null) || (value.trim().length < 1))
		return false;
	else
		return true;
}
function IsNumeric(strString)
{
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	
	if (strString.length == 0) return false;
	
	for (i = 0; i < strString.length && blnResult == true; i++)
	{
		strChar = strString.charAt(i);
		
		if(strValidChars.indexOf(strChar) == -1)
		{
			blnResult = false;
		}
	}
	
	return blnResult;
}

function validEmail(address) 
{
	   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	   
	   if(reg.test(address) == false)
	      return false;
	   else
		   return true;
}

function ajaxGetCall(url, targetDiv, onSuccessFunction, onFailureFunction)
{
	ajaxCall(modifyGetForIE(url), targetDiv, null, onSuccessFunction, onFailureFunction, false);
}

function modifyGetForIE(initialUrl)
{	
	var returnUrl = "" + initialUrl;
	
	if(initialUrl.indexOf("?") >= 0)
		return returnUrl + "&iehack=" + getCurrentTimestamp();
	else
		return returnUrl + "?iehack=" + getCurrentTimestamp();
}

function getCurrentTimestamp()
{
	var currentDateTime = new Date();
	var year = currentDateTime.getFullYear();
	var month = currentDateTime.getMonth() + 1;
	var day = currentDateTime.getDate();	
	var hours = currentDateTime.getHours();
	var minutes = currentDateTime.getMinutes();
	var seconds = currentDateTime.getSeconds();
	
	return "" + year + month + day + hours + minutes + seconds;
}

function ajaxPostCall(url, targetDiv, formObject, onSuccessFunction, onFailureFunction)
{
	ajaxCall(url, targetDiv, formObject, onSuccessFunction, onFailureFunction, false);
}

function ajaxCall(url, targetDiv, formObject, onSuccessFunction, onFailureFunction, upload)
{
	var callback = 
	{
		success: function(response) 
		{      
			if(response.responseText.startsWith("<!-- LOGIN PAGE"))
			{
				window.location.href = "/login.do?relogin=T";
				return;
			}
			else if(response.responseText.startsWith("<!-- GENERAL AJAX ERROR"))
			{
				window.location.href = "/survey.do?message=PUB_SURVEY_UNEXPECTED_ERROR";
				return;
			}
						
			onSuccessFunction(response.responseText);
		},
		failure: function(response) 
		{	   
			if(response.responseText.startsWith("<!-- LOGIN PAGE"))
			{
				window.location.href = "/login.do?relogin=T";
				return;
			}
			else if(response.responseText.startsWith("<!-- GENERAL AJAX ERROR"))
			{
				window.location.href = "/survey.do?message=PUB_SURVEY_UNEXPECTED_ERROR";
				return;
			}
			
			if(document.getElementById("ajaxResponseError"))
			{
				var startIndex = response.responseText.indexOf("<pre>");
				document.getElementById("ajaxResponseError").innerHTML = response.responseText.substring(startIndex);
			}
				
			onFailureFunction(response.responseText);
		},
        upload: function(response) 
        {
			if(response.responseText.startsWith("<!-- LOGIN PAGE"))
			{
				window.location.href = "/login.do?relogin=T";
				return;
			}
			else if(response.responseText.startsWith("<!-- GENERAL AJAX ERROR"))
			{
				window.location.href = "/survey.do?message=PUB_SURVEY_UNEXPECTED_ERROR";
				return;
			}

			onSuccessFunction(response.responseText);
  		}
	}
			
	if(formObject == null)
	{
		YAHOO.util.Connect.asyncRequest("GET", url, callback, "");
	}
	else
	{
		YAHOO.util.Connect.setForm(formObject, upload);  //true allows it to support file uploads
		YAHOO.util.Connect.asyncRequest("POST", url, callback);
	}
	
	if(targetDiv != null)
		targetDiv.innerHTML = '<table width=100%><tr><td align=center style=padding-top:5px;><img src="/ttmaster09/images/ajaxloading.gif"><BR/><i>Loading</i></td></tr></table>';
}

function ajaxUploadCall(url, targetDiv, formObject, onSuccessFunction, onFailureFunction, additionalSuccessArguments)
{
	ajaxCall(url, targetDiv, formObject, onSuccessFunction, onFailureFunction, true);
}
