// JavaScript Document
bHideDialog = false;
dialogTimer = 0;
dialogTimer2 = 0;
window.onerror=jsError;
 
function jsError(msg,url,l)
{
	txt="Error: " + msg + "<br/>"
	txt+="URL: " + url + "<br/>"
	txt+="Line: " + l + "<br/>"
	window.location = "/error.html?errorCode=js1&errorMsg="+txt
    return true; 
	
}

function detectBrowser() {
	var browser=navigator.appName
	var b_version=navigator.appVersion
	var version=parseFloat(b_version)

	if ((browser=="Netscape" && version>=5)||(browser=="Microsoft Internet Explorer" && version>=4)){
	 //Do nothing
	 	setResolutionCookie() 
	} else {
		window.location = "/browser.html"
	}
}

function setResolutionCookie() {
	if(typeof(screen)=="object"){
		sr = screen.width+"x"+screen.height;
		//ar = screen.availWidth + "x" +screen.availHeight;
		//cd = screen.colorDepth;
		SetCookie("SIGNscreenInfo", sr , .25)
	} 	
}

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function setClass(element, classID) { 
	element.setAttribute("class", classID); 
	element.setAttribute("className", classID); 
	return; 
}
function getObjClass(element) {
	if (element.getAttribute) {
		if(element.getAttribute("class")== null ){
			return element.getAttribute("className")
		}else{
			
			return element.getAttribute("class")
		}
	}
}

function showSaveDialog() {
	showDialog("/dialogs/saving.html?KeepThis=true&TB_iframe=true&height=300&width=400&modal=true")

}

function setDialogFlag() {
	clearInterval(dialogTimer)
	bHideDialog = true;	
}

function showDialog(dialogName) {
	bHideDialog = false;
	tb_show("", dialogName, false)
	//I want the dialog to be on the screen for at least 1 second.
	dialogTimer = setInterval(setDialogFlag,1000)

}

function hideDialog() {
	clearInterval(dialogTimer2)

	if (bHideDialog) {
		tb_remove(); 
		bHideDialog = false
	} else {
		dialogTimer2 = setInterval(hideDialog,100)
	}

}

function setListValue(listObj, value) {
	for (var i = 0; i< listObj.length; i++) {
		if (listObj.options[i].value == value) {
			listObj.selectedIndex = i;
			break;
		}
	}
}

function cleanData(val) {
	var cleanedVal = val + ""
	cleanedVal = cleanedVal.replace("&","")
	cleanedVal = cleanedVal.replace("?","")
	cleanedVal = cleanedVal.replace("+","")
	cleanedVal = cleanedVal.replace("=","")
	cleanedVal = cleanedVal.replace("\"","'")
	return cleanedVal
	
}

function addToURL(name, value) {
	return "&" + name + "=" + cleanData(value);
}

function resetTextBox(badBox, newBox) {
	if (newBox.value != "") {
		document.getElementById(badBox).value = "";
	}
}

function setCheckGroup(currentSelection, groupName) {
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID.substring(0,groupName.length) == groupName){
			if (currentID != currentSelection.id) {
				all[e].checked = false;
			}
		} 
	}
}

