var sMissingErrMsg = "";
var sInvalidErrMsg = "";


function validInput(evt)
{
	sElement = evt["srcElement"]["obj"];
	if(sElement){
		if(sElement.value!=""){
			sElement.className = sElement.className.replace("invalidInput","");
		}
	}
}
function attachInputEventsElements(objForm,sTagNames)
{
	var arrElements = objForm.getElementsByTagName(sTagNames);
	for(n=0;n<arrElements.length;n++){
		if(arrElements[n].attachEvent){
			arrElements[n].attachEvent("onkeyup",validInput);
			arrElements[n].obj = arrElements[n];
		}else{
			arrElements[n].addEventListener("keyup",function (){
				if(this.value!=""){
					this.className = this.className.replace("invalidInput","");
				}
			},false);
		}
	}
}
function validatePage(objForm)
{
	sMissingErrMsg = "";
	sInvalidErrMsg = "";
	var sErrMsg = ""
	bSetFocus = false;
	validateElements(objForm,"input");
	validateElements(objForm,"select");
	validateElements(objForm,"textarea");
	if(sMissingErrMsg!=""){
		sErrMsg = sErrMsg + "Following information(s) is missing: \n" + sMissingErrMsg;
	}
	if(sInvalidErrMsg!=""){
		sErrMsg = sErrMsg + "Following information(s) is invalid: \n" + sInvalidErrMsg;
	}
	if(sErrMsg!==""){
		sErrMsg = replaceAll(sErrMsg, "_", " ")
		alert(sErrMsg);
		return false;
	}
	return true;
}


function replaceAll(sMainStr, sReplaceWhat, sReplaceWith)
{
	while(sMainStr.indexOf(sReplaceWhat)>-1){
		sMainStr = sMainStr.replace(sReplaceWhat,sReplaceWith);
	}
	return sMainStr;
}
function validateElements(objForm,sElementName)
{	
	var arrElements = objForm.getElementsByTagName(sElementName);
	for(n=0;n<arrElements.length;n++){
		if(arrElements[n].className.indexOf("required")>-1 && arrElements[n].value==""){
			sMissingErrMsg = sMissingErrMsg + "      " + arrElements[n].name +"\n";
			arrElements[n].className = arrElements[n].className + " invalidInput";
			attachInputEvents(arrElements[n]);
		}
		if(arrElements[n].className.indexOf("Num")>-1 && arrElements[n].value!="" && fSafeNum(arrElements[n].value)==0 && isNaN(arrElements[n].value)){
			sInvalidErrMsg = sInvalidErrMsg + "      " + arrElements[n].name +"\n";
			arrElements[n].className = arrElements[n].className + " invalidInput";
			attachInputEvents(arrElements[n]);
		}
		if(arrElements[n].className.indexOf("Email")>-1 && arrElements[n].value!="" && (arrElements[n].value.indexOf("@")==-1 ||arrElements[n].value.indexOf(".")==-1)){
			sInvalidErrMsg = sInvalidErrMsg + "      " + arrElements[n].name +"\n";
			arrElements[n].className = arrElements[n].className + " invalidInput";
			attachInputEvents(arrElements[n]);
		}
		if(arrElements[n].className.indexOf("MobilePhone")>-1 && arrElements[n].value!=""){
			var sPhoneNumber = arrElements[n].value;
			sPhoneNumber = replaceAll(sPhoneNumber , ",", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "+", "")
			sPhoneNumber = replaceAll(sPhoneNumber , " ", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "(", "")
			sPhoneNumber = replaceAll(sPhoneNumber , ")", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "-", "")
			if(isNaN(sPhoneNumber) || sPhoneNumber.length<10){
				sInvalidErrMsg = sInvalidErrMsg + "      " + arrElements[n].name +"\n";
				arrElements[n].className = arrElements[n].className + " invalidInput";
				attachInputEvents(arrElements[n]);
			}
		}
		if(arrElements[n].className.indexOf("HomePhone")>-1 && arrElements[n].value!=""){
			var sPhoneNumber = arrElements[n].value;
			sPhoneNumber = replaceAll(sPhoneNumber , ",", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "+", "")
			sPhoneNumber = replaceAll(sPhoneNumber , " ", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "(", "")
			sPhoneNumber = replaceAll(sPhoneNumber , ")", "")
			sPhoneNumber = replaceAll(sPhoneNumber , "-", "")
			if(isNaN(sPhoneNumber) || sPhoneNumber.length<6){
				sInvalidErrMsg = sInvalidErrMsg + "      " + arrElements[n].name +"\n";
				arrElements[n].className = arrElements[n].className + " invalidInput";
				attachInputEvents(arrElements[n]);
			}
		}
		if((sMissingErrMsg!="" || sInvalidErrMsg!="") && !bSetFocus){
			arrElements[n].focus();
			bSetFocus = true;
		}
		
	}
}
function attachInputEvents(sObj)
{
	if(sObj.attachEvent){
		sObj.attachEvent("onkeyup",validInput);
		sObj.obj = sObj;
	}else{
		sObj.addEventListener("keyup",function (){
			if(this.value!=""){
				this.className = this.className.replace("invalidInput","");
			}
		},false);
	}
}
function fSafeNum(str){
	str = str + "";
	str = replaceAll(str,",","");
	if(isNaN(str) || str==""){
		return 0;
	} else {
		return parseFloat(str);
	}
}
var gsDivID="";

