//************* Display Warning For Session Timeout *************//
var isIE4=document.all;
var isIE=document.all&&document.getElementById;
var isNN=!document.all&&document.getElementById;
var isIE6orEarlier;
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
var ieVersion = getInternetExplorerVersion();
browser == "Microsoft Internet Explorer" && ieVersion <= 6 ? isIE6orEalier = true : isIE6orEalier = false;

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}


var currentUserAccountLink;

//var sessionTimeout = 1800000; // 30 minutes
//sessionTimeout = 120000; //2 minutes for testing
if(typeof(sessionTimeout) == "number") {
	var originalSessionTimeout = sessionTimeout;
	var warningMessageTime = 180000; //180000 = 3 minutes
	var alertIsVisible = false;
	setInterval('startSessionWarning()', 10000); //every 10 seconds
}
function startSessionWarning() {
	sessionTimeout = sessionTimeout - 10000;

	var openerURL = '';
	var openerGUID = '';
	if(window.opener) {
		try {
			openerURL = window.opener.location.href;
			openerGUID = window.opener.document.getElementById('UserSessionGuid').value;
		}
		catch(err) {
			openerURL = '';
			openerGUID = '';
		}
	}
	
	if(sessionTimeout == warningMessageTime && (openerURL == '' || openerGUID == '')) {
		showSessionAlert();
	}
	else if(sessionTimeout <= 0 && (openerURL == '' || openerGUID == '')) {
		logoutUser();
	}
}
function logoutUser() {
	if(! alertIsVisible) {
		alertIsVisible = true;
		alert('Your session has timed out due to inactivity!');
		location.href = '/app/default.asp?W=Logout';
	}
}
var woSessionAlertTimeout = null;
function showSessionAlert() {
	if(document.getElementById) {
		var alertDiv = document.createElement('div');
		alertDiv.setAttribute('id', 'woSessionAlertDiv');
		document.getElementsByTagName("body")[0].appendChild(alertDiv);
		var dText = '';
		dText = '<div id="woSessionAlertDivContent" class="woSessionAlertDivContent" onMouseOver="CancelFade();SetFullOpacity(\'woSessionAlertDiv\',\'woSessionAlertDivContent\')" style="position:absolute;bottom:-100px;right:5px;border:1px solid black;background-color:#89D027;color:#FFFFFF;font-weight:bold;width:200px;height:98px;';
		if(isIE) {
			dText += 'filters: alpha(opacity=100);';
		}
		else if(isNN) {
			dText += '-moz-opacity: 1.0';
		}
		dText += '"><a href="#" onclick="hideMe(\'woSessionAlertDivContent\');hideMe(\'woSessionAlertDiv\');return false;" style="position:relative;left:160px;color:#FFFFFF;font-weight:bold;">Close</a>' + 
				 '<br /><span style="font-size:100%;color:#FFFFFF">Warning:</span><br /><span style="font-size:93%;color:#FFFFFF">Your session will end in 3 minutes due to inactivity.</span><br /></div>';
		document.getElementById('woSessionAlertDiv').insertAdjacentHTML('afterBegin', dText);
		showSessionAlertDivContent();
		woSessionAlertTimeout = setTimeout("fadeOut('woSessionAlertDivContent', 'woSessionAlertDiv')", 20000);
	}
}
function showSessionAlertDivContent() {
	var valBottom = document.getElementById('woSessionAlertDivContent').style.bottom.replace('px','');
	if(eval(valBottom) < 0) {
		document.getElementById('woSessionAlertDivContent').style.bottom = eval(valBottom) + 5 + 'px';
		setTimeout('showSessionAlertDivContent()', 15);
	}
}

var woFadeIndex;
if(isIE) {
	woFadeIndex = 100;
}
else if(isNN) {
	woFadeIndex = 1.0;
}
else {
	woFadeIndex = 0;
}
var woFadeSpeed = 80;
var woFadeTimeout;
var doFade = true;

function CancelFade() {
	doFade = false;
	ClearTheTimeout(woFadeTimeout);
}
function SetFullOpacity(e, b) {
	if(isIE) {
		document.getElementById(e).style.filter = 'alpha(opacity=100)';
		document.getElementById(b).style.filter = 'alpha(opacity=100)';
	}
	else if(isNN) {
		document.getElementById(e).style.MozOpacity = '1.0';
		document.getElementById(b).style.MozOpacity = '1.0';
	}
}
function fadeOut(e, b) {
	if(doFade) {
		if(isIE) {
			//alert(woFadeIndex);
			if(woFadeIndex > 0) {
				document.getElementById(e).style.filter = 'alpha(opacity='+ woFadeIndex + ')';
				//alert(document.getElementById(e).style.filters);
				woFadeIndex -= 5;
				woFadeTimeout = setTimeout('fadeOut(\'' + e + '\', \'' + b + '\')', woFadeSpeed);
			}
			else {
				hideMe(e);
				hideMe(b);
			}
		}
		else if(isNN) {
			if(woFadeIndex > 0) {
				document.getElementById(e).style.MozOpacity = woFadeIndex;
				woFadeIndex -= .05;
				woFadeTimeout = setTimeout('fadeOut(\'' + e + '\', \'' + b + '\')', woFadeSpeed);
			}
			else {
				hideMe(e);
				hideMe(b);
			}
		}
		else {
			woFadeTimeout = setTimeout('hideMe(\'' + e + '\')', 1500);
			woFadeTimeout = setTimeout('hideMe(\'' + b + '\')', 1500);
		}
	}
}
function ClearTheTimeout(e) {
	clearTimeout(e);
}


//************* Start New Navigation Functions *************//
var selectedDiv = '';
var hideTimeout;
var elemToHide = '';
var currentElem = '';
var currentTab = '';
var ddWidth = 210;
var ddIframe;
function showDD(e) {
	if(document.getElementById(e)) {
		if(e != currentElem) {
			doTheHide('');
			theTab = e.replace('tab','tabLi');
			currentElem = theTab;
			if(document.getElementById(theTab)) {
				currentTab = theTab;
				document.getElementById(theTab).id = 'current';
			}
		}
		clearTimeout(hideTimeout);
		myPos = findElementPos(document.getElementById(e));
		theDD = e.replace('tab','dd');
		var winW;
		var newPosLeft;
		if(window.innerWidth != undefined) {
			winW = window.innerWidth;
		}
		else {
			winW = document.body.offsetWidth;
		}
		if(document.getElementById(theDD)) {
			document.getElementById(theDD).style.top = eval(myPos[1] + 21) + 'px';
			var remainder = eval(winW - myPos[0]);
			if(remainder < ddWidth) {
				newPosLeft = winW - (ddWidth + 5);
			}
			else {
				newPosLeft = myPos[0];
			}
			document.getElementById(theDD).style.left = newPosLeft + 'px';
			document.getElementById(theDD).style.display = 'block';
			document.getElementById(theDD).style.zIndex = '600';
		}
		
		if(isIE6orEalier) {
			var ddMenuDiv = document.getElementById(theDD);
			var iframeLeft = ddMenuDiv.offsetLeft + 'px';
			var iframeTop = ddMenuDiv.offsetTop + 'px';
			var iframeWidth = ddMenuDiv.offsetWidth + 'px';
			var iframeHeight = ddMenuDiv.offsetHeight + 'px';
			if (! document.getElementById('ddIframe')) {
				//alert('iframeLeft = ' + iframeLeft + '\niframeTop = ' + iframeTop + '\niframeWidth = ' + iframeWidth + '\niframeHeight = ' + iframeHeight);
				document.body.insertAdjacentHTML('afterBegin', '<iframe id="ddIframe" style="position:absolute;left:' + iframeLeft + ';top:' + iframeTop + ';width:' + iframeWidth + ';height:' + iframeHeight + ';filter:alpha(opacity=0);-moz-opacity: 0.80;z-index:599;" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
			}
			else {
				ddIframe = document.getElementById('ddIframe')
				ddIframe.style.left = iframeLeft;
				ddIframe.style.top = iframeTop;
				ddIframe.style.width = iframeWidth;
				ddIframe.style.height = iframeHeight;
				ddIframe.style.display = 'block';			
			}
		}
	}
}
function hideDD(e) {
	elemToHide = e;
	hideTimeout = setTimeout('doTheHide(\'' + e + '\')', 600);
}
function doTheHide(e) {
	if(e == '' && elemToHide != '') {
		document.getElementById(elemToHide).style.display = 'none';
		if(document.getElementById('current')) {
			document.getElementById('current').id = currentElem;
		}
	}
	else {
		if(document.getElementById(e)) {
			document.getElementById(e).style.display = 'none';
			if(document.getElementById('ddIframe')) {
				document.getElementById('ddIframe').style.display = 'none';	
			}
		}
		theTab = e.replace('dd','tabLi');
		if(document.getElementById('current')) {
			document.getElementById('current').id = theTab;
		}
	}
//	if(document.getElementById('menuIframe')) {
//		var menuIframe = document.getElementById('menuIframe');
//		menuIframe.style.visibility = 'hidden';
//		menuIframe.style.display = 'none';
//	}
}
function clearTheTimeout(e) {
	clearTimeout(hideTimeout);
}

function findElementPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		//curright = obj.offsetRight
		//curbottom = obj.offsetBottom
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
			//curright += obj.offsetRight
			//curbottom += obj.offsetBottom
		}
	}
	return [curleft,curtop];
	//return [curleft,curtop,curright,curbottom];
}

function hoverOverDD(e) {
	clearTheTimeout(e);
}
//************* End New Navigation Functions *************//

function setNumberOfResultsPerPage(e) {
	GetAJAXResultValue('/app/default.asp?W=SetNumberOfResultsPerPage&P=' + e + '&X=1', 'group1');
}
function setResultsRangeMonth(e, resultType) {
	GetAJAXResultValue('/app/default.asp?W=SetResultsRangeMonth&P=' + e + '&P=' + resultType + '&X=1', 'group1');
}
function setResultsRangeYear(e, resultType) {
	GetAJAXResultValue('/app/default.asp?W=SetResultsRangeYear&P=' + e + '&P=' + resultType + '&X=1', 'group1');
}
function setResultsRangeMonthAndYear(m, y, resultType) {
	GetAJAXResultValue('/app/default.asp?W=SetResultsRangeMonthAndYear&P=' + m + '&P=' + y + '&P=' + resultType + '&X=1', 'group1');
}

var disabledElements = new Array();
function checkForm(formName){
	setFormReturnLocation();
	error=0
	reqError=""
	dateError=""
	emailError=""
	phoneError=""
	zipError=""
	thisForm=eval("document."+formName)
	
	for(var i=0;i<thisForm.elements.length;i++){
		if(thisForm.elements[i].disabled == 1) {
			disabledElements[i] = thisForm.elements[i];
			thisForm.elements[i].disabled = 0;	
		}
		elementtype=thisForm.elements[i].type
		elementname=thisForm.elements[i].name
		if(elementname != undefined) {
			elementclass=thisForm.elements[i].className
			elementid=thisForm.elements[i].id
			elementvalue=thisForm.elements[i].value
			elementvaluelength=thisForm.elements[i].value.length
			//alert(elementvaluelength);
			elementname=elementname.toLowerCase()
			if(elementclass.indexOf("req")!=-1){
					if(elementtype=="select-multiple"){
						selTrue = false
						for (var x=0; x<thisForm.elements[i].options.length; x++) {
							if((thisForm.elements[i].options[x].selected==true)&&(thisForm.elements[i].options[x].value != null)){
								selTrue = true
							}
						}
						if(selTrue==false){
							error=1
							reqError="\t One or more of the required fields (white) are not entered, please enter in the required fields \n"
							thisForm.elements[i].className="req_error_text"
						}
						else{
							thisForm.elements[i].className="req_text"
						}
					}
					else{
						if(elementvalue=="" || elementvalue=='Enter Site Name' || elementvalue=='Enter Equipment Or Search Criteria'){
							error=1
							reqError="\t One or more of the required fields (white) are not entered, please enter in the required fields \n"
							thisForm.elements[i].className="req_error_text"
						}else{
							thisForm.elements[i].className="req_text"
							CheckNonReq(true, thisForm.elements[i]);
						}
					}
			}else{
				if ((elementtype != "hidden") && (elementvalue != "") && (elementtype != "checkbox")) {
					CheckNonReq(false, thisForm.elements[i]);
				}
			}
		}
	}
	if(error==1){
		strError="The following problems (highlighted in light blue) have been found with the information you entered:\n" + reqError + dateError + emailError + phoneError +zipError
		alert(strError);
		for(i=0;i<=disabledElements.length;i++) {
			if(disabledElements[i] == thisForm.elements[i]) {
				thisForm.elements[i].disabled = 1;
			}
		}
		return false;
	}else{
		return true;  
	}
}

function validateField(e, type) {
	switch(type) {
		case 'int':
			for (var i = 0;;i++) {
				if(!IsInteger(e.value)) {
					e.value = e.value.substr(0, e.value.length-1);
				}
				else {
					break;	
				}
			}
			break;
	}
}