function validatePage() {
	var errorObj = false
	var validationID = "validationErrorHolder"
	var isValid = true
	
	clearValidationErrors()

	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var thisIsValid = true;
			var spanFrag = "This field is required";
			var showError = false
			var currentObj = document.getElementById(currentID)
			var currentClass = getObjClass(currentObj)
			//Check if an value is required
			if (currentClass && currentClass.indexOf("required") >= 0 && !checkForHidden(currentObj)){
				//This field is required
				if (currentClass.indexOf("required-dropdown") >= 0) {
					//Dropdown 	
					if (currentObj.selectedIndex <0 || currentObj.value=="") {
						thisIsValid = false;
					} 
				} else if (currentClass.indexOf("required-radio") >= 0) {
					//Radio Buttons
					var radios = document.getElementsByName(currentObj.name)
					thisIsValid = false;
					for (var i =0; i< radios.length; i++) {
						if (radios[i].checked) {thisIsValid = true;}
					}

				} else if (currentClass.indexOf("required-textGroup") >= 0) {
					//multiple textboxes that one has to be filled in
					currentClass = currentClass + " "
					var strTag = 'textGroup-'
					var textGroupName = currentClass.substring(currentClass.indexOf(strTag)+strTag.length, currentClass.length)
					textGroupName = textGroupName.substring(0, textGroupName.indexOf(' '))
					
					var txts = getTextGroup(textGroupName)
					thisIsValid = false;
					for (var i =0; i< txts.length; i++) {
						txtClass = getObjClass(txts[i])
						if (txts[i].value != "" && !thisIsValid) {
							if (txtClass && txtClass.indexOf("validate-integer") >= 0) {
								spanFrag = "&nbsp;&nbsp;This field must be an integer";
								if (isInteger(txts[i].value)) {
									thisIsValid = true;
								}
							} else {
								thisIsValid = true;
							}
						}
					}

				} else{					
					//Text box			
					if (currentObj.value == "") {
						thisIsValid = false;
					}
				}
				
				
				valFrag = ValidateField(currentObj)
				if (valFrag != "") {
					thisIsValid=false;
					spanFrag = valFrag;
				}
			} else {
				//Field is not required, but if it is filled in, then it should be validated.
				valFrag = ValidateField(currentObj)
				if (valFrag != "") {
					thisIsValid=false;
					spanFrag = valFrag;
				}
			}
			
			if (!thisIsValid) {
				if (currentClass.indexOf("showerror-false") == -1) {showError = true}
				errorObj = currentObj
				if (currentClass.indexOf("showerror") >= 0) {
					//show the error somewhere else besides after this control
					currentClass = currentClass + " "
					var strError = 'showerror-'
					var errorID = currentClass.substring(currentClass.indexOf(strError)+strError.length, currentClass.length)
					errorID = errorID.substring(0, errorID.indexOf(' '))

					errorObj = document.getElementById(errorID)
				} 
				if (!thisIsValid) {isValid = false}
				if (!thisIsValid && showError) {
					holder = document.createElement("span");
					holder.id = validationID
					holder.innerHTML = spanFrag;
					setClass(holder, "error") 
					if (errorObj) {
						if(errorObj.nextSibling) {
							if (errorObj.nextSibling.id != validationID ){
								errorObj.parentNode.insertBefore(holder,  errorObj.nextSibling);
							}
						} else {
							errorObj.parentNode.appendChild(holder);
						}
					} else {
						//alert("Bad")
					}
				}

			} 
		}
	}
	
	return isValid
	
}

