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

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex != -1) && (lastIndex + str.length == this.length);
}


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

function showGeneralError()
{
	document.getElementById("clientError").style.display = "block";
	document.getElementById("clientError").innerHTML = "An unexpected error has occurred.  The error has been logged.  You may try again or report the error to support by sending an email to support@iknowsurvey.com.";
}
function showHideDiv(id)
{
    //safe function to hide an element with a specified id
    if (document.getElementById) { // DOM3 = IE5, NS6
        if(document.getElementById(id).style.display == 'none')
        {
            document.getElementById(id).style.display = 'block';
            return;
        }
        else
        {
            document.getElementById(id).style.display = 'none';
            return;
        }
    }
    else {
        if (document.layers) { // Netscape 4
            if(document.id.display == 'none')
            {
                document.id.display = 'block';
                return;
            }
            else
            {
                document.id.display = 'none';
                return;
            }
        }
        else { // IE 4
            if(document.all.id.style.display == 'none')
            {
                document.all.id.style.display = 'block';
                return;
            }
            else
            {
                document.all.id.style.display = 'none';
                return;
            }
        }
    }
}

function openUrlInWindow(url, width, height)
{
	window.open(url,"changeHistory","menubar=0,resizable=1,scrollbars=1,width=" + width + ",height=" + height);
}

function addToListAndSelect(selectElement, newEntry)
{
	var newOption = new Option(newEntry, 0);
	var optsLen = selectElement.options.length;
    selectElement.options[optsLen] = newOption;
    selectElement.selectedIndex = optsLen;
}

function selectOptionWithOptionValue(selectId, valueToSelect)
{
	var selectObj = document.getElementById(selectId);

	for(var i = 0; i < selectObj.options.length; i++)
	{
		if(selectObj.options[i].value == valueToSelect)
		{
			selectObj.selectedIndex = i;
			break;
		}
	}
}
function checkAndLimitTextareaLength(field, maxlimit) 
{
	if (field.value.length > maxlimit)
	{
		field.value = field.value.substring(0, maxlimit);
		return true;
	}
	else
	{
		return false;
	}
}

function verifyTextAreaLengthAndAlert(textareaField, warningLabelId, maxlimit)
{
	if(checkAndLimitTextareaLength(textareaField, maxlimit) == true)
	{
		document.getElementById(warningLabelId).className = "labelWarning";		
	}
	else
	{
		document.getElementById(warningLabelId).className = "labelHelp";	
	}
}

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 getCurrentDateStr(dateFormat)
{
	var currentDate = new Date();
	
	if(dateFormat == "UK")
		return padTo2Digits(currentDate.getDate()) + "/" + padTo2Digits(currentDate.getMonth() + 1)  + "/" + currentDate.getFullYear();
	else
		return padTo2Digits(currentDate.getMonth() + 1) + "/" +  padTo2Digits(currentDate.getDate()) + "/" + currentDate.getFullYear();
}
function padTo2Digits(value)
{
	var valueStr = "" + value;
	if(valueStr.length < 2)
		return "0" + valueStr;
	else
		return valueStr;
}
function stripLeadingZero(value)
{
	if(value.startsWith("0"))
		return value.substring(1);
	else
		return value;
}
function fixDollarAmount(value)
{
	var Char;
	var validChars = "0123456789";
	var result = "";

	for (i = 0; i < value.length; i++) 
	{ 
		Char = value.charAt(i); 
		if(validChars.indexOf(Char) >= 0) 
		{
			result += Char;
		}
	}
	
	return result;	
}
function getNumberOfDaysBetweenDates(dateFromStr, dateToStr, dateFormat)
{
	if(dateFormat == "UK")
	{
		dateFromStr = convertFromUKToStandard(dateFromStr);
		dateToStr = convertFromUKToStandard(dateToStr);
	}
	
	var dateFrom = getDateObject(dateFromStr);
	var dateTo = getDateObject(dateToStr);
	
	var dateFromInMillis = dateFrom.getTime();
	var dateToInMillis = dateTo.getTime();
	
	var diffInMillis = dateToInMillis - dateFromInMillis;
	
	return parseInt(diffInMillis/86400000);
}