function CheckNonReq(bolType, formElement){
	if(formElement) {
		if(bolType==true){
			returnType="req_text"
		}else{
			returnType='text'
		}
		if(elementname.indexOf("date")!=-1 && elementname.indexOf("dateinserv")==-1 && elementname!='workorderhistorydate'){
			if(elementname.indexOf("x_")==-1){
				if(checkValidDate(elementvalue)!=true){
					error=1
					dateError="\t- The Date you have entered is not formatted properly (mm/dd/yyyy) or is not valid\n"
					formElement.className="error_text"
					if(bolType==true){
						formElement.className="req_error_text"
					}else{
						formElement.className="error_text"
					}
				}else{
					formElement.className=returnType
				}
			}
		}
		if(elementname.indexOf("zip")!=-1){
			//alert(elementvalue + '\n' + IsNumeric(elementvalue) + '\n' + elementvaluelength);
			if((elementvaluelength > 10)){//(! IsNumeric(elementvalue))||
				error=1
				zipError="\t- The Zip code you have entered is not formatted properly (up to 9 digits not including a \"-\") or is not valid\n"
				formElement.className="error_text"
				if(bolType==true){
					formElement.className="req_error_text"
				}else{
					formElement.className="error_text"
				}
			}else{
				formElement.className=returnType
			}
		}
		if(elementname.indexOf("phone")!=-1){
			if(IsPhone(elementvalue)!=true){
				error=1
				phoneError="\t- The phone you have entered is not numeric or is not valid\n"
				formElement.className="error_text"
				if(bolType==true){
					formElement.className="req_error_text"
				}else{
					formElement.className="error_text"
				}
			}else{
				formElement.className=returnType
			}
		}
		if(elementname.indexOf("email") != -1 && formElement.className.indexOf('notEmail') == -1){
			if(IsEmail(elementvalue)!=true){
				error=1
				emailError="\t- The e-mail you have entered is not valid\n"
				formElement.className="error_text"
				if(bolType==true){
					formElement.className="req_error_text"
				}else{
					formElement.className="error_text"
				}
			}else{
				formElement.className=returnType
			}
		}
	}
	else {
		returnType = 'text';
	}
}
function setFormFunction(strFunction,strForm){
	thisForm=eval("document."+strForm)
	thisForm.W.value=strFunction
	thisForm.submit()
}
function checkValidDate(dateStr) {
    var slash1 = dateStr.indexOf("/");
    if (slash1 == -1) { slash1 = dateStr.indexOf("-"); }
    if (slash1 == -1) { return false; }
    var dateMonth = dateStr.substring(0, slash1)
    var dateMonthAndYear = dateStr.substring(slash1+1, dateStr.length);
    var slash2 = dateMonthAndYear.indexOf("/");
    if (slash2 == -1) { slash2 = dateMonthAndYear.indexOf("-"); }
    if (slash2 == -1) { return false; }
    var dateDay = dateMonthAndYear.substring(0, slash2);
    var dateYear = dateMonthAndYear.substring(slash2+1, dateMonthAndYear.length);
    if ( (dateMonth == "") || (dateDay == "") || (dateYear == "") ) { return false; }
    for (var x=0; x < dateMonth.length; x++) {
        var digit = dateMonth.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numMonth = 0;
    for (var x=0; x < dateMonth.length; x++) {
        digit = dateMonth.substring(x, x+1);
        numMonth *= 10;
        numMonth += parseInt(digit);
    }
    if ((numMonth <= 0) || (numMonth > 12)) { return false; }
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numDay = 0;
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        numDay *= 10;
        numDay += parseInt(digit);
    }
    if ((numDay <= 0) || (numDay > 31)) { return false; }
    if ((numMonth == 2) && (numDay > 29)) { return false; }
    if ((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) { 
        if (numDay > 30) { return false; } 
    }
	for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numYear = 0;
    for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        numYear *= 10;
        numYear += parseInt(digit);
    }
	if (dateYear.length != 4) { return false; }
    if ( (numYear < 50) && (dateYear.length == 2) ) { numYear += 2000; }
    if ( (numYear < 100) && (dateYear.length == 2) ) { numYear += 1900; }
    if ((numYear <= 1753) || (numYear > 9999)) { return false; }
    if ((numMonth == 2) && (numDay == 29)) {
        var div4 = numYear % 4;
        var div100 = numYear % 100;
        var div400 = numYear % 400;
        if (div4 != 0) { return false; }
        if ((div100 == 0) && (div400 != 0)) { return false; }
    }
    return true;
}
function IsEmail(emailAddress) {
     var emailReg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
     return emailReg.test(emailAddress);
//		return 1
}
function IsNumeric(sText){
	var ValidChars = "0123456789.-,";
	var IsNumber=true;
	var Char;
	for (v = 0; v <= sText.length && IsNumber == true; v++){ 
		Char = sText.charAt(v); 
		if (ValidChars.indexOf(Char) == -1){
			IsNumber = false;
		}
	}
	if(sText.indexOf('-') != -1 && sText.indexOf('--') != -1) {
		IsNumber = false;	
	}
	return IsNumber;
}
function IsInteger(sText){
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
	for (v = 0; v <= sText.length && IsNumber == true; v++){ 
		Char = sText.charAt(v); 
		if (ValidChars.indexOf(Char) == -1){
			IsNumber = false;
		}
	}
	if(sText.charAt(0) == '0') {
		IsNumber = false;	
	}
	return IsNumber;
}
function onlyAllowNumeric(e) {
	for (i = 0;;i++) {
		if(!IsNumeric(e)) {
			e = e.substr(0, e.length-1);
		}
		else {
			break;	
		}
	}
	return e;
}
function IsPhone(sText){
	/*var ValidChars = "0123456789.-() +x/";
	var isPhone=true;
	var Char;
	for (v = 0; v < sText.length && IsPhone == true; v++){ 
		Char = sText.charAt(v); 
		if (ValidChars.indexOf(Char) == -1){
			isPhone = false;
		}
	}
	return isPhone;*/
	//var phoneRegExp = new RegExp(/^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/);
	//sText = sText.replace('/', '').replace('.', ''); // This was added as a check on 2/9/2010 because HNB sometimes puts these in their phone numbers
	while(sText.indexOf('/') != -1 || sText.indexOf('.') != -1) {
		sText = sText.replace('/', ' ').replace('.', ' ');	
	}
	var phoneRegExp = /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/;
	var isPhone = phoneRegExp.test(sText);
	return isPhone;
}
function checkNumeric(evt){
    var KeyTyped;
	if(evt) { 
		KeyTyped = String.fromCharCode(evt.keyCode);
		if (!IsNumeric(KeyTyped)){
			evt.keyCode = 0;
		}
	}
	else {
		KeyTyped = String.fromCharCode(window.event.keyCode);
		if (!IsNumeric(KeyTyped)){
			window.event.keyCode = 0;
		}
	}
}
function fieldMask(maskType) {
	if (navigator.appName != 'Microsoft Internet Explorer'){
		event=arguments.callee.caller.arguments[0].target;
		event.onkeypress=function(event){
			var KeyTyped = event.which;
			if (KeyTyped==0 || KeyTyped==8){
				return true;
			}else{
				var srcObject = event.target;
				if(!subKeyMask(maskType,KeyTyped,srcObject)){
					return false;
				}
			}
		}
	}else{
		var KeyTyped = window.event.keyCode;
		var srcObject =  window.event.srcElement;
		if(!subKeyMask(maskType,KeyTyped,srcObject)){
			window.event.keyCode=0;
		}
	}
}
function subKeyMask(maskType,KeyTyped,srcObject){
	KeyTyped=String.fromCharCode(KeyTyped);
	var sMask = "01234567890";
    if (sMask.indexOf(KeyTyped) == -1){
		return false;
	}else{
		keyCount = srcObject.value.length;
		var tmpStr = "";
		switch(maskType ){
			case "date":
				switch (keyCount){
					case 1: 
						tmpStr += srcObject.value;
						srcObject.value = tmpStr;
						break;
					case 2:
						srcObject.value += "/";
						break;
					case 5:
						srcObject.value += "/";
						break;
				}
				break;
			case "phone":
				keyEntered = KeyTyped;
				keyCount++;
				switch (keyCount){
					case 2: 
						tmpStr += srcObject.value;
						srcObject.value = tmpStr;
						break;
					case 4:
						srcObject.value += "-";
						break;
					case 8:
						srcObject.value += "-";
						break;
				}
				break;
			case "SSN":
				keyEntered = KeyTyped;
				keyCount++;
				switch (keyCount){
					case 2: 
						tmpStr += srcObject.value;
						srcObject.value = tmpStr;
						break;
					case 4:
						srcObject.value += "-";
						break;
					case 7:
						srcObject.value += "-";
						break;
				}
				break;
		}
		return true;
	}
}
function checkRadios() {
	var myElement = document.forms[0].elements;
	for(var i = 0 ; i < myElement.length ; ++i) {
		if(myElement[i].type == "radio") {
			var radiogroup = myElement[myElement[i].name]; // get the whole set of radio buttons.
			var itemchecked = false;
		for(var j = 0 ; j < radiogroup.length ; ++j) {
			if(radiogroup[j].checked) {
				itemchecked = true;
				break;
			}
		}
		if(!itemchecked) { 
			alert("You must select a radio button \n");
			if(myElement[i].focus)
				myElement[i].focus();
				return false;
			}
		}
	}
	return true;
}
function rightTrim( strValue ) {
	var objRegExp = /^([\w\W]*)(\b\s*)$/;
	if(objRegExp.test(strValue)) {
		strValue = strValue.replace(objRegExp, '$1');
	}
	return strValue;
}
function leftTrim( strValue ) {
	var objRegExp = /^(\s*)(\b[\w\W]*)$/;
	if(objRegExp.test(strValue)) {
		strValue = strValue.replace(objRegExp, '$2');
	}
	return strValue;
}
function ie5fix(){
	if (!Array.prototype.push) { 
	 Array.prototype.push = function() { 
		 for (var i = 0; i < arguments.length; ++i) { 
			 this[this.length] = arguments[i]; 
		 } 
		 return this.length; 
	 }; 
	} 
}

function selectAllWorkOrders() {
	var i;
	var check = false;
	if(document.getElementById('cbSelectAll').checked) {
		check = true;
	}
	var oCheckBoxes = document.getElementsByTagName('input');
	for(i = 0; i < oCheckBoxes.length; i ++) {
		if(oCheckBoxes[i].getAttribute('type') == 'checkbox') {
			oCheckBoxes[i].checked = check;
		}
	}
}

function selectAllInvoices() {
	var i;
	var check = false;
	if(document.getElementById('cbSelectAll').checked) {
		check = true;
	}
	var oCheckBoxes = document.getElementsByTagName('input');
	for(i = 0; i < oCheckBoxes.length; i ++) {
		if(oCheckBoxes[i].getAttribute('type') == 'checkbox') {
			oCheckBoxes[i].checked = check;
		}
	}
}

function saveWorkOrderContractedAmount(workOrderID, amount) {
	var url = '/app/default.asp?W=SaveWorkOrderContractedAmount&P=' + workOrderID + '&P=' + amount + '&X=1';
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				alert('Timeout exceeded in connecting to web service');
				return false;
			}
			,'onSuccess':function(req){ 
				if(req.responseText == 'Update Item') {
					var currentTotal = document.getElementById('woTotalAmount').innerHTML;
					var currentHiddenTotal = document.getElementById('hiddenTTL').value;
					document.getElementById('woAmount' + workOrderID + 'Save').innerHTML = req.responseText;
					var i;
					var subtotal = 0;
					var workorders = document.getElementById('workOrders').value;
					if(workorders.indexOf(',') != -1) {
						var workorderArray = workorders.split(',');
						for(i = 0; i < workorderArray.length; i ++) {
							subtotal += eval(document.getElementById('woAmount' + workorderArray[i]).value);
						}
					}
					else {
						subtotal = eval(document.getElementById('woAmount' + workorders).value);
					}
					document.getElementById('woTotalAmount').innerHTML = Math.round((eval(subtotal) + eval(currentHiddenTotal)) * 100) / 100;	
				}
				else {
					alert(req.responseText);
				};
			}
			,'onError':function(){
				alert("Error connecting to the web service.");
			}
			,'groupName':groupName
		}
	);
}

function saveWorkOrderAdjustedContractedAmountVisibility(workOrderID, visibility) {
	if(visibility == 1) {
		visibility = 0;	
	}
	else {
		visibility = 1;
	}
	var url = '/app/default.asp?W=SaveWorkOrderAdjustedContractedAmountVisibility&P=' + workOrderID + '&P=' + visibility + '&X=1';
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				alert('Timeout exceeded in connecting to web service');
				return false;
			}
			,'onSuccess':function(req){ 
				//document.getElementById('cb_woAmountVisible' + workOrderID).checked = visibility;	
			}
			,'onError':function(){
				alert("Error connecting to the web service.");
			}
			,'groupName':groupName
		}
	);
}

function saveWorkOrderAdjustedContractedAmount(workOrderID, amount) {
	var url = '/app/default.asp?W=SaveWorkOrderAdjustedContractedAmount&P=' + workOrderID + '&P=' + amount + '&X=1';
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				//clearTimeout(myTimeout);
				//GetAJAXResultValue(url, groupName);
				alert('Timeout exceeded in connecting to web service');
				return false;
			}
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				if(req.responseText == 'Update Item') {
					var currentTotal = document.getElementById('woTotalAmount').innerHTML;
					var currentHiddenTotal = document.getElementById('hiddenTTL').value;
					document.getElementById('woAmount' + workOrderID + 'Save').innerHTML = req.responseText;
					var i;
					var subtotal = 0;
					var workorders = document.getElementById('workOrders').value;
					if(workorders.indexOf(',') != -1) {
						var workorderArray = workorders.split(',');
						for(i = 0; i < workorderArray.length; i ++) {
							subtotal += eval(document.getElementById('woAmount' + workorderArray[i]).value);
						}
					}
					else {
						subtotal = eval(document.getElementById('woAmount' + workorders).value);
					}
					var ttlAmount = Math.round((eval(subtotal) + eval(currentHiddenTotal)) * 100) / 100;
					document.getElementById('woTotalAmount').innerHTML = ttlAmount;			
					var ttlCostAdj = document.getElementById('ttlCostAdj').value;
					var ttlCost = document.getElementById('ttlCost').value;
					var masterLineAdj = document.getElementById('masterLineAdj').value;
					var adjustedTotalPrice = subtotal;//document.getElementById('adjustedTotalPrice').value;
					var workOrderTotalPrice = document.getElementById('workOrderTotalPrice').value;
					if(ttlCostAdj == '') {
						ttlCostAdj = 0;
					}
					if(ttlCost == '') {
						ttlCost = 0;
					}
					if(masterLineAdj == '') {
						masterLineAdj = 0;
					}
					if(adjustedTotalPrice == '') {
						adjustedTotalPrice = 0;
					}
					if(workOrderTotalPrice == '') {
						workOrderTotalPrice = 0;
					}
					//alert(adjustedTotalPrice + '\n' + ttlCostAdj);
					var adjustedTotal = Math.round((eval(adjustedTotalPrice) + eval(ttlCostAdj)) * 100) / 100;
					var lineItemTotal = (eval(workOrderTotalPrice) + eval(ttlCost));
					var grossDollars = (eval(adjustedTotalPrice) - eval(workOrderTotalPrice) + eval(ttlCost));
					var grossPercent = (Math.round((eval(grossDollars) / eval(lineItemTotal)) * 1000) / 10);
					if(document.getElementById('adjustedTotal')) {
						document.getElementById('adjustedTotal').innerHTML = '$' + adjustedTotal.toString();
					}
					if(grossDollars < 0) {
						document.getElementById('grossDollars').innerHTML = '($' + grossDollars.toString().replace('-','') + ')';
					}
					else {
						document.getElementById('grossDollars').innerHTML = '$' + grossDollars.toString();
					}
					document.getElementById('grossPercent').innerHTML = grossPercent.toString() + '%';
				}
				else {
					alert(req.responseText);
				};
			}
			,'onError':function(){
				alert("Error connecting to the web service.");
			}
			,'groupName':groupName
		}
	);
}

function saveWorkOrderAdjAmountAndDescription(workOrderID) {
	var url = '/app/default.asp?W=SaveWorkOrderAdjAmountAndDescription&P=' + workOrderID + '&X=1';	
	var formUrl = document.getElementById('editInvoiceForm').action;
	document.getElementById('editInvoiceForm').action = url;
	var theform = document.getElementById('editInvoiceForm');
  	AjaxRequest.submit(theform, 
		{
			'onSuccess':function(req){ 
				//clearTimeout(myTimeout);
				//alert(req.responseText);
				if(req.responseText == 'ok') {
					var currentTotal = document.getElementById('woTotalAmount').innerHTML;
					var currentHiddenTotal = document.getElementById('hiddenTTL').value;
					document.getElementById('woAmount' + workOrderID + 'Save').innerHTML = 'Update Item';
					var i;
					var subtotal = 0;
					var workorders = document.getElementById('workOrders').value;
					if(workorders.indexOf(',') != -1) {
						var workorderArray = workorders.split(',');
						for(i = 0; i < workorderArray.length; i ++) {
							subtotal += roundNumber(eval(document.getElementById('woAmount' + workorderArray[i]).value), 2);
						}
					}
					else {
						subtotal = roundNumber(eval(document.getElementById('woAmount' + workorders).value), 2);
					}
					document.getElementById('woTotalAmount').innerHTML = Math.round((eval(subtotal) + eval(currentHiddenTotal)) * 100) / 100;	
				}
			}
			,'onError':function() {
				
			}
		}
	);
	document.getElementById('editInvoiceForm').action = formUrl;
}
function saveWorkOrderInvoiceDescription(workOrderID) {
	//var desc = escape(document.getElementById('woInvoiceDescription' + workOrderID).value.replace('\&', 'and').replace('\#', '_PND_'));
	var url = '/app/default.asp?W=SaveWorkOrderInvoiceDescription&P=' + workOrderID + '&P=x&X=1';	
	//GetAJAXResultWithoutLoadingImage('test', url, 'group1');
	var formUrl = document.getElementById('EditInvoiceForm').action;
	document.getElementById('EditInvoiceForm').action = url;
	var theform = document.getElementById('EditInvoiceForm');
	//GetAJAXPostResult(document.getElementById('editInvoiceForm'), 'x');
  	AjaxRequest.submit(theform, 
		{
			'onSuccess':function(req){ 
				var currentTotal;
				var currentHiddenTotal;
				var subtotal;
				var i
				//clearTimeout(myTimeout);
				//alert(req.responseText);
				if(req.responseText == 'ok') {
					currentTotal = document.getElementById('woTotalAmount').innerHTML;
					currentHiddenTotal = document.getElementById('hiddenTTL').value;
					document.getElementById('woAmount' + workOrderID + 'Save').innerHTML = 'Update Item';
					subtotal = 0;
					var workorders = document.getElementById('workOrders').value;
					if(workorders.indexOf(',') != -1) {
						var workorderArray = workorders.split(',');
						for(i = 0; i < workorderArray.length; i ++) {
							subtotal += roundNumber(eval(document.getElementById('woAmount' + workorderArray[i]).value), 2);
						}
					}
					else {
						subtotal = eval(document.getElementById('woAmount' + workorders).value);
					}
					document.getElementById('woTotalAmount').innerHTML = Math.round((eval(subtotal) + eval(currentHiddenTotal)) * 100) / 100;
				}
				else {
					alert(req.responseText);
				}
			}
			,'onError':function() {
				alert('An error was encountered when attempting to save the values.');
			}
		}
	);
	document.getElementById('EditInvoiceForm').action = formUrl;
	
}

function updateConsolidatedInvoiceWorkOrderAmounts(reverseCalc) {
	var workorders = document.getElementById('workOrders').value;
	var currentTotal = document.getElementById('woTotalAmount').innerHTML;
	var currentHiddenTotal = document.getElementById('hiddenTTL').value;
	subtotal = 0;
	var workorders = document.getElementById('workOrders').value;
	if(workorders.indexOf(',') != -1) {
		var useInvoiceIdList = false;
		if(document.getElementById('invoiceDetailIDList')) {
			if(document.getElementById('invoiceDetailIDList').value != '') {
				useInvoiceIdList = true;	
			}
		}
		if(useInvoiceIdList) {
			var woArray = document.getElementById('invoiceDetailIDList').value.split(',');
		}
		else {
			var woArray = workorders.split(',');
		}
		for(i = 0; i < woArray.length; i ++) {
			var lineAmt = eval(document.getElementById('woAmount' + woArray[i]).value);
			var invLineAmt;
			useInvoiceIdList ? invLineAmt = eval(document.getElementById('woInvoiceDetailCost' + woArray[i]).value) : invLineAmt = eval(document.getElementById('woInvoiceLineAmount' + woArray[i]).value);
			var lineTax = document.getElementById('woInvoiceTaxPercent' + woArray[i]).value.replace('%', '');
			if(lineAmt == '') {
				lineAmt = 0;	
			}
			if(invLineAmt == '') {
				invLineAmt = 0;	
			}
			if(lineTax.indexOf('.') > 0 || (lineTax.indexOf('.') == -1 && lineTax.length > 0)) {
				lineTax = eval(lineTax) / 100;	
			}
			var lineVal = (invLineAmt * lineTax) + invLineAmt;
			if(reverseCalc) {
				if(lineTax != 0 && lineAmt != 0) {
					invLineAmt = lineAmt / (1 + lineTax);
				}
				//alert('reverseCalc\ninvLineAmt = ' + invLineAmt + '\nlineVal = ' + lineVal + '\nlineTax = ' + lineTax);
				document.getElementById('woInvoiceLineAmount' + woArray[i]).value = roundNumber(invLineAmt, 2);
				if(document.getElementById('woInvoiceLineAmountVisible' + woArray[i])) {
					document.getElementById('woInvoiceLineAmountVisible' + woArray[i]).innerHTML = roundNumber(invLineAmt, 2);
				}
				document.getElementById('woTaxAmount' + woArray[i]).innerHTML = formatCurrency(roundNumber(lineAmt - roundNumber(invLineAmt, 2), 2));
			}
			else {
				//alert('invLineAmt = ' + invLineAmt + '\nlineVal = ' + lineVal + '\nlineTax = ' + lineTax);
				document.getElementById('woAmount' + woArray[i]).value = roundNumber(lineVal, 2);
				if(document.getElementById('woAmountVisible' + woArray[i])) {
					document.getElementById('woAmountVisible' + woArray[i]).innerHTML = roundNumber(lineVal, 2);
				}
				document.getElementById('woTaxAmount' + woArray[i]).innerHTML = formatCurrency(roundNumber(lineAmt - roundNumber(invLineAmt, 2), 2));
			}
			lineAmt = lineVal;
			subtotal += lineAmt;
		}
	}
	else {
		subtotal = roundNumber(eval(document.getElementById('woAmount' + workorders).value), 2);
	}
	document.getElementById('woTotalAmount').innerHTML = roundNumber(eval(subtotal), 2);
}