function ValidateField(fieldObj) {
	var errorFrag = ""
	var lowerName = "validate-lowerlimit-"
	var upperName = "validate-upperlimit-"
	var lowerLimit = -999999999
	var upperLimit = 999999999
	var checkLower = false
	var checkUpper = false
	
	if (fieldObj.value == "") {
		//If it is blank I dont care about it
		return 	errorFrag
	}
	var fieldValue = fieldObj.value
	var thisIsValid = true
	var limitedValsArray = new Array()
	//This routine validates, does not check for required or not.
	var currentClass = getObjClass(fieldObj)
	currentClass += " "
	if (currentClass && currentClass.indexOf("validate") >= 0 && !checkForHidden(fieldObj)){
		if (currentClass.indexOf("validate-integer") >= 0) {
			//Integer Text
			//Check to see if there are limited values
			if (currentClass.indexOf(lowerName) >= 0) {
					lowerPos = currentClass.indexOf(lowerName) + lowerName.length
					lowerLimit = currentClass.substring(lowerPos, currentClass.indexOf(" ", lowerPos))*1
					checkLower = true
			}
			if (currentClass.indexOf(upperName) >= 0) {
					upperPos = currentClass.indexOf(upperName) + upperName.length
					upperLimit = currentClass.substring(upperPos, currentClass.indexOf(" ", upperPos))*1
					checkUpper = true
			}

			if (!isInteger(fieldObj.value)) {
				errorFrag = "This field must be an integer";
				thisIsValid = false;
			} else if (checkLower || checkUpper) {
				fieldValue = fieldValue*1 
				//Check to make sure the value is valid
				if (checkLower && checkUpper) {
					if (fieldValue < lowerLimit || fieldObj.value > upperLimit) {
						thisIsValid = false
						errorFrag = "This field must be between " + lowerLimit + " and " + upperLimit;
					}
				} else if (checkLower) {
					if (fieldValue < lowerLimit) {
						thisIsValid = false
						errorFrag = "This field must be less than " + lowerLimit;
					}
				} else if (checkUpper) {
					if (fieldValue > upperLimit) {
						thisIsValid = false
						errorFrag = "This field must be greater than " + upperLimit;
					}
				}
			}
		} else if (currentClass.indexOf("validate-number") >= 0) {
			//Numeric Text
			//Check to see if there are limited values
			//Check to see if there are limited values
			if (currentClass.indexOf(lowerName) >= 0) {
					lowerPos = currentClass.indexOf(lowerName) + lowerName.length
					lowerLimit = currentClass.substring(lowerPos, currentClass.indexOf(" ", lowerPos))
					checkLower = true
			}
			if (currentClass.indexOf(upperName) >= 0) {
					upperPos = currentClass.indexOf(upperName) + upperName.length
					upperLimit = currentClass.substring(upperPos, currentClass.indexOf(" ", upperPos))
					checkUpper = true
			}

			if (!isNumeric(fieldObj.value)) {
				errorFrag = "This field must be a number";
				thisIsValid = false;
			} else if (checkLower || checkUpper) {
				//Check to make sure the value is valid
				if (checkLower && checkUpper) {
					if (fieldObj.value < lowerLimit || fieldObj.value > upperLimit) {
						thisIsValid = false
						errorFrag = "This field must be between " + lowerLimit + " and " + upperLimit;
					}
				} else if (checkLower) {
					if (fieldObj.value < lowerLimit) {
						thisIsValid = false
						errorFrag = "This field must be less than " + lowerLimit;
					}
				} else if (checkUpper) {
					if (fieldObj.value > upperLimit) {
						thisIsValid = false
						errorFrag = "This field must be greater than " + upperLimit;
					}
				}
			}
		} else if (currentClass.indexOf("validate-string") >= 0) {
			//Numeric Text
			//Check to see if there are limited values
			classPos = currentClass.indexOf("validate-string-")
			if (currentClass.indexOf("validate-string-") >= 0) {
				limitedVals = currentClass.substring(classPos+1, currentClass.indexOf(" ", classPos))
				limitedValsArray = limitedVals.split(",")
			}
			if (limitedValsArray.length > 0) {
				//Check to make sure the value is valid
				thisIsValid = false
				errorFrag = "This field can only be: " + limitedVals;
				for (var i=0;i<limitedValsArray.length; i++) {
					if(limitedValsArray[i]==fieldObj.value) {
						thisIsValid=true
						errorFrag = "";
						break;
					}
				}
			}
		} else if (currentClass.indexOf("validate-dategroup") >= 0) {
			//Date Combo group
			//Check to see if future dates are forbidden
			if (currentClass.indexOf("-nofuture") >= 0) {
				var strTag = "nofuture-"
				var strTemp = currentClass.substring(currentClass.indexOf(strTag)+strTag.length, currentClass.length) + " "
				var strGroupName = strTemp.substring(0, strTemp.indexOf(" "))
				var drops = getGroup(strGroupName)
				var monthPart = ""
				var dayPart = ""
				var yearPart = ""
				thisIsValid = false 
				errorFrag = "Future dates are not allowed"
				for (var i =0; i< drops.length; i++) {
					txtClass = getObjClass(drops[i])
					if (drops[i].value != "") {
						if (txtClass && txtClass.indexOf("-m-") >= 0) {monthPart = drops[i].value}
						if (txtClass && txtClass.indexOf("-d-") >= 0) {dayPart = drops[i].value}
						if (txtClass && txtClass.indexOf("-y-") >= 0) {yearPart = drops[i].value}
					}
				}
				if (monthPart && dayPart && yearPart) {
					var d = new Date(yearPart, monthPart*1-1, dayPart)
					var today = new Date()
					dateDiff = d.getTime() - today.getTime()
					if (dateDiff <= 0) {
						thisIsValid = true;
						errorFrag = "";
					}
				}			
			} 
			
			if (currentClass.indexOf("-after-") >= 0 || currentClass.indexOf("-before-") >= 0) {  
				var bNoFuture = false
				if (currentClass.indexOf("-nofuture") >= 0 ) {bNoFuture = true;}
					//Assume the next part is a limiting date
					//The format should be validate-dategroup-[typeid]-limitDate-groupName
					var strTag = "validate-dategroup-"
					var typeid = currentClass.substring(currentClass.indexOf(strTag)+strTag.length, currentClass.indexOf(strTag)+strTag.length+1)
					strTag += typeid + "-"
					if (bNoFuture) {strTag += "nofuture-";}
					var bBefore = true	
					thisIsValid = false 
					if (currentClass.indexOf("-after-") >= 0) {
						bBefore = false	
						strTag += "after-"
					} else {
						strTag += "before-"
					}
					var strTemp = currentClass.substring(currentClass.indexOf(strTag)+strTag.length, currentClass.length) + " "
					var limitDate = strTemp.substring(0, strTemp.indexOf("-"))
					strTemp = strTemp.substring(strTemp.indexOf(limitDate)+limitDate.length, strTemp.length)
					var strGroupName = strTemp.substring(0, strTemp.indexOf(" "))
					var drops = getGroup(strGroupName)
					var monthPart = ""
					var dayPart = ""
					var yearPart = ""
					errorFrag = "Date must be before " + limitDate
					if (!bBefore) {errorFrag = "Date must be after " + limitDate}
					if (bNoFuture) { errorFrag += " and not in the future"}
					for (var i =0; i< drops.length; i++) {
						txtClass = getObjClass(drops[i])
						if (drops[i].value != "") {
							if (txtClass && txtClass.indexOf("-m-") >= 0) {monthPart = drops[i].value}
							if (txtClass && txtClass.indexOf("-d-") >= 0) {dayPart = drops[i].value}
							if (txtClass && txtClass.indexOf("-y-") >= 0) {yearPart = drops[i].value}
						}
					}
					if (monthPart && dayPart && yearPart) {
						var d = new Date(yearPart, monthPart*1-1, dayPart)
						var limitDay = new Date(limitDate)
						var today = new Date()
						dateDiff = d.getTime() - limitDay.getTime()
						dateDiff2 = d.getTime() - today.getTime()
						if (bBefore) {
							if (dateDiff <= 0 ) {
								if (bNoFuture){
									if (dateDiff2 <=0) {
										thisIsValid = true;
										errorFrag = "";
									}
								} else {
									thisIsValid = true;
									errorFrag = "";
								}
							}
						} else {
							if (dateDiff >= 0) {
								if (bNoFuture){
									if (dateDiff2 <=0) {
										thisIsValid = true;
										errorFrag = "";
									}
								} else {
									thisIsValid = true;
									errorFrag = "";
								}
							}
						}
						
					}
					
			}

		}
	} 
	return errorFrag
	
}