function convertFromUKToStandard(dateStr)
{
	if(dateStr.length < 8)
		return dateStr;
	
	var dateParts = dateStr.split("/");
	return dateParts[1] + "/" + dateParts[0] + "/" + dateParts[2]
}
function getDateObject(dateStr)
{
	var dateParts = dateStr.split("/");
	var dateObj = new Date();

	dateObj.setYear(parseInt(dateParts[2]));
	dateObj.setMonth(parseInt(stripLeadingZero(dateParts[0])) - 1);
	dateObj.setDate(parseInt(stripLeadingZero(dateParts[1])));
	
	return dateObj;
}

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="/secure/images/ajax_loading.gif"><BR/><i>Loading</i></td></tr></table>';
}

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

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

function showMessage(message, altDisplayDiv)
{
	var targetDiv = "clientError";
	
	if(isDefined(altDisplayDiv))
		targetDiv = altDisplayDiv;
	
	if(document.getElementById(targetDiv))
	{
		document.getElementById(targetDiv).innerHTML = message;
		document.getElementById(targetDiv).style.display = 'block';
	}
}

function hideMessage(altDisplayDiv)
{
	var targetDiv = "clientError";
	
	if(isDefined(altDisplayDiv))
		targetDiv = altDisplayDiv;
	
	if(document.getElementById(targetDiv))
	{
		document.getElementById(targetDiv).innerHTML = "";
		document.getElementById(targetDiv).style.display = "none";
	}
}

function isDefined(value)
{
	if((value != null) && (value.length > 0) && (value != "undefined"))
		return true;
	else
		return false;
}

function getRadioCheckedValue(radioObj) 
{
	if(!radioObj)
		return "";
	
	var radioLength = radioObj.length;
	
	if(radioLength == undefined)
	{
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	}
	
	for(var i = 0; i < radioLength; i++) 
	{
		if(radioObj[i].checked) 
		{
			return radioObj[i].value;
		}
	}
	return "";
}

function getRadioValue(idOrName) 
{
	var value = null;
	var element = document.getElementById(idOrName);
	var radioGroupName = null;  
	
	// if null, then the id must be the radio group name
	if (element == null) {
		radioGroupName = idOrName;
	} else {
		radioGroupName = element.name;     
	}
	if (radioGroupName == null) {
		return null;
	}
	var radios = document.getElementsByTagName('input');
	for (var i=0; i<radios.length; i++) {
		var input = radios[ i ];    
		if (input.type == 'radio' && input.name == radioGroupName && input.checked) {                          
			value = input.value;
			break;
		}
	}
	return value;
}


function clearRadioButtons(radioObj)
{
	if(!radioObj)
		return;
	
	for (i=0; i < radioObj.length; i++) 
	{
		if (radioObj[i].checked == true) 
		{
			radioObj[i].checked = false
		}
	}
}

function getLeftPosition(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 getMultiSelectedSelectedValues(id)
{
	var selObj = document.getElementById(id);
	var selectedArr = new Array();
	
	var i = 0;
	var arrIndex = 0;
	for (i = 0; i < selObj.options.length; i++) 
	{
		if (selObj.options[i].selected) 
		{
			selectedArr[arrIndex++] = selObj.options[i].text;
		}
	}
	
	return selectedArr;
}

function buildDelimitedString(arr, delimiter)
{
	if((arr == null) || (arr.length == 0))
		return null;
	
	var rtnStr = "";
	
	for (var i = 0; i < (arr.length - 1); i++)
	{
		if (arr[i] != null)
			rtnStr += arr[i] + delimiter;
	}

	if (arr[arr.length - 1] != null)
		rtnStr += arr[arr.length - 1];

	return rtnStr;
	
	
}

function setCountryNameBasedOnState(stateShort, countryElementId)
{
	if((stateShort == "") || (stateShort == "OU"))
		document.getElementById(countryElementId).value = "";
	else
		document.getElementById(countryElementId).value = "United States";
}