function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) {
		num = "0";
	}
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	}
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function createConsolidatedInvoice() {
	var selectedWorkOrders = '';
	var oCheckBoxes = document.getElementsByTagName('input');
	for(i = 0; i < oCheckBoxes.length; i ++) {
		if(oCheckBoxes[i].getAttribute('type') == 'checkbox') {
			if(oCheckBoxes[i].checked && oCheckBoxes[i].id.indexOf('SelectAll') == -1) {
				if(selectedWorkOrders == '') {
					selectedWorkOrders = oCheckBoxes[i].id.replace('cb','');
				}
				else {
					selectedWorkOrders += '|' + oCheckBoxes[i].id.replace('cb','');
				}
			}
		}
	}
	//alert(selectedWorkOrders);
	//verifySelectedWorkOrdersForInvoicing(selectedWorkOrders);
	if(selectedWorkOrders != '') {
		var url = '/app/default.asp?W=AJAXVerifySelectedWorkOrdersForInvoicing&P=' + selectedWorkOrders + '&X=1';
		var groupName = 'group1';
		AjaxRequest.get(
			{
				'url':url
				,'timeout':3000
				,'onTimeout':function() {
					//clearTimeout(myTimeout);
					//GetAJAXResultValue(url, groupName);
					alert('Timeout exceeded in connecting to web service');
					return false;
				}
				,'onSuccess':function(req){ 
					//alert(req.responseText);
					if(req.responseText == 'ok') {
						location.href = '/app/default.asp?W=ChooseInvoiceTemplate&P=' + selectedWorkOrders;
					}
					else {
						var msgText = '';
						switch (req.responseText) {
							case 'notOk':
								msgText = 'You may only create a consolidated invoice for the same customer!\nPlease verify that the work orders you have selected are all for the same customer.';
								msgText += '\n\nAll work orders you select must either have a scheduled maintenance number or not have a scheduled maintenance number.  You cannot have both on one consolidated invoice.';
								break;
							case 'supplierParentIdNotOk':
								msgText = 'You may only create a consolidated invoice for the same contractor!\nPlease verify that the work orders you have selected are all from the same contractor.';
								break;
							case 'customerIdNotOk':
								msgText = 'You may only create a consolidated invoice for the same customer!\nPlease verify that the work orders you have selected are all for the same customer.';
								break;
							case 'scheduledServiceIdNotOk':
								msgText = 'All work orders you select must either have a scheduled maintenance number or not have a scheduled maintenance number.  You cannot have both on one consolidated invoice.';
								break;
							case 'billingDateNotOk':
								//msgText = 'All work orders you select must be billable today.';
								msgText = '';
								break;
						}
						alert(msgText);
					};
				}
				,'onError':function(){
					alert("Error connecting to the web service.");
				}
				,'groupName':groupName
			}
		);
	}
	else {
		alert('Please select the Work Orders for which you would like to create a Consolidated Invoice.');
	}
}

var poNumberTimeout;
function checkPONumber(companyID, poNumber) {
	clearTimeout(poNumberTimeout);
	poNumberTimeout = setTimeout("doPONumberCheck('" + companyID + "','" + poNumber + "')", 1000);
}
function doPONumberCheck(companyID, poNumber) {
	var query = '&P=' + companyID + '&P=' + escape(poNumber) + '&X=1';
	var url = '/app/default.asp?W=CheckPONumber' + query;
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				alert('Timeout exceeded in connecting to web service');
				return false;
			}
			,'onSuccess':function(req){ 
				if(req.responseText == 'ok') {
					document.getElementById('poNumberAlert').innerHTML = ' ';
				}
				else {
					document.getElementById('poNumberAlert').innerHTML = ' ' + poNumber + ' has already been used. Try ' + req.responseText + ' instead.';
				}
			}
			,'onError':function(){
				alert("Error connecting to the web service.");
			}
			,'groupName':groupName
		}
	);
}

function changeSBox(){
	var WorkOrderPriorityID = document.getElementById('WorkOrderPriorityID').value;
	var SiteID = document.getElementById('SiteID').value;
	var EquipmentID = document.getElementById('EquipmentID').value;
	var Address = escape(document.getElementById('StreetAddress').value);
	var WorkOrderTypeID_FK;
	var QuickStatusID_FK;
	var QuickStatusETA;
	if(document.getElementById('WorkOrderTypeID_FK')) {
		WorkOrderTypeID_FK = document.getElementById('WorkOrderTypeID_FK').value;
	}
	if(document.getElementById('QuickStatusID_FK')) {
		QuickStatusID_FK = document.getElementById('QuickStatusID_FK').value;
	}
	if(document.getElementById('QuickStatusETA')) {
		QuickStatusETA = document.getElementById('QuickStatusETA').value;
	}
	var WorkOrderResponsibilityID_FK
	if(document.getElementById('WorkOrderResponsibilityID_FK')) {
		WorkOrderResponsibilityID_FK = document.getElementById('WorkOrderResponsibilityID_FK').value;
	}
	var ProjectTaskID = document.getElementById('ProjectTaskID').value;
	var ServiceRequestor;
	if(document.getElementById('ServiceRequestor')) {
		ServiceRequestor = document.getElementById('ServiceRequestor').value
	}
	if(document.getElementById('ServiceID')) {
		ServiceID = document.getElementById('ServiceID').value;
		location.href = '/app/default.asp?W=CreateNewOrder&ServiceID='+ServiceID+'&ContractorID=&WorkOrderPriorityID='+WorkOrderPriorityID+'&SiteID='+SiteID+'&EquipmentID='+EquipmentID+'&StreetAddress='+Address+'&WorkOrderTypeID_FK='+WorkOrderTypeID_FK+'&ProjectTaskID='+ProjectTaskID+'&ServiceRequestor='+ServiceRequestor+'&WorkOrderResponsibilityID_FK='+WorkOrderResponsibilityID_FK+'&QuickStatusID_FK='+QuickStatusID_FK+'&QuickStatusETA='+QuickStatusETA;
	}
	else if(document.getElementById('ContractorID')) {
		ContractorID = document.getElementById('ContractorID').value;
		location.href = '/app/default.asp?W=CreateNewOrder&ServiceID=&ContractorID='+ContractorID+'&WorkOrderPriorityID='+WorkOrderPriorityID+'&SiteID='+SiteID+'&EquipmentID='+EquipmentID+'&StreetAddress='+Address+'&WorkOrderTypeID_FK='+WorkOrderTypeID_FK+'&ProjectTaskID='+ProjectTaskID+'&ServiceRequestor='+ServiceRequestor+'&WorkOrderResponsibilityID_FK='+WorkOrderResponsibilityID_FK+'&QuickStatusID_FK='+QuickStatusID_FK+'&QuickStatusETA='+QuickStatusETA;
	}
}

function updateServiceDropDowns(){
	//SiteID = document.getElementById('SiteID_FK').value;
	var SiteID = document.getElementById('SiteID').value;
	var ServiceID = document.getElementById('ServiceID_FK').value;
	var EquipmentID = document.getElementById('EquipmentID_FK').value;
	var TaskID = document.getElementById('TaskID_FK').value;
	var ProcedureID = document.getElementById('ProcedureID_FK').value;
	var SupplierID = document.getElementById('SupplierID_FK').value;
	var SiteGroupID_FK;
	if(document.getElementById('SiteGroupID_FK')) {
		SiteGroupID_FK = document.getElementById('SiteGroupID_FK').value;
	}
	location.href = '/app/default.asp?W=CreateNewScheduledService&SiteID='+SiteID+'&ServiceID_FK='+ServiceID+'&SupplierID_FK='+SupplierID+'&EquipmentID_FK='+EquipmentID+'&TaskID_FK='+TaskID+'&ProcedureID_FK='+ProcedureID+'&SiteGroupID_FK='+SiteGroupID_FK;
}

function checkAddTaskForm() {
	if(document.getElementById('EquipmentID_FK').value == '' && document.getElementById('ServiceID_FK').value == ''){
		alert('You must select either a piece of equipment or a service category to associate this task.');
		return false;
	}
	else {
		return true;
	}	
}

function updateServiceDropDownsEdit(ScheduledServiceID){
	var SiteID = document.getElementById('SiteID').value;
	var ServiceID = document.getElementById('ServiceID_FK').value;
	var EquipmentID = document.getElementById('EquipmentID_FK').value;
	var TaskID = document.getElementById('TaskID_FK').value;
	var ProcedureID = document.getElementById('ProcedureID_FK').value;
	var SiteGroupID_FK;
	if(document.getElementById('SiteGroupID_FK')) {
		SiteGroupID_FK = document.getElementById('SiteGroupID_FK').value;
	}
	location.href = '/app/default.asp?W=EditScheduledService&P='+ScheduledServiceID+'&SiteID='+SiteID+'&ServiceID_FK='+ServiceID+'&EquipmentID_FK='+EquipmentID+'&TaskID_FK='+TaskID+'&ProcedureID_FK='+ProcedureID+'&SiteGroupID_FK='+SiteGroupID_FK;
}

function changeRFPBox() {
	var ServiceID, SiteID, Address
	if(document.getElementById('ServiceID')) {
		ServiceID = document.getElementById('ServiceID').value;
	}
	else {
		ServiceID = 0;	
	}
	SiteID = document.getElementById('SiteID').value;
	Address = document.getElementById('StreetAddress').value;
	location.href = '/app/default.asp?W=CreateNewRFP&ServiceID='+ServiceID+'&SiteID='+SiteID+'&Address='+ Address;
}

function changeSBoxSitePerm(){
	SiteID = document.getElementById('SiteID').value;
	location.href = '/app/default.asp?W=SitePermissions&SiteID='+SiteID;
}
function UpdateSitePerm(SiteID,UserID,PermType){
	location.href = '/app/default.asp?W=UpdateSitePerm&P='+SiteID+'&P='+UserID+'&PermType='+PermType;
}

function getPosition(e) {
	e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
        cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
    }
    return cursor;
}

function getCurrentXPosition(evt)
{
	var x, docElem;
	if(evt.pageX) {
		x = evt.pageX;	
	}
	else {
		x = evt.clientX;	
	}
	if(document.documentElement) {
		docElem = document.documentElement;
	}
	else {
		docElem = document.body;	
	}
	return (x + docElem.scrollLeft - docElem.clientLeft + 10);
}
function getCurrentYPosition(evt)
{
	var y, docElem;
	if(evt.pageY) {
		y = evt.pageY;	
	}
	else {
		y = evt.clientY;	
	}
	if(document.documentElement) {
		docElem = document.documentElement;
	}
	else {
		docElem = document.body;	
	}
	//alert('y = ' + y + '\nscrollTop = ' + docElem.scrollTop + '\nclientTop = ' + docElem.clientTop + '\ny + docElem.scrollTop - docElem.clientTop = ' + eval(y + docElem.scrollTop - docElem.clientTop));
	return (y + docElem.scrollTop - docElem.clientTop);
}
var hideTextTimeout;
function displayText(evt, txt, w) {
	clearTimeout(hideTextTimeout);
	if(! document.getElementById('txtDiv')) {
		document.body.insertAdjacentHTML('afterBegin', '<div id="txtDiv" style="visibility:hidden;position:absolute;top:0px;left:0px;width:0px;background-color:#FFF9C6;z-index:50000;"></div>');
	}
	document.getElementById('txtDiv').style.width = w+'px';
	document.getElementById('txtDiv').style.visibility = 'visible';
	document.getElementById('txtDiv').innerHTML = txt;
}
function moveText(evt,w) {
	if(document.getElementById('txtDiv')) {
		clearTimeout(hideTextTimeout);
		var cursor = getPosition(evt);
		var curXPos = cursor.x + 10;
		var curYPos = cursor.y + 10;
		if(document.body) {
			if((eval(curXPos) + eval(w)) > document.body.clientWidth) {
				curXPos = curXPos - w - 20;
			}
		}
		document.getElementById('txtDiv').style.left = curXPos + 'px';
		document.getElementById('txtDiv').style.top = curYPos + 'px';
	}
}	
function hideText() {
	if(document.getElementById('txtDiv')) {
		hideTextTimeout = setTimeout("document.getElementById('txtDiv').style.visibility = 'hidden'", 200);
	}
}

function getSiteAddress(target, siteID) {
	var url = '/app/default.asp?W=AJAXGetSiteAddress&P=' + siteID + '&X=1';
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				returnVal = req.responseText;
				document.getElementById(target).innerHTML = returnVal;
				document.getElementById('SiteAddress').value = returnVal.replace('<br />', ' ').replace('<br />', ' ');
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				document.getElementById(target).innerHTML = returnVal;
			}
			,'groupName':groupName
		}
	);
}

function updateServiceCategoriesByGroup(groupID, currentGroupID) {
	var url = location.href;
	//if(currentGroupID != '') {
	url = url.replace('&ServiceGroupID=' + currentGroupID, '');	
	//}
	url = url + '&ServiceGroupID=' + groupID;
	location.href = url;
}
function updateServiceCategoriesFromGroup(groupID, supplierID) {
	var url;
	if(supplierID != '') {
		url = '/app/default.asp?W=AJAXGetServiceCategoriesForGroup&P=' + groupID + '&P=' + supplierID + '&X=1';
	}
	else {
		url = '/app/default.asp?W=AJAXGetServiceCategoriesByGroup&P=' + groupID + '&X=1';
	}
	var groupName = 'group1';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				var i;
				var returnVal = req.responseText;
				if(returnVal.indexOf('|') > 0) {
					scArr = returnVal.split('|');	
				}
				else {
					scArr = new Array(returnVal);
				}
				var theSel = document.getElementById('ServiceID');
				// first remove the existing options from the dropdown list
				for(i = theSel.options.length-1; i >= 0; i --) {
					theSel.remove(i);
				}
				// now add the new options
				theSel.options[0] = new Option('', '');
				for(i = 1; i <= scArr.length + 2; i ++) {
					var optionArr = scArr[i - 1].split('~');
					var optionName = optionArr[0];
					var optionValue = optionArr[1];
					var optionStyle = optionArr[2];
					if(optionStyle != '') {
						optionValue += 'NA';
					}
					theSel.options[i] = new Option(optionName, optionValue);
					if(optionStyle != '') {
						theSel.options[i].style.color = 'blue';
					}
				}
				theSel.selectedIndex = 0;
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				document.getElementById(target).innerHTML = returnVal;
			}
			,'groupName':groupName
		}
	);
}
function showSupplierInfoBySiteAndService(resultTarget, siteID, serviceID, serviceText, subContractorParentID) {
	var workOrderID = '0';
	var selectedSupplierId = '0';
	if(document.getElementById('SelectedSupplierID')) {
		selectedSupplierId = document.getElementById('SelectedSupplierID').value;
	}
	if(document.getElementById('WorkOrderID')) {
		if(document.getElementById('WorkOrderID').value != '') {
			workOrderID = document.getElementById('WorkOrderID').value;
		}
	}
	var url = '/app/default.asp?W=AJAXGetSupplierBySiteAndService&P='+siteID+'&P='+serviceID+'&P='+escape(serviceText)+'&P=' + workOrderID + '&P=' + subContractorParentID + '&SelectedSupplierID=' + selectedSupplierId + '&X=1';
	var groupName = 'group1';
	GetAJAXResult(resultTarget, url, groupName)
}
function checkTriggersIVRAttemptYN(priorityID, siteID, serviceID) {
	if(document.getElementById('TriggerIVRAttemptsYN')) {
		var url = '/app/default.asp?W=CheckWhetherPrioritySiteOrServiceTriggersIVRAttempt&P=' + priorityID + '&P=' + siteID + '&P=' + serviceID + '&X=1';
		var groupName = 'group1';
		var returnVal;
		AjaxRequest.get(
			{
				'url':url
				,'timeout':3000
				,'onTimeout':function() {
					return false;
				}
				,'onSuccess':function(req){ 
					returnVal = req.responseText;
					if(returnVal == '1') {
						document.getElementById('TriggerIVRAttemptsYN').checked = true;
					}
					else if(returnVal == '0') {
						document.getElementById('TriggerIVRAttemptsYN').checked = false;
					}
					//alert(returnVal);
				}
				,'onError':function(){
					returnVal = "Error connecting to the web service.";
				}
				,'groupName':groupName
			}
		);
	}
}
function updateWorkOrderTriggerIVRAttemptsYN(workOrderID, checkedYN) {
	var url = '/app/default.asp?W=UpdateWorkOrderTriggerIVRAttemptsYN&P=' + workOrderID + '&P=' + checkedYN + '&X=1';
	var groupName = 'group1';
	var returnVal;
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				return false;
			}
			,'onSuccess':function(req){ 
				return true;
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
			}
			,'groupName':groupName
		}
	);
}