function getGroup(strGroupName) {
	var groupList = new Array()
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var currentObj = document.getElementById(currentID)
			var currentClass = getObjClass(currentObj)
			if (currentClass && currentClass.indexOf(strGroupName) >= 0) {
				groupList.push(currentObj)
			}
		}
	}
	return groupList
}


function getTextGroup(textGroupName) {
	var textGroup = new Array()
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var currentObj = document.getElementById(currentID)
			var currentClass = getObjClass(currentObj)
			if (currentClass && currentClass.indexOf(textGroupName) >= 0  && !checkForHidden(currentObj)) {
				textGroup.push(currentObj)
			}
		}
	}
	return textGroup
}

//-------------------------------------------------------------------
// isNull(value)
//   Returns true if value is null
//-------------------------------------------------------------------
function isNull(val){return(val==null);}

//-------------------------------------------------------------------
// isBlank(value)
//   Returns true if value only contains spaces
//-------------------------------------------------------------------
function isBlank(val){
	if(val==null){return true;}
	for(var i=0;i<val.length;i++) {
		if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
		}
	return true;
	}

//-------------------------------------------------------------------
// isInteger(value)
//   Returns true if value contains all digits
//-------------------------------------------------------------------
function isInteger(val){
	if (isBlank(val)){return false;}
	for(var i=0;i<val.length;i++){
		if(!isDigit(val.charAt(i))){return false;}
		}
	return true;
	}