function getElementsVals(objForm,sTagNames)
{
	var sAjaxParams = ""
	var arrElements = objForm.getElementsByTagName(sTagNames);
	for(n=0;n<arrElements.length;n++){
		if(sTagNames=="select"){
			for(i=0;i<arrElements[n].length;i++){
				if(arrElements[n].options[i].selected){
					sAjaxParams = sAjaxParams + "&" + arrElements[n].name + "=" + escape(arrElements[n].options[i].value);	
				}
			}
		}
		else if(arrElements[n].type=="checkbox"){
			if(arrElements[n].checked){
				sAjaxParams = sAjaxParams + "&" + arrElements[n].name + "=" + escape(arrElements[n].value);
			}
		}
		else if(arrElements[n].type=="radio"){
			if(arrElements[n].checked){
				sAjaxParams = sAjaxParams + "&" + arrElements[n].name + "=" + escape(arrElements[n].value);
			}		
		}
		else{
			sAjaxParams = sAjaxParams + "&" + arrElements[n].name + "=" + escape(arrElements[n].value);
		}
	}
	return sAjaxParams;
}
function getFormElements(objForm)
{
	var sAjaxParams1 = getElementsVals(objForm,"input");
	var sAjaxParams2 = getElementsVals(objForm,"select");
	var sAjaxParams3 = getElementsVals(objForm,"textarea");
	var retParams = sAjaxParams1 + sAjaxParams2 + sAjaxParams3;
	retParams = replaceAll(retParams,"&&","&"); 
	if(retParams.indexOf("&")==0){
		retParams = retParams.substring(1);
	}
	if(retParams.indexOf("&")==retParams.length){
		retParams = retParams.substring(0,retParams.length-1);
	}
	return retParams;
}