function SetElementValueWithAJAXResult(elementID, url, groupName) {
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				//clearTimeout(myTimeout);
				//GetAJAXResultValue(url, groupName);
				return false;
			}
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				returnVal = req.responseText;
				document.getElementById(elementID).value = returnVal;
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				document.getElementById(elementID).value = returnVal;
			}
			,'groupName':groupName
		}
	);
}
function GetAJAXResultValue(url, groupName) {
	var returnVal;
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				//clearTimeout(myTimeout);
				//GetAJAXResultValue(url, groupName);
				return false;
			}
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				returnVal = req.responseText;
				return returnVal;
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				return returnVal;
			}
			,'groupName':groupName
		}
	);
}
function disableAllSubmitButtons() {
	var the_inputs = document.getElementsByTagName("input");
	for (var i = 0; i < the_inputs.length; i ++) {
		if(the_inputs[i].type == 'submit') {
			var inputID = the_inputs[i].id;
			var inputName = the_inputs[i].name;
			if(inputID != null && inputID != '') {
				document.getElementById(inputID).disabled = true;	
			}
			else if(inputName != null && inputName != '') {
				document.getElementByName(inputName).disabled = true;	
			}
		}
	}
}
function enableAllSubmitButtons() {
	var the_inputs = document.getElementsByTagName("input");
	for (var i = 0; i < the_inputs.length; i ++) {
		if(the_inputs[i].type == 'submit') {
			var inputID = the_inputs[i].id;
			var inputName = the_inputs[i].name;
			if(inputID != null && inputID != '') {
				document.getElementById(inputID).disabled = false;	
			}
			else if(inputName != null && inputName != '') {
				document.getElementByName(inputName).disabled = false;	
			}
		}
	}
}
function GetAJAXResult(resultTarget, url, groupName, displayInlineYN, functionToCallUponCompletion) {
	var isInput;
	var hasTarget = false;
	if(displayInlineYN == false) {
		displayInlineYN = false;
	}
	else if(displayInlineYN == null || displayInlineYN == '' || displayInlineYN == 'undefined') {
		displayInlineYN = true;	
	}
	//if(resultTarget != '' && resultTarget != null) {
	if(document.getElementById(resultTarget)) {
		hasTarget = true;
	}
	if(hasTarget) {
		isInput = isInputField(document.getElementById(resultTarget).type);
	}
	else {
		isInput = false;
	}
	if(! isInput && hasTarget) {
		if(displayInlineYN) {
			document.getElementById(resultTarget).style.display = 'inline';
		}
		document.getElementById(resultTarget).innerHTML='<img src="/app/images/timer_w.gif" width="16" height="16" style=""vertical-align:middle;"" /> Loading...';
	}
	disableAllSubmitButtons();
	AjaxRequest.get(
		{
			'url':url
			,'timeout':120000
			,'onTimeout':function() {
				if(isInput || ! hasTarget) {
					//alert(req.responseText);
					alert("Timeout error connecting to the web service.");
					return false;
				}
				else {
					document.getElementById(resultTarget).innerHTML = "Timeout error connecting to the web service.";
				}
				//GetAJAXResult(resultTarget, url, groupName);
			}
			,'onSuccess':function(req){ 
				if(document.getElementById(resultTarget)) {
					if(isInput && hasTarget) {
						document.getElementById(resultTarget).value = req.responseText; 
					}
					else if(document.getElementById(resultTarget).src) {
						document.getElementById(resultTarget).src = req.responseText;
					}
					else if(hasTarget) {
						document.getElementById(resultTarget).innerHTML = req.responseText; 	
						if(resultTarget == 'callCenterUserStatusSpan' && req.responseText != '') {
							document.getElementById('callCenterUserStatusSpan').style.width = '120px';
							document.getElementById('callCenterUserStatusSpan').style.display = 'inline';
							document.getElementById('quickSearchToolbarDiv').style.left = '218px';
						}
					}
					enableAllSubmitButtons();
					if(url.indexOf('ShowSaveCustomReportsQueryPopup') != -1) {
						getCustomReportsFormValues();
					}
					if(functionToCallUponCompletion != '' && functionToCallUponCompletion != undefined) {
						//alert('I\'m calling ' + functionToCallUponCompletion);
						eval(functionToCallUponCompletion);
					}
				}
				else {
					return req.responseText;	
				}
			}
			,'onError':function(req){
				if(isInput || ! hasTarget) {
					//alert(req.responseText);
					alert("Error connecting to the web service.");
				}
				else {
					if(location.href.indexOf('&test=') != -1) {
						alert(req.responseText);
					}
					else {
						document.getElementById(resultTarget).innerHTML = "Error connecting to the web service.";
					}
				}
				enableAllSubmitButtons();
			}
			,'groupName':groupName
		}
	);
}
function isInputField(elementType) {
	var returnVal = false;
	if(elementType == 'text' || elementType == 'textarea' || elementType == 'checkbox' || elementType == 'select-one' || elementType == 'select-multiple') {
		returnVal = true;
	}
	return returnVal;
}
var consolidatedLineItemSaved = true;
function SaveConsolidatedLineItemJS(resultTarget, url, groupName) {
	consolidatedLineItemSaved = true;
	GetAJAXResultWithoutLoadingImage(resultTarget, url, groupName);
}
function GetAJAXResultWithoutLoadingImage(resultTarget, url, groupName) {
	if(document.getElementById(resultTarget)) {
		document.getElementById(resultTarget).style.display='block';
	}
	if(document.getElementById('btnSubmit')) {
		document.getElementById('btnSubmit').disabled = true;
	}
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				//GetAJAXResultWithoutLoadingImage(resultTarget, url, groupName);
				return false;
			}
			,'onSuccess':function(req){ 
				if(document.getElementById(resultTarget)) {
					document.getElementById(resultTarget).innerHTML=req.responseText; 
					document.getElementById(resultTarget).style.display = 'inline';
				}
				if(document.getElementById('btnSubmit')) {
					document.getElementById('btnSubmit').disabled = false;
				}
			}
			,'onError':function(){
				document.getElementById(resultTarget).innerHTML="Error";
			}
			,'groupName':groupName
		}
	);
}
function GetAJAXPostResult(theform, resultTarget) {
	if(document.getElementById(resultTarget)) {
		var isInput = isInputField(document.getElementById(resultTarget).type);
		//myTimeout = setTimeout("document.getElementById('"+resultTarget+"').innerHTML='<img src=..//"images/loading.gif/" width=\"15\" height=\"15\" /> Loading...'",50);
		if(! isInput) {
			document.getElementById(resultTarget).style.display='block';
			document.getElementById(resultTarget).innerHTML='<img src="/app/images/timer_w.gif" width="16" height="16" style=""vertical-align:middle;"" /> Loading...';
		}
		if(document.getElementById('btnSubmit')) {
			document.getElementById('btnSubmit').disabled = true;
		}
	}
  	AjaxRequest.submit(theform, 
		{
			'onSuccess':function(req){ 
				//clearTimeout(myTimeout);
				//alert(req.responseText);
				if(document.getElementById(resultTarget)) {
					if(isInput) {
						document.getElementById(resultTarget).value = req.responseText; 
					}
					else {
						if(document.getElementById(resultTarget)) {
							document.getElementById(resultTarget).innerHTML = req.responseText;	
							document.getElementById(resultTarget).style.display = 'inline';
							if(req.responseText == 'Emergency') {
								document.getElementById(resultTarget).style.color = '#FF0000';
							}
							else {
								document.getElementById(resultTarget).style.color = '#000000';
							}
						}
					}
					if(document.getElementById('btnSubmit')) {
						document.getElementById('btnSubmit').disabled = false;
					}
				}
			}
			,'onError':function() {
				if(document.getElementById(resultTarget)) {
					document.getElementById(resultTarget).innerHTML="Error connecting to the web service.";
				}
			}
		}
	);
}
function AJAXPost(theform) {
  	AjaxRequest.submit(theform, 
		{
			'onSuccess':function(req){ 
				//document.getElementById(resultTarget).innerHTML=req.responseText;
			}
			,'onError':function() {
					alert("Error connecting to the web service.");
			}
		}
	);
}
// Conversion factors as variants to eliminate all the multiplication
var SECONDS_CF     = 1000;
var MINUTES_CF     = 60000;          // 60 * 1000
var HOURS_CF       = 3600000;        // 60 * 60 * 1000
var DAYS_CF        = 86400000;       // 24 * 60 * 60 * 1000
var WEEKS_CF       = 604800000;      // 7 * 24 * 60 * 60 * 1000
var FORTNIGHTS_CF  = 1209600000;     // 14 * 24 * 60 * 60 * 1000
var MONTHS_CF      = 2592000000;     // 30 * 24 * 60 * 60 * 1000  (approx = 1 month)
var QUARTERS_CF    = 7776000000;     // 90 * 24 * 60 * 60 * 1000  (approx = 3 months)
var YEARS_CF       = 31557600000;    // 365 * 24 * 60 * 60 * 1000 (approx = 1 year)
var DECADES_CF     = 315576000000;   // 10 * 365 * 24 * 60 * 60 * 1000 (approx = 1 decade)
var CENTURIES_CF   = 3155760000000;  // 100 * 365 * 24 * 60 * 60 * 1000 (approx = 1 century)

function addMilliseconds(mDate, ms) {  
	//alert(nDate + '\n' + ms);
	var nDate = new Date(new Date(mDate).setTime(mDate.getTime() + (ms)));
	return nDate; 
}
function getShortDate(mDate) {
	mDate = new Date(mDate);
	var m = mDate.getMonth() + 1;
	var d = mDate.getDate();
	var y = mDate.getFullYear();
	return m + "/" + d + "/" + y;
}
function addDays(mDate, d) {
	//alert(mDate + '\n' + d);
	var sDate = new Date(getShortDate(mDate));
	return getShortDate(addMilliseconds(sDate, d * DAYS_CF));
}
function addWeeks(mDate, w) {
	var sDate = new Date(getShortDate(mDate));
	return getShortDate(addMilliseconds(sDate, w * WEEKS_CF));
}
function addMonths(mDate, m) {
	// Just return the first of the month. Don't worry about what day of the month
	var sDate = new Date(getShortDate(mDate));
	var cYear = sDate.getFullYear();
	var cDay = sDate.getDate();
	var newMonth = eval(sDate.getMonth() + 1 + m);
	if(newMonth > 12) {
		newDate = newMonth - 12 + "/1/" + eval(cYear + 1);
		return getShortDate(newDate);
	}
	else {
		return getShortDate(newMonth + "/1/" + cYear);
	}
}
function addYears(mDate, y) {
	var sDate = new Date(getShortDate(mDate));
	return addMonths(sDate, 12 * y);
}
function getNumberOfDaysInMonth(mDate) {
	var sDate = new Date(getShortDate(mDate));
	var m = sDate.getMonth() + 1;
	var d = 1;
	var y = sDate.getFullYear();
	var nMonth = eval(m + 1);
	var nYear = y;
	if (nMonth > 12) {
		nMonth = 1;
		nYear = eval(y + 1);
	}
	var tDate = new Date(nMonth + "/1/" + nYear);
	return new Date(addDays(tDate, -1)).getDate();
}
function getYearToStart(StartDate, monthToStart) {
	var sDate = new Date(getShortDate(StartDate));
	var m = sDate.getMonth() + 1;
	var y = sDate.getFullYear();
	if(m > eval(monthToStart)) {
		y = eval(y + 1);
	}
	return y;
}
function setNumberOfSelectableDaysInMonth(e) {
	var sDays = 0;
	switch (e) {
		case "1": // January
			sDays = 31;
			break;
		case "2": // February
			sDays = 28;
			break;
		case "3": // March
			sDays = 31;
			break;
		case "4": // April
			sDays = 30;
			break;
		case "5": // May
			sDays = 31;
			break;
		case "6": // June
			sDays = 30;
			break;
		case "7": // July
			sDays = 31;
			break;
		case "8": // August
			sDays = 31;
			break;
		case "9": // September
			sDays = 30;
			break;
		case "10": // October
			sDays = 31;
			break;
		case "11": // November
			sDays = 30;
			break;
		case "12": // December
			sDays = 31;
			break;
	}
	if(document.getElementById('selYearly2').value > sDays) {
		document.getElementById('selYearly2').value = sDays;
	}
}
var sun, mon, tue, wed, thu, fri, sat;
function setDaysOfMonth(firstDayOfMonth) {
	switch(firstDayOfMonth) {
		case 0: //Sunday
			sun = 0;
			mon = 1;
			tue = 2;
			wed = 3;
			thu = 4;
			fri = 5;
			sat = 6;
			break;
		case 1: //Monday
			sun = 6;
			mon = 0;
			tue = 1;
			wed = 2;
			thu = 3;
			fri = 4;
			sat = 5;
			break;
		case 2: //Tuesday
			sun = 5;
			mon = 6;
			tue = 0;
			wed = 1;
			thu = 2;
			fri = 3;
			sat = 4;
			break;
		case 3: //Wednesday
			sun = 4;
			mon = 5;
			tue = 6;
			wed = 0;
			thu = 1;
			fri = 2;
			sat = 3;
			break;
		case 4: //Thursday
			sun = 3;
			mon = 4;
			tue = 5;
			wed = 6;
			thu = 0;
			fri = 1;
			sat = 2;
			break;
		case 5: //Friday
			sun = 2;
			mon = 3;
			tue = 4;
			wed = 5;
			thu = 6;
			fri = 0;
			sat = 1;
			break;
		case 6: //Saturday
			sun = 1;
			mon = 2;
			tue = 3;
			wed = 4;
			thu = 5;
			fri = 6;
			sat = 0;
			break;
	}
}
function getFirstOccurenceOfDayOfMonthByPattern(v, testDate) {
	switch(v) {
		case "Sunday":
			testDate = addDays(testDate, sun);
			break;
		case "Monday":
			testDate = addDays(testDate, mon);
			break;
		case "Tuesday":
			testDate = addDays(testDate, tue);
			break;
		case "Wednesday":
			testDate = addDays(testDate, wed);
			break;
		case "Thursday":
			testDate = addDays(testDate, thu);
			break;
		case "Friday":
			testDate = addDays(testDate, fri);
			break;
		case "Saturday":
			testDate = addDays(testDate, sat);
			break;
	}
	return testDate;
}
function getSecondOccurenceOfDayOfMonthByPattern(v, testDate) {
	switch(v) {
		case "Sunday":
			testDate = addDays(testDate, sun + 7);
			break;
		case "Monday":
			testDate = addDays(testDate, mon + 7);
			break;
		case "Tuesday":
			testDate = addDays(testDate, tue + 7);
			break;
		case "Wednesday":
			testDate = addDays(testDate, wed + 7);
			break;
		case "Thursday":
			testDate = addDays(testDate, thu + 7);
			break;
		case "Friday":
			testDate = addDays(testDate, fri + 7);
			break;
		case "Saturday":
			testDate = addDays(testDate, sat + 7);
			break;
	}
	return testDate;
}
function getThirdOccurenceOfDayOfMonthByPattern(v, testDate) {
	switch(v) {
		case "Sunday":
			testDate = addDays(testDate, sun + 14);
			break;
		case "Monday":
			testDate = addDays(testDate, mon + 14);
			break;
		case "Tuesday":
			testDate = addDays(testDate, tue + 14);
			break;
		case "Wednesday":
			testDate = addDays(testDate, wed + 14);
			break;
		case "Thursday":
			testDate = addDays(testDate, thu + 14);
			break;
		case "Friday":
			testDate = addDays(testDate, fri + 14);
			break;
		case "Saturday":
			testDate = addDays(testDate, sat + 14);
			break;
	}
	return testDate;
}
function getFourthOccurenceOfDayOfMonthByPattern(v, testDate) {
	switch(v) {
		case "Sunday":
			testDate = addDays(testDate, sun + 21);
			break;
		case "Monday":
			testDate = addDays(testDate, mon + 21);
			break;
		case "Tuesday":
			testDate = addDays(testDate, tue + 21);
			break;
		case "Wednesday":
			testDate = addDays(testDate, wed + 21);
			break;
		case "Thursday":
			testDate = addDays(testDate, thu + 21);
			break;
		case "Friday":
			testDate = addDays(testDate, fri + 21);
			break;
		case "Saturday":
			testDate = addDays(testDate, sat + 21);
			break;
	}
	return testDate;
}
function getLastOccurenceOfDayOfMonthByPattern(v, testDate) {
	var newMonth, cMonth
	cMonth = new Date(testDate).getMonth() + 1;
	switch(v) {
		case "Sunday":
			newMonth = new Date(addDays(testDate, sun + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, sun + 28);
			}
			else {
				testDate = addDays(testDate, sun + 21);
			}
			break;
		case "Monday":
			newMonth = new Date(addDays(testDate, mon + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, mon + 28);
			}
			else {
				testDate = addDays(testDate, mon + 21);
			}
			break;
		case "Tuesday":
			newMonth = new Date(addDays(testDate, tue + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, tue + 28);
			}
			else {
				testDate = addDays(testDate, tue + 21);
			}
			break;
		case "Wednesday":
			newMonth = new Date(addDays(testDate, wed + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, wed + 28);
			}
			else {
				testDate = addDays(testDate, wed + 21);
			}
			break;
		case "Thursday":
			newMonth = new Date(addDays(testDate, thu + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, thu + 28);
			}
			else {
				testDate = addDays(testDate, thu + 21);
			}
			break;
		case "Friday":
			newMonth = new Date(addDays(testDate, fri + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, fri + 28);
			}
			else {
				testDate = addDays(testDate, fri + 21);
			}
			break;
		case "Saturday":
			newMonth = new Date(addDays(testDate, sat + 28)).getMonth() + 1;
			if(newMonth == cMonth) {
				testDate = addDays(testDate, sat + 28);
			}
			else {
				testDate = addDays(testDate, sat + 21);
			}
			break;
	}
	return testDate;
}
function DateIsValid(vDate) {
	// This function expects a date in the format, "month/day/year".
	// The year can be either 2 or 4 digits.
	// If 2 digits are used for the year, then 1/1/50 is interpreted as 1/1/1950.  1/1/49 is interpreted as 1/1/2049
	// Javascript always seems to allow us to turn a seemingly invalid date into a valid one (ie. 12/32/2006 becomes 1/1/2007),
	// therefore, we need to check to see if the month, day, and year from vDate is the same as the date that Javascript creates.
	var vArray;
	var vMonth;
	var vDay;
	var vYear;
	if(vDate.indexOf('0') == 0) {
		vDate = vDate.replace('0',''); // get rid of a leading "0"
	}
	if(vDate.indexOf('/0') > 0) {
		vDate = vDate.replace('/0','/');	
	}
	if(vDate.indexOf("/") != -1) {
		vArray = vDate.split("/");
		vMonth = vArray[0]; // assumes the first digit is the month
		vDay = vArray[1]; // assumes the second digit is the day
		vYear = vArray[2]; // assumes the third digit is the year
		fourDigitYear = Return4DigitYear(vYear);
		vYear = fourDigitYear;
		vDate = vDate.replace(vYear, fourDigitYear);
	}
	try {
		myDate = new Date(vDate);
		myDay = myDate.getDate();
		myMonth = myDate.getMonth() + 1;
		myYear = myDate.getFullYear();
		if(myDay.toString() == vDay.toString() && myMonth.toString() == vMonth.toString() && myYear.toString() == vYear.toString()) {
			return true;
		}
		else {
			return false;
		}
	}
	catch(er) {
		return false;
	}
}