//-------------------------------------------------------------------
// isNumeric(value)
//   Returns true if value contains a positive float value
//-------------------------------------------------------------------
function isNumeric(val){return(parseFloat(val,10)==(val*1));}

//-------------------------------------------------------------------
// isArray(obj)
// Returns true if the object is an array, else false
//-------------------------------------------------------------------
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}

//-------------------------------------------------------------------
// isDigit(value)
//   Returns true if value is a 1-character digit
//-------------------------------------------------------------------
function isDigit(num) {
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
}



function clearValidationErrors() {
	removeAll("validationErrorHolder")	
}

function removeAll(nodeName) {
	var nodeCount = 0
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var currentObj = document.getElementById(currentID)
			if (currentID.indexOf(nodeName) >= 0) {
				nodeCount++
				currentObj.parentNode.removeChild(currentObj)
			}
		}
	}
	if (nodeCount > 0) {removeAll(nodeName)}
}


function addBlankToRequiredDropdowns() {
	var nodeCount = 0
	//required-dropdown
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var currentObj = document.getElementById(currentID)
			var currentClass = getObjClass(currentObj)
			if (currentClass && currentClass.indexOf("required-dropdown") >= 0 && currentObj.length > 0) {
				if (currentObj.options[0].value != "") {
					var blankOption = document.createElement('option')
					blankOption.text = ""
					blankOption.value = ""
					try {
					  currentObj.add(blankOption, currentObj.options[0]); // standards compliant
					}
					catch(ex) {
					  currentObj.add(blankOption, 0); // IE only
					}
		  		}
			}
		}
	}
}


function checkForHidden(baseObj) {
	var isHidden = false
	var currentObj = baseObj
	while (currentObj) {
		if (currentObj) {
			var currentClass = getObjClass(currentObj)
			if (currentClass && currentClass.indexOf("hide") >= 0){
				isHidden = true;
				break;
			}
		}
		currentObj = currentObj.parentNode
	}
	
	return isHidden
}


function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( cookie_name + '=(.*?)(;|$)' );

  if ( results )
    return ( unescape ( results[1] ) );
  else
    return null;
}

function getXMLValue(xmlString, xmlTag) {
	var iStart = 0
	var iEnd = 0
	var strXML = ""
	
	iStart = xmlString.indexOf("<"+xmlTag+">") + xmlTag.length+2
	iEnd = xmlString.indexOf("</"+xmlTag+">") 
	if (iEnd > iStart) {strXML = xmlString.substring(iStart,iEnd)}
	return strXML
	
}

function setSpanValue(spanName, xmlString, xmlTag) {
	var xmlValue = getXMLValue(xmlString, xmlTag)+ ''
	if (xmlValue == 'True') {xmlValue = 'Yes'}
	if (xmlValue == 'False') {xmlValue = 'No'}
	
	document.getElementById(spanName).innerHTML = xmlValue
}

function setXMLValues(xmlString) {
	var all = document.all ? document.all : document.getElementsByTagName('*');
	for (var e = 0; e < all.length; e++){
		var currentID = all[e].id
		if (currentID && currentID != "") {
			var currentObj = document.getElementById(currentID)
			var currentClass = getObjClass(currentObj) + " " 
			if (currentClass && currentClass.indexOf("xml-") >= 0){
					var xmlClass = currentClass.substring(currentClass.indexOf("xml-")+4, currentClass.indexOf(" ", currentClass.indexOf("xml-")))
					setSpanValue(currentID,xmlString, xmlClass)

			}
			
		}
	}
}

function replaceString(inputString, searchValue, replaceValue) {
		return inputString.replace(new RegExp( searchValue, "g" ), replaceValue)
}