function SendAjaxRequest(sRequestFile, objForm, sDivID)
{
	var sURL = sRequestFile
	sParams = getFormElements(objForm);
	sParams  = sParams + "&ref="+Math.floor(Math.random()*10001)
	sURL = sURL + "?" + sParams;
	SendAjaxRequestByURL(sURL, sDivID)
}
function SendAjaxRequestByURL(sURL, sDivID)
{
	gsDivID = sDivID;
	var e = document.getElementById(gsDivID);
	if(e){
		e.style.display='';
		e.innerHTML = "<br/><br/><center><img src=\"imgs/loading.gif\" border=\"0\"></center>";
		xmlHTTP=GetXmlHttpObject();
		if (xmlHTTP==null){
		  alert ("Your browser does not support XMLHTTP!");
		  return;
		}
		nPOS = sURL.indexOf("?");
		if(nPOS>-1){
			sParams = sURL.substring(nPOS+1);
			sURL = sURL.substring(0,nPOS);
		}
		xmlHTTP.open("POST",sURL,true);
		xmlHTTP.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHTTP.setRequestHeader("Content-length", sParams.length);
		xmlHTTP.setRequestHeader("Connection", "close");
		xmlHTTP.onreadystatechange=UpdateAjaxRequest;
		xmlHTTP.send(sParams);
	}
}
function UpdateAjaxRequest()
{
	if (xmlHTTP.readyState==4){
		var e = document.getElementById(gsDivID);
		if(e){
			var sResponseText = xmlHTTP.responseText; 
			e.innerHTML =  sResponseText;
			nRedirectPOS = sResponseText.indexOf("<!--Redirect:")
			if(nRedirectPOS>-1){
				sResponseText = sResponseText.substring(nRedirectPOS)
				sResponseText = sResponseText.replace("<!--Redirect:","");
				sResponseText = sResponseText.replace("-->","");
				window.location.href = sResponseText;
			}
			nFillPOS = sResponseText.indexOf("<!--Fill:")
			if(nFillPOS>-1){
				sResponseText = sResponseText.substring(nFillPOS)
				sResponseText = sResponseText.replace("<!--Fill:","");
				sResponseText = sResponseText.replace("-->","");
				sResponseTextArr = sResponseText.split("~~");
				document.getElementById(sResponseTextArr[2]).value = sResponseTextArr[0];
				document.getElementById(sResponseTextArr[3]).value = sResponseTextArr[1];
				hs.close();
			}
			nBlinkPOS = sResponseText.indexOf("<!--BlinkRows:")
			if(nBlinkPOS>-1){
    			nBlinkPOS2 = sResponseText.indexOf("-->",nBlinkPOS+3)
				sResponseText = sResponseText.substring(nBlinkPOS,nBlinkPOS2)
				sResponseText = sResponseText.replace("<!--BlinkRows:","");
				sResponseText = sResponseText.replace("-->","");
				sResponseTextArr = sResponseText.split(",");
				for(n=1;n<=sResponseTextArr.length;n++){
				    highlightRow(sResponseTextArr[0]+sResponseTextArr[n])
				}
			}
		}
	}
	
}
function GetXmlHttpObject()
{
	if (window.XMLHttpRequest){
	  // code for IE7+, Firefox, Chrome, Opera, Safari
	  return new XMLHttpRequest();
	}
	if (window.ActiveXObject){
	  // code for IE6, IE5
	  return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

function forceNumber(eventObj, obj)
{
	var keyCode

	if (document.all){
		keyCode=eventObj.keyCode
	}
	else{
		keyCode=eventObj.which
	}
	var str=obj.value
	if(keyCode==8 || keyCode==0 || keyCode==190 || keyCode==37 || keyCode==39 || keyCode==16 || keyCode==9 || keyCode==46 || keyCode==35 || keyCode==36){
		return true;
	}
	if(keyCode>95 && keyCode <106) { 
		return true;
	}
	if((keyCode<48 || keyCode >57)  ) { // Allow only integers and decimal points &&   (keyCode != 46)
		return false;
	}
	return true;
}
function dateAddExtention(p_Interval, p_Number){ 


   var thing = new String(); 
    
    
   //in the spirt of VB we'll make this function non-case sensitive 
   //and convert the charcters for the coder. 
   p_Interval = p_Interval.toLowerCase(); 
    
   if(isNaN(p_Number)){ 
    
      //Only accpets numbers  
      //throws an error so that the coder can see why he effed up    
      throw "The second parameter must be a number. \n You passed: " + p_Number; 
      return false; 
   } 

   p_Number = new Number(p_Number); 
   switch(p_Interval.toLowerCase()){ 
      case "yyyy": {// year 
         this.setFullYear(this.getFullYear() + p_Number); 
         break; 
      } 
      case "q": {      // quarter 
         this.setMonth(this.getMonth() + (p_Number*3)); 
         break; 
      } 
      case "m": {      // month 
         this.setMonth(this.getMonth() + p_Number); 
         break; 
      } 
      case "y":      // day of year 
      case "d":      // day 
      case "w": {      // weekday 
         this.setDate(this.getDate() + p_Number); 
         break; 
      } 
      case "ww": {   // week of year 
         this.setDate(this.getDate() + (p_Number*7)); 
         break; 
      } 
      case "h": {      // hour 
         this.setHours(this.getHours() + p_Number); 
         break; 
      } 
      case "n": {      // minute 
         this.setMinutes(this.getMinutes() + p_Number); 
         break; 
      } 
      case "s": {      // second 
         this.setSeconds(this.getSeconds() + p_Number); 
         break; 
      } 
      case "ms": {      // second 
         this.setMilliseconds(this.getMilliseconds() + p_Number); 
         break; 
      } 
      default: { 
       
         //throws an error so that the coder can see why he effed up and 
         //a list of elegible letters. 
         throw   "The first parameter must be a string from this list: \n" + 
               "yyyy, q, m, y, d, w, ww, h, n, s, or ms.  You passed: " + p_Interval; 
         return false; 
      } 
   } 
   return this; 
} 
Date.prototype.dateAdd = dateAddExtention; 