function Return4DigitYear(vYear) {
	if(vYear.length == 2 && eval(vYear) >= 50) {
		// Only 2 digits were used and the year is greater than or equal to 50.  Assume this means a year between 1950 and 1999
		return "19" + vYear;
	}
	else if(vYear.length == 2 && eval(vYear) < 50) {
		// Only 2 digits were used and the year is less than 50.  Assume this means a year between 2000 and 2049
		return "20" + vYear;
	}
	else {
		return vYear;
	}
}

function DateOccursInPast(vDate, currentDate) {
	// This function compares two dates and determines if the first one occurs before the second one.
	// vDate represents the date we are checking.  currentDate represents the current date or the date we are
	// comparing against.  
	//alert(DateIsValid(currentDate));
	if(DateIsValid(vDate) && DateIsValid(currentDate)) {
		var myVDate = new Date(vDate);
		var myCDate = new Date(currentDate);
		var myVDay = myVDate.getDate();
		var myVMonth = myVDate.getMonth();
		var myVYear = Return4DigitYear(myVDate.getFullYear());
		var myCDay = myCDate.getDate();
		var myCMonth = myCDate.getMonth();
		var myCYear = Return4DigitYear(myCDate.getFullYear());
		if(myVYear < myCYear) {
			return true;
		}
		else if(myVDay < myCDay && myVMonth == myCMonth && myVYear == myCYear) {
			return true;
		}
		else if(myVMonth < myCMonth && myVDay == myVDay && myVYear == myCYear) {
			return true;
		}
		else {
			return false;
		}
	}
	else {
		return false;
	}
}

function checkThisDate(e) {
	var cClass = '';
	if(e.className.indexOf('req') != -1) {
		cClass = 'req';
	}
	if(e.value != '' && ! DateIsValid(e.value)) {
		e.className = cClass + ' error_text';
		e.value = e.value + ' - ERROR'; //'Date Not Valid!';
		setTimeout("resetThisDate('" + e.id + "', '" + cClass + "')", 1500);
		//e.select();
	}
	else{
		e.className = cClass + ' text';	
	}
}
function resetThisDate(e, cClass) {
	document.getElementById(e).value = '';
	document.getElementById(e).className = cClass + ' text';	
}

function EmailIsValid(vEmail) {
	// This function will parse an email address and make sure it appears to be valid
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(vEmail);
}

function setTabMenu(tabName) {
	createCookie('SelectedTabMenu', tabName, 1);
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function setETATimeForSubmit(formId) {
	if(checkForm(formId)) {
		var enforceETACheck = true;
		var etaDate = document.getElementById('etadate').value;
		var etaHour = document.getElementById('etaHour').value;
		var etaMinutes = document.getElementById('etaMinutes').value;
		var etaTime = etaHour + ':' + etaMinutes + ':00';
		var performedTroubleshooting = true;
		if(document.getElementById('cbPerformedTroubleshooting')) {
			if(document.getElementById('cbPerformedTroubleshooting').checked) {
				performedTroubleshooting = true;
			}
			else {
				performedTroubleshooting = false;
			}
		}
		document.getElementById('etatime').value = etaTime;
		if(document.getElementById('forUpdateOnly')) {
			if(document.getElementById('forUpdateOnly').value == '1') {
				enforceETACheck = false;
			}
		}
		if(enforceETACheck) {
			if(! performedTroubleshooting) {
				alert('You must acknowledge that you have performed trouble shooting with the club.');
				return false;
			}
			else {
				var etaCheckOK = checkETATime(etaDate, etaTime, document.getElementById('AMORPM').value);
				//alert(etaCheckOK);
				return etaCheckOK;
			}//) {
				//alert(checkETATime(etaDate, etaTime, document.getElementById('AMORPM').value));
	//			return false;
	//		}
	//		else {
	//			return true;
	//		}
		}
		else if(! performedTroubleshooting) {
			alert('You must acknowledge that you have performed trouble shooting with the club.');
			return false;
		}
		else {
			return true;
		}
	}
	else {
		return false;	
	}
}

function switchUserAccount(e) {
	// First, reset the menu cookie
	setTabMenu('tabLi5Dashboard');
	
	var userType;
	var userID;
	if(e.indexOf('COMPANY_') != -1) {
		userType = 2;	
		userID = e.replace('COMPANY_', '');
	}
	else if(e.indexOf('USER_') != -1) {
		userType = 3;	
		userID = e.replace('USER_', '');
	}
	else if(e.indexOf('SUPPLIER_') != -1) {
		userType = 1;	
		userID = e.replace('SUPPLIER_', '');
	}
	
	window.top.location.href = '/app/default.asp?W=SwitchLoginAccount&P=' + userType + '&P=' + userID;	
}

function setWorkOrderNTEAmount(nteType, nteForeignKeyID) {
	if(document.getElementById('NotToExceed')) {
		var nteVal = document.getElementById('NotToExceed').value;
		if(isNaN(nteVal)) {
			nteVal = 0;
		}
		GetAJAXResult('NotToExceedTD', '/app/default.asp?W=GetServiceOrEquipmentNTEAmount&P=' + nteType + '&P=' + nteForeignKeyID + '&P=' + nteVal + '&X=1','group2');
	}
}

function updateMBoxServiceID(categoryID) {
	var siteID = document.getElementById('SiteID').value;
	GetAJAXResult('MBoxServiceTD','/app/default.asp?W=AJAXGetMBoxServicesBySiteAndCategory&P='+siteID+'&P='+categoryID+'&X=1','group1');
	resetProblemCodeAndPriority();
}

function resetProblemCodeAndPriority() {
	var probCode = document.getElementById('MBoxProblemCodeID_FK');
	var priority = document.getElementById('MBoxProblemCodePriorityID_FK');
	// remove the existing options from the dropdown lists
	for(i = probCode.options.length-1; i >= 0; i --) {
		probCode.remove(i);
	}
	for(i = priority.options.length-1; i >= 0; i --) {
		priority.remove(i);
	}
	document.getElementById('serviceRequestOrderPriorityDescription').innerHTML = '';
}
function resetProblemCodePriorityValues() {
	document.getElementById('MBoxProblemCodePriorityID_FK').value = '';
	document.getElementById('serviceRequestOrderPriorityDescription').innerHTML = '';
}

function unloadPage() {
	try {
		var h = screen.height; //screen.availHeight;
		var padding;
		if(h == null) {h = 500;}
		padding = (h / 2) - 250;
		//if(! document.getElementById('unloadPageDiv')) {
		//	document.body.insertAdjacentHTML('afterBegin', '<div id="unloadPageDiv" style="position:absolute;left:0px;top:0px;display:none;visibility:hidden;z-index:2000;background-color:#CCCCCC;width:100%;height:' + h + 'px;text-align:center;font-weight:bold;color:#000000;padding-top:' + padding + 'px;filter: alpha(opacity=60);opacity:.6;">Please Wait...</div>');
		//}
		if(document.getElementById('unloadPageDiv')) {
			document.getElementById('unloadPageDiv').style.height = h + 'px';
			document.getElementById('unloadPageDiv').style.paddingTop = padding + 'px';
			document.getElementById('unloadPageDiv').style.top = document.documentElement.scrollTop + 'px';
			showMe('unloadPageDiv');
		}
	}
	catch(err) {
		
	}
}

var showCalendarLayerVisible = false;
function drawTheCalendar(evt, curYear, curMonth) {
	var url = '/app/default.asp?W=DrawCalendar&curYear=' + curYear + '&curMonth=' + curMonth + '&X=1';
	var layerName = 'pmCalendarLayer';
	var layerWidth = 600;
	var layerHeight = 500;
	if(! showCalendarLayerVisible) {
		buildPopup(layerName);
		showCalendarLayerVisible = true;
	}
	showMe(layerName);
	setElementPositionInRelationToMouseClick(evt, layerName, layerWidth, layerHeight);
	GetAJAXResult(layerName, url, 'group1');
	//alert(url);
/*	var groupName = 'group1';
	document.getElementById('DrawCalendarDiv').innerHTML = '<img src="/app/images/timer_w.gif" width="16" height="16" style=""vertical-align:middle;"" /> Loading the Calendar View...';
	AjaxRequest.get(
		{
			'url':url
			,'timeout':5000
			,'onTimeout':function() {
				document.getElementById('DrawCalendarDiv').innerHTML = '';
			}
			,'onSuccess':function(req){ 
				returnVal = req.responseText;
				document.getElementById('DrawCalendarDiv').innerHTML = returnVal;
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				document.getElementById('DrawCalendarDiv').innerHTML = returnVal;
			}
			,'groupName':groupName
		}
	);*/
}
function goPrevious(evt) {
	//var tForm = document.getElementById('viewScheduledServicesForm');
	if(document.getElementById('curMonth').selectedIndex == 0) {
		document.getElementById('curMonth').value = '12';
		document.getElementById('curYear').value = eval(document.getElementById('curYear').value) - 1;
	}
	else {
		document.getElementById('curMonth').selectedIndex -= 1;
	}
	drawTheCalendar(evt, document.getElementById('curYear').value, document.getElementById('curMonth').value)
	//tForm.submit();
}
function goNext(evt) {
	//var tForm = document.getElementById('viewScheduledServicesForm');
	if(document.getElementById('curMonth').selectedIndex == 11) {
		document.getElementById('curMonth').value = '1';
		document.getElementById('curYear').value = eval(document.getElementById('curYear').value) + 1;
	}
	else {
		document.getElementById('curMonth').selectedIndex += 1;
	}
	drawTheCalendar(evt, document.getElementById('curYear').value, document.getElementById('curMonth').value)
	//tForm.submit();
}
function goToToday(evt) {
	var d = new Date();
	//var tForm = document.getElementById('viewScheduledServicesForm');
	document.getElementById('curMonth').selectedIndex = d.getMonth();
	document.getElementById('curYear').value = d.getFullYear();
	
	drawTheCalendar(evt, document.getElementById('curYear').value, document.getElementById('curMonth').value)
	//tForm.submit();
}
function showEvents(d, serviceIDs) {
	if(serviceIDs == 'ServiceIDsToReplace') {
		location.href = '/app/default.asp?W=ViewScheduledServices&ServiceIDs=&sDate='+d;
	}
	else {
		location.href = '/app/default.asp?W=ViewScheduledServices&ServiceIDs='+serviceIDs+'&sDate='+d;
	}
}
function returnDay(d, e) {
	if(window.opener) {
		window.opener.document.getElementById(e).value = d;
		self.close();
		window.opener.focus();
	}
}
function showDetails(s) {
	document.getElementById('calendarEventDetails').innerHTML = s;
	if(event.x) {
		document.getElementById('calendarEventDetails').style.top = event.y + 15;
		document.getElementById('calendarEventDetails').style.left = event.x - 40;
	}
	document.getElementById('calendarEventDetails').style.visibility = 'visible';
}
function hideDetails() {
	document.getElementById('calendarEventDetails').innerHTML = '';
	document.getElementById('calendarEventDetails').style.visibility = 'hidden';
}

function submitSurveyPhotos() {
	// This function will use AJAX to submit the photo to be uploaded
	GetAJAXPostResult(document.getElementById('FormSurveyPhotos'), '');
	document.getElementById('SiteSurveyPhotoViewDiv').style.display = 'block';
	document.getElementById('SiteSurveyPhotoUploadDiv').style.display = 'none';
	hideMe('photoViewerPopup');
}
function showSiteSurveyTab(e) {
	if(e != currentSiteSurveyTab) {
		var thisForm = document.getElementById('FormSiteSurveys');
		document.getElementById('TargetTab').value = e;
		thisForm.submit();
	}
}
function addToDefectList(e, type, checkedYN, id) {
	if(checkedYN && document.getElementById('ItemComments_' + e).value != '') {
		document.getElementById('FormSiteSurveys').action = document.getElementById('FormSiteSurveys').action + '&addDefect=' + e + '_' + type + '_' + id;
		switch(type) {
			case 'maintenance':
				showSiteSurveyTab(6);
				break;
			case 'capital':
				showSiteSurveyTab(7);
				break;
		}		
	}
	else if(checkedYN && document.getElementById('ItemComments_' + e).value == '') {
		alert('There are no comments for this item.\nYou must add a comment first if you want to create a ' + type + ' defect.');
		switch(type) {
			case 'maintenance':
				document.getElementById('ItemAddToMaintDefect_' + e).checked = false;
				break;
			case 'capital':
				document.getElementById('ItemAddToCapitalDefect_' + e).checked = false;
				break;
		}
	}
}

function togglePhotoViewer(e) {
	switch(e) {
		case 'add':
			document.getElementById('SiteSurveyPhotoViewDiv').style.display = 'none';
			document.getElementById('SiteSurveyPhotoUploadDiv').style.display = 'block';
			document.getElementById('AddNew').value = 'true';
			document.getElementById('PhotoName').value = '';
			document.getElementById('currentPhotoLinkSpan').style.display = 'none';
			break;
		case 'edit':
			document.getElementById('SiteSurveyPhotoViewDiv').style.display = 'none';
			document.getElementById('SiteSurveyPhotoUploadDiv').style.display = 'block';
			document.getElementById('AddNew').value = 'false';
			document.getElementById('currentPhotoLinkSpan').style.display = 'block';
			document.getElementById('PhotoName').value = document.getElementById('CurrentPhotoCaption').value;
			break;
		case 'delete':
			if(confirm('Are you sure you want to delete this photo?')) {
				deletePhoto();	
			}
			document.getElementById('AddNew').value = 'false';
			document.getElementById('currentPhotoLinkSpan').style.display = 'block';
			break;
		case 'back':
			document.getElementById('SiteSurveyPhotoViewDiv').style.display = 'block';
			document.getElementById('SiteSurveyPhotoUploadDiv').style.display = 'none';
			document.getElementById('AddNew').value = 'false';
			document.getElementById('currentPhotoLinkSpan').style.display = 'block';
			document.getElementById('PhotoName').value = document.getElementById('CurrentPhotoCaption').value;
			break;
	}
}
function updatePhotoLink(link, id, caption, target, e, index) {
	if(document.getElementById(target)) {
		document.getElementById(target).src = '/app/images/loadingImage.jpg';
		document.getElementById('PhotoID').value = id;
		document.getElementById('currentPhotoLinkSpan').style.display = 'block';
		document.getElementById('currentPhotoLink').src = '/app/PhotoViewer.asp?i=' + link + '&w=80&h=60';
		document.getElementById('photoImageLink').href = link;
		document.getElementById('photoCaption').innerHTML = caption;
		document.getElementById('CurrentPhotoCaption').value = caption;
		document.getElementById('PhotoName').value = caption;
		setSelectedPhotoLink(e);
		setTimeout("showPhotoViewerImage('" + target + "','" + link + "')", 100);
		currentLinkIndex = index;
	}
}	
function showPhotoViewerImage(target, link) {
	document.getElementById(target).src = '/app/PhotoViewer.asp?i=' + link + '&w=266&h=200';	
}
function deletePhoto() {
	var siteSurveyID = document.getElementById('SiteSurveyID').value;
	var photoReferenceID = document.getElementById('PhotoReferenceID').value;
	var photoType = document.getElementById('PhotoType').value;
	var id = document.getElementById('PhotoID').value;
	var equipmentID = document.getElementById('EquipmentID').value;
	location.href = '/app/default.asp?W=DeleteSiteSurveyPhoto&P=' + siteSurveyID + '&P=' + photoType + '&P=' + photoReferenceID + '&P=' + id + '&P=' + equipmentID + '&X=1';
}
function setSelectedPhotoLink(e) {
	document.getElementById(currentSelectedPhotoLink).style.fontWeight = 'normal';
	document.getElementById(currentSelectedPhotoLink).style.color = '';
	document.getElementById(e).style.fontWeight = 'bold';
	document.getElementById(e).style.color = 'black';
	currentSelectedPhotoLink = e;
}
function photoViewerGo(dir) {
	var link = '';
	var id = '';
	var caption = '';
	var target = '';
	var e = '';
	var index = 0;
	//alert('linksArr.length = ' + linksArr.length + '\ncurrentLinkIndex = ' + currentLinkIndex);
	if(dir == 'previous' && currentLinkIndex == 0 && linksArr.length > 0) {
		var lArr = linksArr[linksArr.length - 1].split('|');
		link = lArr[0]
		id = lArr[1];
		caption = lArr[2];
		target = lArr[3];
		e = lArr[4];
		index = linksArr.length - 1;
		//alert('link = ' + link + '\nid = ' + id + '\ncaption = ' + caption + '\ntarget = ' + target + '\ne = ' + e);
	}
	else if(dir == 'previous' && currentLinkIndex > 0 && linksArr.length > 0) {
		var lArr = linksArr[currentLinkIndex - 1].split('|');
		link = lArr[0]
		id = lArr[1];
		caption = lArr[2];
		target = lArr[3];
		e = lArr[4];
		index = currentLinkIndex - 1;
	}
	else if(dir == 'next' && currentLinkIndex < linksArr.length - 1 && linksArr.length > 0) {
		var lArr = linksArr[currentLinkIndex + 1].split('|');
		link = lArr[0]
		id = lArr[1];
		caption = lArr[2];
		target = lArr[3];
		e = lArr[4];
		index = currentLinkIndex + 1;
	}
	else if(dir == 'next' && currentLinkIndex == linksArr.length - 1 && linksArr.length > 0) {
		var lArr = linksArr[0].split('|');
		link = lArr[0]
		id = lArr[1];
		caption = lArr[2];
		target = lArr[3];
		e = lArr[4];
		index = 0;
	}
	updatePhotoLink(link, id, caption, target, e, index);
	//alert('link = ' + link + '\nid = ' + id + '\ncaption = ' + caption + '\ntarget = ' + target + '\ne = ' + e);
}

window.onscroll = function() {
	var valScrollTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;	
	try {
		document.getElementById('woAlertsDivContent').style.bottom = -valScrollTop + 'px';
	}
	catch(err) {
		
	}
}

function showPagingBarCustomPageBox(evt, searchText, newPage, currentPage) {
	popupName = 'pagingBarCustomPageBox';
	if(! document.getElementById(popupName)) {
		document.body.insertAdjacentHTML('afterBegin', '<div id="' + popupName + '" style="position:absolute;left:0px;top:0px;display:none;visibility:hidden;z-index:550;"></div>');
	}
	document.getElementById(popupName).innerHTML = '<table cellpadding="1" cellspacing="0" width="90px" height="22px" style="background-color:#EDF2FD;border:1px solid #889AC0;"><tr><td>' +
		'&nbsp;<input type="text" id="customPageText" name="customPageText" value="" class="text" style="width:40px;" />&nbsp;' +
		'<input type="button" value="Go" class="submit" style="height:18px;" onclick="goToPagingHref(\'' + searchText + '\', document.getElementById(\'customPageText\').value, \'' + currentPage + '\');" /></td></tr></table>';
	
	//setElementPositionInRelationToParentElement(popupName, 'aCustomPageBoxDownArrow', 90, 26);
	if(document.getElementById(popupName).style.display == 'block') {
		hideMe(popupName);
	}
	else {
		showMe(popupName);
	}
	setElementPositionInRelationToMouseClick(evt, popupName, 90, 26);
	var curY = document.getElementById(popupName).style.top.replace('px', '');
	document.getElementById(popupName).style.top = (eval(curY) + 10) + 'px';
	//alert(document.getElementById('pagingBarCustomPageBox').innerHTML);
}

function goToPagingHref(searchText, newPage, currentPage, wParam) {
	var isWorkOrdersPage = false;
	var isServiceRequestsPage = false;
	var isInvoicesPage = false;
	var isRFPsPage = false;
	var loc = location.href;
	var anchorArr = loc.split('\#');
	loc = anchorArr[0];
	var anch;// = anchorArr[1];
	//alert(wParam);
	var sortBy;
	var sortOrder;
	
	while(searchText.indexOf(' & ') != -1) {
		searchText = searchText.replace(' & ', ' _AMP_ ');	
	}
	
	if(location.href.indexOf('&page=') == -1) {
		loc = loc + searchText + '&page=' + newPage;
	}
	else {
		loc = loc.replace('&page=' + currentPage, '&page=' + newPage)
	}
	
	switch (wParam) {
		case 'ShowDashboardWorkOrders':	
			if(document.getElementById('dashboardWO')) {
				anch = document.getElementById('dashboardWO').value;
			}
			break;
		case 'ShowDashboardServiceRequests':	
			if(document.getElementById('dashboardSR')) {
				anch = document.getElementById('dashboardSR').value;
			}
			break;
		case 'ShowDashboardInvoices':	
			if(document.getElementById('dashboardI')) {
				anch = document.getElementById('dashboardI').value;
			}
			break;
		case 'ShowDashboardRFPs':	
			if(document.getElementById('dashboardRFP')) {
				anch = document.getElementById('dashboardRFP').value;
			}
			break;
	}
	if(document.getElementById('sortBy')) {
		sortBy = document.getElementById('sortBy').value;
	}
	if(document.getElementById('sortOrder')) {
		sortOrder = document.getElementById('sortOrder').value;
	}
	if(sortBy != '' && loc.indexOf('sortBy') == -1) {
		loc += '&sortBy=' + sortBy;
	}
	if(sortOrder != '' && loc.indexOf('sortOrder') == -1) {
		loc += '&sortOrder=' + sortOrder;
	}
	if(anch != '' && anch != 'undefined' && anch != undefined) {
		loc += '#' + anch;	
	}
	//alert(loc);
	location.href = loc;
}
function getShowInvoicesTotal(invoiceID) {
	GetAJAXResultWithoutLoadingImage('iTotal' + invoiceID,'/app/default.asp?W=GetShowInvoicesTotal&P=' + invoiceID + '&X=1','group1');
}

var shadeIndex1 = new Array('000000','131300','2c2d00','4c4b00','6e6e00','919200','b3b300','d3d300','ecec00','ffff00'); //black to yellow
var currentShadeI = 0;
var letterSpeedIncrement = 50;
var flashTextFadeSpeedOriginal = 70;
var flashTextFadeSpeed = 30;
var flashTextIntervalSpeed = 3000;
function flashText(e, numberOfIntervals) {
	if(numberOfIntervals == '') {
		numberOfIntervals = 1;	
	}
	if(document.getElementById(e)) {
		for(var i = 0; i < numberOfIntervals; i ++) {
			if(i > 0) {
				setTimeout("startFlashText('" + e + "', 0, 1)", flashTextIntervalSpeed);
			}
			else {
				startFlashText(e, 0, 1);	
			}
		}
	}
}
function startFlashText(e, i, dir) {
	//for(var i = 0; i < shadeIndex1.length; i ++) {
		if(i < shadeIndex1.length && dir == 1) {
			//setTimeout("setFlashTextFadeColor('" + e + "', " + i + ")", flashTextFadeSpeed);
			//flashTextFadeSpeed += flashTextFadeSpeed;
			setFlashTextFadeColor(e, i);
			setTimeout("startFlashText('" + e + "', " + eval(i + 1) + ", 1)", flashTextFadeSpeed);
		}
		else if(i >= 0 && i < shadeIndex1.length) {
			setFlashTextFadeColor(e, i);
			setTimeout("startFlashText('" + e + "', " + eval(i - 1) + ", 0)", flashTextFadeSpeed);
			//setTimeout("endFlashText('" + e + "')", flashTextFadeSpeed);
			//flashTextFadeSpeed = flashTextFadeSpeedOriginal;
		}
		else {
			setTimeout("startFlashText('" + e + "', " + eval(i - 1) + ", 0)", flashTextFadeSpeed);
		}
	//}
}
function endFlashText(e) {
	for(var i = shadeIndex1.length; i >= 0 ; i --) {
		if(i > 0) {
			setTimeout("setFlashTextFadeColor('" + e + "', " + i + ")", flashTextFadeSpeed);
			flashTextFadeSpeed += flashTextFadeSpeed;
		}
		else {
			flashTextFadeSpeed = flashTextFadeSpeedOriginal;
		}
	}
}
function setFlashTextFadeColor(e, i) {
	//try {
		document.getElementById(e).style.color = '#' + shadeIndex1[i];
	//}
	//catch(err) {
		
	//}
}
//setTimeout('flashText("resultsRangeLimitText", 2)', 1000);

function consolidateInvoices() {
	var selectedInvoices = '';
	var oCheckBoxes = document.getElementsByTagName('input');
	for(i = 0; i < oCheckBoxes.length; i ++) {
		if(oCheckBoxes[i].getAttribute('type') == 'checkbox') {
			if(oCheckBoxes[i].checked && oCheckBoxes[i].id.indexOf('SelectAll') == -1) {
				if(selectedInvoices == '') {
					selectedInvoices = oCheckBoxes[i].id.replace('cb','');
				}
				else {
					selectedInvoices += ',' + oCheckBoxes[i].id.replace('cb','');
				}
			}
		}
	}
	if(selectedInvoices == '') {
		alert('You must select one or more invoices.');
	}
	else if(document.getElementById('consolidatedInvoiceID')) {
		location.href = '/app/default.asp?W=AddToServicExpressInvoice&P=' + document.getElementById('consolidatedInvoiceID').value + '&P=' + selectedInvoices + '&X=1';
	}
	else {
		location.href = '/app/default.asp?W=ServicExpressInvoices&P=0&P=' + selectedInvoices;	
	}
}

function addToServicExpressInvoice(consolidatedInvoiceID) {
	if(consolidatedInvoiceID == '0') {
		// submit the form to create the invoice first.  That will cause a redirect so that more
		// invoices can be added
		document.getElementById('consolidatedInvoiceForm').action += '&AddMore=1'
		document.getElementById('consolidatedInvoiceForm').submit();
	}
	else {
		location.href = '/app/default.asp?W=ShowInvoices&Consolidate=1&CID=' + consolidatedInvoiceID;	
	}
}

function deleteServicExpressInvoice(consolidatedInvoiceID) {
	if(confirm('Are you sure you want to delete this ServicExpress invoice?')) {
		location.href = '/app/default.asp?W=DeleteServicExpressInvoice&P=' + consolidatedInvoiceID + '&X=1';	
	}
}

function sendServicExpressInvoice(evt, consolidatedInvoiceID, sendOrResend) {
	showSendServicExpressInvoiceToCustomerPopup(evt, consolidatedInvoiceID, sendOrResend);
}

function resendWorkOrder(workOrderID, resendRejectedWorkOrderYN) {
	// If resendRejectedWorkOrderYN is set to true, then the work order will be re-issued to the 
	// same contractor and the status will be reset to "New"
	if(resendRejectedWorkOrderYN) {
		if(confirm('Are you sure you wish to resend this work order to the contractor?\nThe contractor will be sent an email and they will need to re-accept the work order.')) {
			location.href = '/app/default.asp?W=ResendWorkOrder&P=' + workOrderID + '&ResendRejected=1&Z=1';	
		}
	}
	else {
		if(confirm('Are you sure you wish to resend this work order to the contractor?\nThe contractor will be sent an email reminder that this work order is pending.')) {
			location.href = '/app/default.asp?W=ResendWorkOrder&P=' + workOrderID + '&Z=1';	
		}
	}
}

function updateEquipmentValues(e, equipmentID) {
	var url = '/app/default.asp?W=AJAXGetEquipmentInfo&P=' + e + '&P=' + equipmentID + '&X=1';
	var groupName = 'group1';
	var returnVal;
	AjaxRequest.get(
		{
			'url':url
			,'timeout':3000
			,'onTimeout':function() {
				//clearTimeout(myTimeout);
				//updateEquipmentValues(e);
				return false;
			}
			,'onSuccess':function(req){ 
				//alert(req.responseText);
				returnVal = req.responseText;
				//alert(returnVal);
				doUpdateEquipmentValues(returnVal);
			}
			,'onError':function(){
				returnVal = "Error connecting to the web service.";
				alert(returnVal);
			}
			,'groupName':groupName
		}
	);
}
function doUpdateEquipmentValues(e) {
	if(e.indexOf('|') != -1) {
		var eValArray = e.split('|');
		for(var i = 0; i <= eValArray.length; i ++) {
			switch(i) {
				case 0: //equipment manufacturer
					document.getElementById('manufacturer').value = eValArray[i];
					break;
				case 1: //equipment owned by
					document.getElementById('owner').value = eValArray[i];
					break;
				case 2: //equipment date in service
					document.getElementById('dateinserv').value = eValArray[i];
					break;
				case 3: //equipment site id
					document.getElementById('SiteID').value = eValArray[i];
					break;
				case 4: //equipment site name
					document.getElementById('SiteName').value = eValArray[i];
					document.getElementById('SiteName').style.color = '#000000';
					break;
				case 5: //equipment parts warranty
					document.getElementById('equip_use1').value = eValArray[i];
					break;
				case 6: //equipment labor warranty
					document.getElementById('equip_use2').value = eValArray[i];
					break;
			}
		}
	}
}

function updateWorkflowDD(sourceId, target) {
	if(readCookie('WorkflowEnableAutoPopulate') == '3') {
		if(target == 'ReceiveEmailApproveInvoices') {
			for(var i = 1;i <= 5; i ++) {
				var y;
				var zLen;
				var s = document.getElementById(sourceId);
				var t = document.getElementById(target + i);
				var sLen = s.options.length;
				var tLen = t.options.length;			
				for(var x = 0; x < sLen; x ++) {
					if(x == 0) {
						y = x;	
					}
					if((s.options[x].selected) && (s.options[x].value == t.options[y].value)) {
						t.options[y].selected = true;
					}
					else if(s.options[x].value == t.options[y].value) {
						t.options[y].selected = false;
					}
					else {
						if(sLen > tLen && y != 1) {
							y -= 1; //Move to the next one since the target may have the contractor in the dropdown whereas the source does not
						}
						else if(y != 1) {
							y += 1;
						}
						if((s.options[x].selected) && (s.options[x].value == t.options[y].value)) {
							t.options[y].selected = true;
						}
						else {
							t.options[y].selected = false;
						}
					}
					y += 1;
				}
			}
		}
		else {
			var y;
			var zLen;
			var s = document.getElementById(sourceId);
			var t = document.getElementById(target);
			var sLen = s.options.length;
			var tLen = t.options.length;			
			for(var x = 0; x < sLen; x ++) {
				if(x == 0) {
					y = x;	
				}
				if((s.options[x].selected) && (s.options[x].value == t.options[y].value)) {
					t.options[y].selected = true;
				}
				else if(s.options[x].value == t.options[y].value) {
					t.options[y].selected = false;
				}
				else {
					if(sLen > tLen && y != 1) {
						y -= 1; //Move to the next one since the target may have the contractor in the dropdown whereas the source does not
					}
					else if(y != 1) {
						y += 1;
					}
					if((s.options[x].selected) && (s.options[x].value == t.options[y].value)) {
						t.options[y].selected = true;
					}
					else {
						t.options[y].selected = false;
					}
				}
				y += 1;
			}
		}
	}
}

function updateWorkflowEnableAutoPopulate(e) {
	if(e) {
		createCookie('WorkflowEnableAutoPopulate', '1', 3650);	
	}
	else {
		createCookie('WorkflowEnableAutoPopulate', '0', 3650);	
	}
}


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function setFormReturnLocation() {
	if(document.getElementById('FormReturnLocation')) {
		document.getElementById('FormReturnLocation').value = location.href;
	}
}

var selectedCRHeader = '';
var cancelCRHeader = false;
function editColumnHeaderName(e, i, reportID) {
	var headerVal;
	if(document.getElementById(e.id + 'txt')) {
		headerVal = document.getElementById(e.id + 'Hidden').value;
	}
	else {
		headerVal = document.getElementById(e.id).innerHTML;
	}
	if(selectedCRHeader != e.id && !cancelCRHeader) {
		selectedCRHeader = e.id;
		if(document.getElementById(selectedCRHeader) && document.getElementById(selectedCRHeader + 'txt')) {
			document.getElementById(selectedCRHeader).innerHTML = document.getElementById(selectedCRHeader + 'txt').value;
		}
		document.getElementById(e.id).innerHTML = '<input type="text" id="' + e.id + 'txt" name="' + e.id + 'txt" class="text" style="width:100px;font-weight:bold;vertical-align:middle;" maxlength="100" value="' + headerVal + '" />' + 
			'&nbsp;<img src="/app/images/iconSave.png" width="16" height="16" alt="Save" style="cursor:pointer;vertical-align:middle;" onclick="saveCustomReportHeaderVal(document.getElementById(\'columnHeader' + i + '\'), ' + i + ', document.getElementById(\'' + e.id + 'txt\').value, \'' + reportID + '\');" />&nbsp;' + 
			'<img src="/app/images/iconDelete.png" width="16" height="16" alt="Cancel" style="cursor:pointer;vertical-align:middle;" onclick="cancelCustomReportHeaderVal(\'' + e.id + '\');" />';
	}
}
function cancelCustomReportHeaderVal(e) {
	cancelCRHeader = true;
	document.getElementById(e).innerHTML = document.getElementById(e + 'Hidden').value;
	selectedCRHeader = '';
	setTimeout('cancelCRHeader = false', 100);
}
function saveCustomReportHeaderVal(e, i, val, reportID) {
	var url = '/app/default.asp?W=SaveCustomReportHeaderValue&P=' + reportID + '&P=' + i + '&P=' + val + '&X=1';
	var groupName = 'group1';
	var resultTarget = e.id;
	AjaxRequest.get(
		{
			'url':url
			,'timeout':5000
			,'onTimeout':function() {
				//GetAJAXResult(e, url, groupName);
				return false;
			}
			,'onSuccess':function(req){ 
				if(document.getElementById(resultTarget)) {
					document.getElementById(resultTarget).innerHTML = req.responseText; 	
					enableAllSubmitButtons();
					//document.getElementById(e.id).innerHTML	= req.responseText;
					document.getElementById(e.id + 'Hidden').value = req.responseText;
					selectedCRHeader = '';
				}
			}
			,'onError':function(req){
				if(isInput) {
					alert("Error connecting to the web service.");
				}
				else {
					document.getElementById(resultTarget).innerHTML = "Error connecting to the web service.";
				}
				enableAllSubmitButtons();
			}
			,'groupName':groupName
		}
	);
}

function goToInvoicePrintView() {
	document.getElementById('goToPrintView').value = '1';
	if(checkForm('SendInvoiceForm')) {
		document.getElementById('SendInvoiceForm').submit();
	}
}

function callCenterQuestionChecked(e) {
	// e = the id of the checkbox
	var url = '/app/default.asp?W=CheckCallCenterQuestion&P=' + e.replace('cb', '') + '&X=1';
	if(e.checked) {
		
	}
	else {
		
	}
}

function showCallCenterQuestions() {
	// Now show the call center iframe if this is a call center application
	if(document.getElementById('callCenterIframe')) {
		//var de = document.getElementById;
		var srid = 0;
		var cid = document.getElementById('CompanyID').value;
		var sid = document.getElementById('SiteID').value;
		var scid;
		if(document.getElementById('MBoxServiceID_FK')) {
			scid = document.getElementById('MBoxServiceID_FK').value;
		}
		else if(document.getElementById('ServiceCategoryID_FK')) {
			scid = document.getElementById('ServiceCategoryID_FK').value;
		}
		else if(document.getElementById('ServiceCategoryID')) {
			scid = document.getElementById('ServiceCategoryID').value;
		}
		else if(document.getElementById('ServiceID')) {
			scid = document.getElementById('ServiceID').value;
		}
		var eid = 0;
		document.getElementById('callCenterIframe').src = '/app/default.asp?W=ViewCallCenterQuestionsPopup&P=' + srid + '&P=' + cid + '&P=' + sid + '&P=' + scid + '&P=' + eid + '&Z=1';
	}
	if(document.getElementById('callCenterDiv')) {
		//var de = document.getElementById;
		var srid = 0;
		var cid = document.getElementById('CompanyID').value;
		var sid = document.getElementById('SiteID').value;
		var scid;
		if(document.getElementById('MBoxServiceID_FK')) {
			scid = document.getElementById('MBoxServiceID_FK').value;
		}
		else if(document.getElementById('ServiceCategoryID_FK')) {
			scid = document.getElementById('ServiceCategoryID_FK').value;
		}
		else if(document.getElementById('ServiceCategoryID')) {
			scid = document.getElementById('ServiceCategoryID').value;
		}
		else if(document.getElementById('ServiceID')) {
			scid = document.getElementById('ServiceID').value;
		}
		var eid = 0;
		GetAJAXResult('callCenterDiv', '/app/default.asp?W=ViewCallCenterQuestionsPopup&P=' + srid + '&P=' + cid + '&P=' + sid + '&P=' + scid + '&P=' + eid + '&X=1', 'group3');
		document.getElementById('callCenterDiv').style.height = '300px';
	}
}

function updateCustomReportScheduleDays(e) {
	switch(e) {
		case 'daily':
			document.getElementById('ReportDayOfWeekToRunTitleDiv').style.display = 'none';
			document.getElementById('ReportDayOfMonthToRunTitleDiv').style.display = 'none';
			document.getElementById('ReportDayOfWeekToRunDiv').style.display = 'none';
			document.getElementById('ReportDayOfMonthToRunDiv').style.display = 'none';
			if(document.getElementById('daysOfWeekDiv')) {
				document.getElementById('daysOfWeekDiv').style.display = 'block';
			}
			break;
		case 'weekly':
			document.getElementById('ReportDayOfWeekToRunTitleDiv').style.display = 'block';
			document.getElementById('ReportDayOfMonthToRunTitleDiv').style.display = 'none';
			document.getElementById('ReportDayOfWeekToRunDiv').style.display = 'block';
			document.getElementById('ReportDayOfMonthToRunDiv').style.display = 'none';
			if(document.getElementById('daysOfWeekDiv')) {
				document.getElementById('daysOfWeekDiv').style.display = 'none';
			}
			break;
		case 'monthly':
			document.getElementById('ReportDayOfWeekToRunTitleDiv').style.display = 'none';
			document.getElementById('ReportDayOfMonthToRunTitleDiv').style.display = 'block';
			document.getElementById('ReportDayOfWeekToRunDiv').style.display = 'none';
			document.getElementById('ReportDayOfMonthToRunDiv').style.display = 'block';
			if(document.getElementById('daysOfWeekDiv')) {
				document.getElementById('daysOfWeekDiv').style.display = 'none';
			}
			break;
		case 'other':
			if(document.getElementById('daysOfWeekDiv')) {
				document.getElementById('daysOfWeekDiv').style.display = 'block';
			}
			break;
	}
}
	
function updateCustomReportActiveYN(e) {
	switch(e) {
		case '1':
			document.getElementById('ScheduleType').disabled = 0;
			document.getElementById('ReportDateRangeID_FK').disabled = 0;
			document.getElementById('ReportEmailResultsTo').disabled = 0;
			document.getElementById('ReportTimeOfDayToRun').disabled = 0;
			document.getElementById('ReportDayOfWeekToRun').disabled = 0;
			document.getElementById('ReportDayOfMonthToRun').disabled = 0;
			document.getElementById('cbReportRunSunYN').disabled = 0;
			document.getElementById('cbReportRunMonYN').disabled = 0;
			document.getElementById('cbReportRunTueYN').disabled = 0;
			document.getElementById('cbReportRunWedYN').disabled = 0;
			document.getElementById('cbReportRunThuYN').disabled = 0;
			document.getElementById('cbReportRunFriYN').disabled = 0;
			document.getElementById('cbReportRunSatYN').disabled = 0;
			break;
		case '0':
			document.getElementById('ScheduleType').disabled = 1;
			document.getElementById('ReportDateRangeID_FK').disabled = 1;
			document.getElementById('ReportEmailResultsTo').disabled = 1;
			document.getElementById('ReportTimeOfDayToRun').disabled = 1;
			document.getElementById('ReportDayOfWeekToRun').disabled = 1;
			document.getElementById('ReportDayOfMonthToRun').disabled = 1;
			document.getElementById('cbReportRunSunYN').disabled = 1;
			document.getElementById('cbReportRunMonYN').disabled = 1;
			document.getElementById('cbReportRunTueYN').disabled = 1;
			document.getElementById('cbReportRunWedYN').disabled = 1;
			document.getElementById('cbReportRunThuYN').disabled = 1;
			document.getElementById('cbReportRunFriYN').disabled = 1;
			document.getElementById('cbReportRunSatYN').disabled = 1;
			break;
	}
}

function cancelBubble(windowEvent) {
    var objEvent;
    try {
        objEvent = windowEvent;
        objEvent.cancelBubble = true;
    } 
	catch (ex) {
    }
}

function saveDashboardCBValue(e, dbName) {
	switch(e.id) {
		case 'cbDashboardStatistics' + dbName:
			if(e.checked) {
				createCookie('DashboardStats' + dbName, 'on', 3600);
			}
			else {
				createCookie('DashboardStats' + dbName, '', 3600);
			}
			break;
		case 'cbDashboardServiceRequests' + dbName:
			if(e.checked) {
				createCookie('DashboardSR' + dbName, 'on', 3600);
			}
			else {
				createCookie('DashboardSR' + dbName, '', 3600);
			}
			break;
		case 'cbDashboardWorkOrders' + dbName:
			if(e.checked) {
				createCookie('DashboardWO' + dbName, 'on', 3600);
			}
			else {
				createCookie('DashboardWO' + dbName, '', 3600);
			}
			break;
		case 'cbDashboardInvoices' + dbName:
			if(e.checked) {
				createCookie('DashboardInv' + dbName, 'on', 3600);
			}
			else {
				createCookie('DashboardInv' + dbName, '', 3600);
			}
			break;
		case 'cbDashboardRFPs' + dbName:
			if(e.checked) {
				createCookie('DashboardRFPs' + dbName, 'on', 3600);
			}
			else {
				createCookie('DashboardRFPs' + dbName, '', 3600);
			}
			break;
	}
}

function selectAllSites() {
	if(document.getElementById('SelSites')) {
		document.getElementById('SelSites').value = '';	
	}
	if(document.getElementById('siteChk')) {
		document.getElementById('siteChk').value = '';	
	}
	if(document.getElementById('siteUnChecked')) {
		document.getElementById('siteUnChecked').value = '';	
	}
}

function deSelectAllSites() {
	if(document.getElementById('SelSites')) {
		document.getElementById('SelSites').value = '';	
	}
	if(document.getElementById('siteChk')) {
		document.getElementById('siteChk').value = '';	
	}
	if(document.getElementById('siteUnChecked')) {
		document.getElementById('siteUnChecked').value = '';	
	}
	var thisForm = document.getElementById('customReportsForm'); //eval("document."+formName)
	for(var i = 0;i < thisForm.elements.length; i++) {
		var elementtype = thisForm.elements[i].type;
		var elementname = thisForm.elements[i].name;
		var elementid = thisForm.elements[i].id;
		if(elementtype == 'checkbox' && elementid.indexOf('cbSite') != -1) {
			document.getElementById(elementid).checked = 0;
		}
	}
	document.getElementById('cbDeSelectAllAvailableSites').checked = 0;
	document.getElementById('cbAllAvailableSites').checked = 0;
}
function selectSite(obj) {
	var uncheckedVal = document.getElementById('siteUnChecked').value;
	if(document.getElementById('cbAllAvailableSites')) {
		document.getElementById('cbAllAvailableSites').checked = false;
	}
	if(! obj.checked) {
		if(uncheckedVal == '') {
			document.getElementById('siteUnChecked').value = obj.value;	
		}
		else {
			document.getElementById('siteUnChecked').value = uncheckedVal + ',' + obj.value;	
		}
		if(document.getElementById('SelSites')) {
			var curVal = document.getElementById('SelSites').value;
			document.getElementById('SelSites').value = curVal.replace(',' + obj.value, '').replace(obj.value, '');	
		}
	}
	else {
		// remove the site from the list of unchecked sites	
		var newVal;
		newVal = uncheckedVal.replace(',' + obj.value, '');
		newVal = newVal.replace(obj.value + ',', '');
		if(newVal.indexOf(',') == -1) {
			newVal = newVal.replace(obj.value, '');	
		}
		document.getElementById('siteUnChecked').value = newVal;
		if(document.getElementById('SelSites')) {
			var curVal = document.getElementById('SelSites').value;
			if(curVal == '')
				document.getElementById('SelSites').value = obj.value;
			else
				document.getElementById('SelSites').value = curVal + ',' + obj.value;
		}
	}
	//alert(document.getElementById('siteUnChecked').value);
}

function retireSite(siteID) {
	if(confirm('Are you sure you want to retire this site?\nDoing so means that you may no longer select this site for new service requests and work orders.')) {
		location.href = '/app/default.asp?W=RetireSite&P=' + siteID + '&X=1';
	}
	else {
		return false;	
	}
}
function reOpenSite(siteID) {
	if(confirm('Are you sure you want to re-open this site?\nDoing so means that you will be able to select this site for new service requests and work orders from now on.')) {
		location.href = '/app/default.asp?W=ReOpenSite&P=' + siteID + '&X=1';
	}
	else {
		return false;	
	}
}

function enableOtherEmails() {
	if(document.getElementById('sendMailCheck').checked == 1) {
		document.getElementById('otherEmails').disabled = false;
	}
	else {
		document.getElementById('otherEmails').disabled = true;
	}
}

function addToOtherEmails(e) {
	if(document.getElementById('otherEmails').value.indexOf(e) == -1) {
		document.getElementById('sendMailCheck').checked = 1;
		enableOtherEmails();
		var otherEmails = document.getElementById('otherEmails');
		if(otherEmails.value != '') {
			document.getElementById('otherEmails').value += '; ' + e;
		}
		else {
			document.getElementById('otherEmails').value = e;
		}
	}
}

function updateCallCenterUserStatus(day, e) {
	alert('Coming soon');
}

function deleteCallCenterUser(day, e) {
	if(confirm('Are you sure you want to remove this user from the call center rotation for this day?')) {
		location.href = '/app/default.asp?W=RemoveUserFromCallCenterDay&P=' + day + '&P=' + e + '&X=1';
	}
}

function updateCallCenterRotationDispatch(e) {
	// IIM doesn't want any calls with the priority of "Lease Compliance", "Pest Control", or "Store Facility Maintenance" to
	// be auto-rotated through the schedule.  Instead, these priorities should be routed to someone in particular in Dollar General.
	var workOrderType = '';
	if(document.getElementById('WorkOrderTypeID_FK')) {
		workOrderType = document.getElementById('WorkOrderTypeID_FK').value;
	}
	// New as of 3/11/2010 - IIM needed to add the Work Order Responsibility tab and they added Lease Compliance, Store Facility Maintenance, Michael Roland, Emergency Lease Compliance, and Landlord to the list
	/*
	Responsibilities:
	Lease Compliance = 1
	Store Facility Maintenance = 2
	Michael Roland = 3
	Emergency Lease Compliance = 4
	Landlord = 5
	*/
	var workOrderResponsibility = '';
	if(document.getElementById('WorkOrderResponsibilityID_FK')) {
		workOrderResponsibility = document.getElementById('WorkOrderResponsibilityID_FK').value;
	}
	if(document.getElementById('CallCenterDispatcher') && (location.href.indexOf('dev.workoasis.com') != -1 || location.href.indexOf('innovationsmgmt.workoasis.com') != -1)) {
		if(e == '6' || e == '7' || e == '8' || workOrderType == '2' || workOrderType == '3' || workOrderType == '4') {
			document.getElementById('CallCenterDispatcher').name = 'CallCenterDispatcherDONTUSE';
			document.getElementById('CallCenterDispatcher').style.display = 'none';
			document.getElementById('lblCallCenterDispatcher').style.display = 'none';
		}
		else {
			document.getElementById('CallCenterDispatcher').name = 'CallCenterDispatcher';
			document.getElementById('CallCenterDispatcher').style.display = 'block';
			document.getElementById('lblCallCenterDispatcher').style.display = 'inline';
		}
	}
}

function validateProjectDate(taskOrProject) {
	var errMsg = '';
	var taskEstimatedStartDate, taskActualStartDate, taskEstimatedEndDate, taskActualEndDate, taskDueDate;
	var projectEstimatedStartDate, projectActualStartDate, projectEstimatedEndDate, projectActualEndDate;
	if(taskOrProject == 'task') {
		document.getElementById('TaskEstimatedStartDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('TaskActualStartDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('TaskEstimatedEndDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('TaskActualEndDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('TaskDueDate').style.backgroundColor = '#FFFFFF';
		taskEstimatedStartDate = getDateFromValue(document.getElementById('TaskEstimatedStartDate').value);
		taskActualStartDate = getDateFromValue(document.getElementById('TaskActualStartDate').value);
		taskEstimatedEndDate = getDateFromValue(document.getElementById('TaskEstimatedEndDate').value);
		taskActualEndDate = getDateFromValue(document.getElementById('TaskActualEndDate').value);
		taskDueDate = getDateFromValue(document.getElementById('TaskDueDate').value);
		if(taskEstimatedStartDate != null && taskEstimatedEndDate != null) {
			if(taskEstimatedStartDate > taskEstimatedEndDate) {
				errMsg += '--> The Estimated Start Date cannot occur after the Estimated End Date.\n';
				document.getElementById('TaskEstimatedStartDate').style.backgroundColor = '#FFCCCC';
				document.getElementById('TaskEstimatedEndDate').style.backgroundColor = '#FFCCCC';
			}
		}
		if(taskEstimatedStartDate != null && taskDueDate != null) {
			if(taskEstimatedStartDate > taskDueDate) {
				errMsg += '--> The Estimated Start Date cannot occur after the Due Date.\n';
				document.getElementById('TaskEstimatedStartDate').style.backgroundColor = '#FFCCCC';
				document.getElementById('TaskDueDate').style.backgroundColor = '#FFCCCC';
			}
		}
		if(taskActualStartDate != null && taskActualEndDate != null) {
			if(taskActualStartDate > taskActualEndDate) {
				errMsg += '--> The Actual Start Date cannot occur after the Actual End Date.\n';
				document.getElementById('TaskActualStartDate').style.backgroundColor = '#FFCCCC';
				document.getElementById('TaskActualEndDate').style.backgroundColor = '#FFCCCC';		
			}
		}
	}
	else {
		projectEstimatedStartDate = getDateFromValue(document.getElementById('ProjectEstimatedStartDate').value);
		projectActualStartDate = getDateFromValue(document.getElementById('ProjectActualStartDate').value);
		projectEstimatedEndDate = getDateFromValue(document.getElementById('ProjectEstimatedEndDate').value);
		projectActualEndDate = getDateFromValue(document.getElementById('ProjectActualEndDate').value);
		document.getElementById('ProjectEstimatedStartDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('ProjectActualStartDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('ProjectEstimatedEndDate').style.backgroundColor = '#FFFFFF';
		document.getElementById('ProjectActualEndDate').style.backgroundColor = '#FFFFFF';
		if(projectEstimatedStartDate != null && projectEstimatedEndDate != null) {
			if(projectEstimatedStartDate > projectEstimatedEndDate) {
				errMsg += '--> The Estimated Start Date cannot occur after the Estimated End Date.\n';
				document.getElementById('ProjectEstimatedStartDate').style.backgroundColor = '#FFCCCC';
				document.getElementById('ProjectEstimatedEndDate').style.backgroundColor = '#FFCCCC';
			}
		}
		if(projectActualStartDate != null && projectActualEndDate != null) {
			if(projectActualStartDate > projectActualEndDate) {
				errMsg += '--> The Actual Start Date cannot occur after the Actual End Date.\n';
				document.getElementById('ProjectActualStartDate').style.backgroundColor = '#FFCCCC';
				document.getElementById('ProjectActualEndDate').style.backgroundColor = '#FFCCCC';		
			}
		}
	}
	if(errMsg != '') {
		alert(errMsg);
		return false;
	}
	else {
		return true;
	}
}
function getDateFromValue(e) {
	try {
		return Date.parse(e);	
	}
	catch(err) {
		return null;
	}
}

function setReassignContractorAction(action) {
	if(checkForm('reassignToSubContractorForm')) {
		document.getElementById('formAction').value = 'remove';
		document.getElementById('reassignToSubContractorForm').submit();
	}
}

function setProjectApprovalCode(e) {
	if(document.getElementById('ProjectApprovalCode')) {
		document.getElementById('ProjectApprovalCode').value = e;	
	}
}

function verifyCustomReportDates() {
	var startDate = document.getElementById('StartDate').value;
	var endDate = document.getElementById('EndDate').value;
	var startDateIsDate = false;
	var endDateIsDate = false;
	var startMonth;
	var startDay;
	var startYear;
	var endMonth;
	var endDay;
	var endYear;
	var dateRange;
	var warningMsg = '';
	var errMsg = '';
	var diff = new Date();
	if(startDate != '') {
		try {
			startDate = new Date(startDate);
			startDateIsDate = true;
			startMonth = startDate.getMonth();
			startDay = startDate.getDate();
			startYear = startDate.getFullYear();
		}
		catch(ex) {
			startDateIsDate = false;
		}
	}
	if(endDate != '') {
		try {
			endDate = new Date(endDate);
			endDateIsDate = true;
			endMonth = endDate.getMonth();
			endDay = endDate.getDate();
			endYear = endDate.getFullYear();
		}
		catch(ex) {
			endDateIsDate = false;
		}
	}
	else {
		endDate = new Date();
		endDateIsDate = true;
		endMonth = endDate.getMonth();
		endDay = endDate.getDate();
		endYear = endDate.getFullYear();
	}
	if(startDate == '') {
		warningMsg = 'WARNING: You have not specified a Start Date.\n\nDepending on the amount of data in the database, this could result in a very large set of records being returned which could have a negative impact on system performance if run during business hours.\n\nDo you wish to continue?';	
	}
	if(startDateIsDate && endDateIsDate) {
		var monthOffset = 0;
		var yearOffset = 0;
		//alert('startMonth = ' + startMonth + '\nendMonth = ' + endMonth);
		//var monthDifference = Math.abs(eval(startMonth) - eval(endMonth));
		if(endYear < startYear) {
			errMsg = 'ERROR: You have selected an End Date that occurs before the Start Date.';	
		}
		else {
			/*if(endYear > startYear) {
				yearOffset = eval(endYear - startYear);
			}
			if(yearOffset != 0) {
				monthOffset = 12 * yearOffset;
			}
			monthDifference = monthDifference + monthOffset;*/			
			diff.setTime(Math.abs(startDate.getTime() - endDate.getTime()));	
			var timediff = diff.getTime();			
			var weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
			monthDifference = Math.round(weeks / 4.35);
			if(monthDifference > 6) {
				warningMsg = 'WARNING: You are about to pull approximately ' + monthDifference + ' months worth of data for this report based on the Start and End Dates you have selected.\n\nDepending on the amount of data in the database, this could result in a very large set of records being returned which could have a negative impact on system performance if run during business hours.\n\nDo you wish to continue?'; 
			}
		}
	}
	if(errMsg != '') {
		alert(errMsg);
		return false;
	}
	else if(warningMsg != '') {
		if(confirm(warningMsg)) {
			return true;
		}
		else {
			return false;	
		}
	}
	else {
		return true;
	}
}

function refreshCaptchaImage(valImageId) {
	var objImage = document.images[valImageId];
	if (objImage == undefined) {
		return;
	}
	var now = new Date();
	objImage.src = objImage.src.split('?')[0] + '?x=' + now.toUTCString();
}

function updateInvoiceDetailLineItem(invoiceID, lineItemID) {
	var detailLineType = escape(document.getElementById('InvoiceDetailLineType' + lineItemID).value);
	var detailDesc = escape(document.getElementById('InvoiceDetailDescription' + lineItemID).value);
	var detailQuantity = document.getElementById('InvoiceDetailQuantity' + lineItemID).value;
	var detailCost = document.getElementById('InvoiceDetailCost' + lineItemID).value;
	var detailTax = document.getElementById('InvoiceDetailTax' + lineItemID).value;
	var url = '/app/default.asp?W=UpdateInvDetail&InvoiceDetailID=' + lineItemID + '&InvoiceID=' + invoiceID + '&InvoiceDetailDescription=' + detailDesc + '&InvoiceDetailQuantity=' + detailQuantity + '&InvoiceDetailCost=' + detailCost + '&InvoiceDetailTax=' + detailTax + '&InvoiceDetailLineType=' + detailLineType + '&X=1';
	if(document.getElementById('detailCounty')) {
		var county, state, city, zip;
		county = document.getElementById('detailCounty').value;
		state = document.getElementById('detailState').value;
		city = document.getElementById('detailCity').value;
		zip = document.getElementById('detailZip').value;
		url += '&county='+escape(county)+
			'&state='+state+
			'&city='+escape(city)+
			'&zip='+zip;
	}
	if(document.getElementById('addInvoiceDetailForm')) {
		document.getElementById('hiddenInvoiceID').value = invoiceID;
		document.getElementById('hiddenInvoiceDetailID').value = lineItemID;
		document.getElementById('hiddenInvoiceDetailDescription').value = document.getElementById('InvoiceDetailDescription' + lineItemID).value;
		document.getElementById('hiddenInvoiceDetailQuantity').value = detailQuantity;
		document.getElementById('hiddenInvoiceDetailCost').value = detailCost;
		document.getElementById('hiddenInvoiceDetailTax').value = detailTax;
		document.getElementById('hiddenInvoiceDetailLineType').value = document.getElementById('InvoiceDetailLineType' + lineItemID).value;
		document.getElementById('hiddenDetailCounty').value = county;
		document.getElementById('hiddenDetailCity').value = city;
		document.getElementById('hiddenDetailState').value = state;
		document.getElementById('hiddenDetailZip').value = zip;
		document.getElementById('addInvoiceDetailForm').action = '/app/default.asp?W=UpdateInvDetailAJAX&X=1';
			
		var theform = document.getElementById('addInvoiceDetailForm');
		var resultTarget = '';
		AjaxRequest.submit(theform, 
			{
				'onSuccess':function(req){ 
					location.reload();
				}
				,'onError':function() {
					alert('Error connecting to the web service.');
				}
			}
		);
		//GetAJAXPostResult(document.getElementById('addInvoiceDetailForm'), '');
		//setTimeout("location.reload()", 300);
	}
	else {
		location.href = url;
	}
}
function addTheInvoiceDetail(invoiceID) {
	if(checkForm('EditInvoiceForm')){
		var url, invId, desc, qty, cost, tax, lineType, woid;
		if(document.getElementById('WorkOrderID_FK')) {
			woid = document.getElementById('WorkOrderID_FK').value;	
		}
		else {
			woid = '';	
		}
		desc = escape(document.getElementById('InvoiceDetailDescription').value);
		qty = document.getElementById('InvoiceDetailQuantity').value;
		cost = document.getElementById('InvoiceDetailCost').value;
		tax = document.getElementById('InvoiceDetailTax').value;
		lineType = escape(document.getElementById('InvoiceDetailLineType').value);
		url = '/app/default.asp?W=AddInvoiceDetail&InvoiceID='+invoiceID+ 
			'&InvoiceDetailDescription='+desc+
			'&InvoiceDetailQuantity='+qty+
			'&InvoiceDetailCost='+cost+
			'&InvoiceDetailTax='+tax+
			'&InvoiceDetailLineType='+lineType+
			'&WorkOrderID_FK='+woid+
			'&X=1';
		if(document.getElementById('detailCounty')) {
			var county, state, city, zip;
			county = document.getElementById('detailCounty').value;
			state = document.getElementById('detailState').value;
			city = document.getElementById('detailCity').value;
			zip = document.getElementById('detailZip').value;
			url += '&county='+escape(county)+
				'&state='+state+
				'&city='+escape(city)+
				'&zip='+zip;
		}
		if(document.getElementById('addInvoiceDetailForm')) {
			document.getElementById('hiddenInvoiceID').value = invoiceID;
			document.getElementById('hiddenInvoiceDetailDescription').value = document.getElementById('InvoiceDetailDescription').value;
			document.getElementById('hiddenInvoiceDetailQuantity').value = qty;
			document.getElementById('hiddenInvoiceDetailCost').value = cost;
			document.getElementById('hiddenInvoiceDetailTax').value = tax;
			document.getElementById('hiddenInvoiceDetailLineType').value = document.getElementById('InvoiceDetailLineType').value;
			document.getElementById('hiddenWorkOrderID_FK').value = woid;
			document.getElementById('hiddenDetailCounty').value = county;
			document.getElementById('hiddenDetailCity').value = city;
			document.getElementById('hiddenDetailState').value = state;
			document.getElementById('hiddenDetailZip').value = zip;
			
			var theform = document.getElementById('addInvoiceDetailForm');
			var resultTarget = '';
			AjaxRequest.submit(theform, 
				{
					'onSuccess':function(req){ 
						location.reload();
					}
					,'onError':function() {
						alert('Error connecting to the web service.');
					}
				}
			);

			//GetAJAXPostResult(document.getElementById('addInvoiceDetailForm'), '');
			//setTimeout("location.reload()", 300);
		}
		else {
			location.href = url;
		}
	}
}
function saveTheInvoiceDetail(targetName, formID) {
	GetAJAXPostResult(document.getElementById(formID), targetName);
	hideMe('showEditInvoiceContractorNumberPopup');
	return false;
}

function showWorkOrderHeaderFooterTab(type) {
	if(type == 'photo') {
		document.getElementById('woPhotoTab').style.display = 'block';	
		document.getElementById('woTextTab').style.display = 'none';	
	}
	else {
		document.getElementById('woPhotoTab').style.display = 'none';	
		document.getElementById('woTextTab').style.display = 'block';
	}
}

function validateAcceptInvoiceForm() {
	if(document.getElementById('InvoiceType1')) {
		if(! document.getElementById('InvoiceType1').checked && ! document.getElementById('InvoiceType2').checked) {
			alert('You must select an Invoice Type!');
			return false;
		}
		else {
			return true;	
		}
	}
	else {
		return true;	
	}
}

function saveHNBInvoiceDetailChanges(invoiceDetailID) {
	var SiteCompanyCode = document.getElementById('SiteCompanyCode' + invoiceDetailID).value;
	var InvoiceCenter = document.getElementById('InvoiceDetailCenter' + invoiceDetailID).value;
	var CapitalOrExpense = document.getElementById('InvoiceDetailCapitalOrExpense' + invoiceDetailID).value;
	var InvoiceGLCode = document.getElementById('InvoiceDetailGLCode' + invoiceDetailID).value;
	var ProjectApprovalCode = document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).value;
	var urlValues = '&SCC=' + replaceCharsForURL(SiteCompanyCode) + 
		'&WIC=' + replaceCharsForURL(InvoiceCenter) + 
		'&WIT=' + replaceCharsForURL(CapitalOrExpense) + 
		'&WIGL=' + replaceCharsForURL(InvoiceGLCode) + 
		'&PAC=' + replaceCharsForURL(ProjectApprovalCode);
	if(CapitalOrExpense == '') {
		document.getElementById('InvoiceDetailCapitalOrExpense' + invoiceDetailID).focus();
		alert('You must select a Type (Expense or Capital)');
		return false;
	}
	else if(CapitalOrExpense == 'Capital' && ProjectApprovalCode.trim() == '') {
		alert('You must enter a K-Form #');
		return false;
	}
	else {
		var url = '/app/default.asp?W=SaveHNBInvoiceDetailChanges&P=' + invoiceDetailID + urlValues + '&X=1';
		var groupName = 'group1';
		AjaxRequest.get(
			{
				'url':url
				,'timeout':5000
				,'onTimeout':function() {
					//GetAJAXResult(e, url, groupName);
					return false;
				}
				,'onSuccess':function(req){ 
					if(req.responseText == '1') {
						document.getElementById('HNBSaveChangesLink' + invoiceDetailID).innerHTML = 'Saved';
						document.getElementById('HNBSaveChangesLink' + invoiceDetailID).style.color = '#009900';
						setTimeout("document.getElementById('HNBSaveChangesLink" + invoiceDetailID + "').innerHTML = 'Save Changes'", 2000);
						setTimeout("document.getElementById('HNBSaveChangesLink" + invoiceDetailID + "').style.color = '#5274B9'", 2000);
					}
					else {
						alert('An error occured.');	
					}
				}
				,'onError':function(req){
					alert("Error connecting to the web service.");
				}
				,'groupName':groupName
			}
		);
	}
}

function updateSaveHNBChangesColor(invoiceDetailID) {
	document.getElementById('HNBSaveChangesLink' + invoiceDetailID).style.color = '#FF0000';	
}

function updateHNBProjectApprovalCode(invoiceDetailID, e) {
	if(e == 'Capital') {
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.backgroundColor = '#FFFFFF';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.color = '#000000';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.className = 'text req';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).disabled = 0;	
	}
	else {
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.backgroundColor = '#CCCCCC';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.color = '#FFFFFF';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).style.className = 'text';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).value = '';
		document.getElementById('InvoiceDetailProjectApprovalCode' + invoiceDetailID).disabled = 1;	
	}	
}

function hasUnsavedHNBChanges() {
	var arr = new Array();
	var returnVal = false;
	arr = document.getElementsByName('HNBSaveChangesLink');
   	   
	for(var i = 0; i < arr.length; i++)
	{
		var obj = document.getElementsByName('HNBSaveChangesLink').item(i);
		//alert(obj.style.color);
		if(obj.style.color == '#FF0000' || obj.style.color == 'rgb(255, 0, 0)') {
			returnVal = true;
		}
		//alert(obj.id + " =  " + obj.value);
	}	
	if(returnVal) {
		if(confirm('You have unsaved changes.\nAre you sure you wish to continue? Any unsaved changes will be lost.')) {
			return false;
		}
		else {
			return true;
		}
	}
	else {
		return false;	
	}
}

function replaceCharsForURL(str) {
	while (str.indexOf('&') != -1 || str.indexOf('=') != -1 || str.indexOf('?') != -1 || str.indexOf('#') != -1) {
		str = str.replace('&', '_AMP_');
		str = str.replace('=', '_EQUALS_');
		str = str.replace('?', '_QUES_');
		str = str.replace('#', '_POUND_');
	}
	return str;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

