/******************************************************
 Copyright © 2004-2005 IMSI, Inc.  All rights reserved.
*******************************************************/


/*----------------------------------------------------------------------------------------
 Function:		rollOver
 Purpose:		Perform a DHTML rollover for the specified image
 
 Parameters:	imgName - Primary name of the image file
				sfx - Image state to display
------------------------------------------------------------------------------------------*/
function rollOver(imgName, sfx)
{
	document.images[imgName].src = "graphics/" + "nav_" + imgName + "_" + sfx + ".gif";
}


/*----------------------------------------------------------------------------------------
 Function:		WindowOpener
 Purpose:		Open a page in a Popup Window or bring it into Focus if it already exists.
 Notes:			To accomodate multiple popup windows from the same function, an array 
				(aobjPopupWindows) is used to store a handle to each window reference.
 
 Parameters:	strURL - URL to load in the Popup Window
				strName - Name of the Popup Window
				strArguments - Controls the positioning & appearance of the Popup Window
------------------------------------------------------------------------------------------*/
var aobjPopupWindows = new Array();

function WindowOpener(strURL, strName, strArguments)
{
	if ((typeof(aobjPopupWindows[strName]) != "object") || (aobjPopupWindows[strName].closed) || ((aobjPopupWindows[strName].location.pathname + aobjPopupWindows[strName].location.search).replace(/^(\/)?.*(\/)/, "") != strURL.replace(/^(\/)?.*(\/)/, "")))
	{
		aobjPopupWindows[strName] = window.open(strURL, strName, strArguments);
	}
	
	aobjPopupWindows[strName].focus();
}


/*----------------------------------------------------------------------------------------
 Prototype:		String.trim
 Purpose:		Remove leading and trailing whitespace from a string.
 
 Returns:		STRING ~ A copy of the string with leading and trailing whitespace removed
------------------------------------------------------------------------------------------*/
String.prototype.trim = function()
{
	return this.replace(/^\s+|\s+$/, "");
}


/*----------------------------------------------------------------------------------------
 Prototype:		Array.indexOf
 Purpose:		Finds the first matching index in an array.
 				Emulates the JavaScript String.indexOf method.
 
 Parameters:	vntValue - The value being searched for within the array
 Returns:		INTEGER ~ The first index of the array containing the value
						~ -1 if the value isn't found
------------------------------------------------------------------------------------------*/
Array.prototype.indexOf = function(vntValue)
{
	for (var i = 0; i < this.length; i++)
	{
		if (this[i] == vntValue)
		{
			return i;
		}
	}
	
	return -1;
}


/*----------------------------------------------------------------------------------------
 Function:		blnValidateEmail
 Purpose:		Validate that a string contains a valid email address pattern.
 Notes:			Accounts for email with country appended, but does not validate that 
				email contains valid URL type (.com, .gov, etc.) or valid country suffix.
 
 Parameters:	strEmailAddress - String to be tested for validity
 Returns:		BOOLEAN ~ True if valid
						~ False otherwise
------------------------------------------------------------------------------------------*/
function blnValidateEmail(strEmailAddress)
{
	var objRegExp = /^([a-z0-9_\-\+\.]+)@([a-z0-9_\-\+\.]+)\.([a-z]{2,4}|store|museum)$/i;
	return objRegExp.test(strEmailAddress);
}


/*----------------------------------------------------------------------------------------
 Function:		blnValidatePhone
 Purpose:		Validate that a string contains a valid phone number pattern.
 Notes:			Only accounts for phone numbers from the USA.
 
 Parameters:	strPhoneNumber - String to be tested for validity
 Returns:		BOOLEAN ~ True if valid
						~ False otherwise
------------------------------------------------------------------------------------------*/
function blnValidatePhone(strPhoneNumber)
{
	var objRegExp = /^(1[\-\s\.]?)?(\([1-9]\d{2}\)\s?|[1-9]\d{2}[\-\s\.]?)\d{3}[\-\s\.]?\d{4}(\s?(x|ext\.?|extension)\s?\d{1,9})?$/i;
	return objRegExp.test(strPhoneNumber);
}


/*----------------------------------------------------------------------------------------
 Function:		blnValidateZipCode
 Purpose:		Determine if a string contains a valid United States Zip Code.
 
 Parameters:	strZipCode - String to be tested for validity
 Returns:		BOOLEAN ~ True if valid
						~ False otherwise
------------------------------------------------------------------------------------------*/
function blnValidateZipCode(strZipCode)
{
	var objRegExp  = /^\d{5}(-?\d{4})?$/;
	return objRegExp.test(strZipCode);
}


/*----------------------------------------------------------------------------------------
 Function:		blnValidatePostalCode
 Purpose:		Determine if a string contains a valid Canadian Postal Code.
 
 Parameters:	strPostalCode - String to be tested for validity
 Returns:		BOOLEAN ~ True if valid
						~ False otherwise
------------------------------------------------------------------------------------------*/
function blnValidatePostalCode(strPostalCode)
{
	var objRegExp  = /^[a-zA-Z]\d[a-zA-Z](\-|\s)?\d[a-zA-Z]\d$/;
	return objRegExp.test(strPostalCode);
}


/*----------------------------------------------------------------------------------------
 Function:		blnValidateURL
 Purpose:		Validate that a string contains a valid URL.
 
 Parameters:	strURL - String to be tested for validity
 Returns:		BOOLEAN ~ True if valid
						~ False otherwise
------------------------------------------------------------------------------------------*/
function blnValidateURL(strURL)
{
	var objRegExp = /^http(s)?:(\/){2}[a-z0-9\-&_+](([a-z0-9\-&_+]{0,61}[a-z0-9\-&_+])?\.)+([a-z]{2,4}|store|museum)(\:\d+)*(\/([a-z0-9\.\+\?\-&_~=#$%]+\/?)*)?$/i;
	return objRegExp.test(strURL);
}

function setClassName(objId, className) {
	var ele= document.getElementById(objId);
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
		return;
	ele.className += (ele.className ? " " : "") + className;
}

function removeClassName(objId, className) {
	var ele= document.getElementById(objId);
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");	
}

function validateReqFields(formName,oldClassName,newClassName){
	var errormsg="";
	var allReqStr="";
	formObj=document.getElementById(formName);
	
	for (var i=0; i < formObj.elements.length; i++){		
		if (formObj.elements[i].getAttribute("label")=="req"){
			if (formObj.elements[i].type == "radio")
			{						
				myOption = 0;
				
				currentName = formObj.elements[i].name;
				currentField = formObj.elements[currentName];
				
				for (a=0;a<currentField.length;a++) 
				{
					//alert(a + currentField[a].checked);
					if (currentField[a].checked) 
					{
						myOption = myOption + 1;
					}
				}
				if (myOption == 0)
				{	
					errormsg = "Please Enter all the required information with *"
				}									
			}
			if(formObj.elements[i].name == "email" || formObj.elements[i].name == "emailAddress"){

				if (!blnValidateEmail(formObj.elements[i].value)){
					removeClassName(formObj.elements[i].name,formObj.elements[i].className)
					setClassName(formObj.elements[i].name,newClassName)
					errormsg="Invalid Email Address";				
				}
			}
			if(formName == "QuickQuote_Form"){
				allReqStr=allReqStr+formObj.elements[i].value;
				allReqStr=allReqStr.replace(/\n/g,"");
			}
			else{
								
				if(formObj.elements[i].value == "" ){
					removeClassName(formObj.elements[i].name,formObj.elements[i].className)
					setClassName(formObj.elements[i].name,newClassName)
					errormsg="Please Enter all the required information with *";
				}
				else{
					removeClassName(formObj.elements[i].name,formObj.elements[i].className);
				}				
			}
		}
	}
	if(formName == "QuickQuote_Form" && (allReqStr.replace(/ /g,"")).length == 0){
		errormsg="Please enter modifications";
	}
	
	if(errormsg != "")
	{
		alert(errormsg);
		return false;
	}
	else
	{
		formObj.submit();
	}
}

function submitFinal(formName) {
	formObj=document.getElementById(formName);
	if (confirm("Are you sure you want to submit your modification QuickQuote now?")){
		formObj.submit();
	}
}

//*******************************************************
// Builds a querystring of of the child form elements of the 
// object passed to the function. 
//*******************************************************
function formPost(top_element,joinChar){
	noQuote(top_element);
	var inputs=top_element.getElementsByTagName('*');
	var qstring=new Array();
	var planNumStr="";
	var empty_kStr="";
	var qs_str="";
	for(var i=0;i<inputs.length;i++){
			
		if(!inputs[i].disabled&&inputs[i].getAttribute('name')!=""&&inputs[i].getAttribute('name') && inputs[i].getAttribute('name')!="max_sqft" && inputs[i].getAttribute('name')!="Tmin_sqft" && inputs[i].getAttribute('name')!="Tmax_sqft"){
			qs_str=get_qsPair(inputs[i].getAttribute('name'),joinChar);
			
			if (inputs[i].getAttribute('name')=="planNum" && encodeURIComponent(inputs[i].value) != ""){
				planNumStr=inputs[i].getAttribute('name') + ":" +encodeURIComponent(inputs[i].value);
			}
			else{
				if (qs_str=="" && encodeURIComponent(inputs[i].value) != "" || inputs[i].getAttribute('name')=="_k"){
					if (inputs[i].getAttribute('name')=="_k"){
						
						if (inputs[i].value == ""){
							empty_kStr="";
						}
						else{
							empty_kStr="_k="+encodeURIComponent(inputs[i].value);							
						}
					}
					else{
						qs_str="";
					}
				}
			}			
			
			switch(inputs[i].tagName.toLowerCase()){
				case "select":
					if(inputs[i].getAttribute("multiple")){
						var len2=inputs[i].length;
						for(var j=0;j<len2;j++){
							if(inputs[i].options[j].selected){
								var targ=(inputs[i].options[j].value) ? inputs[i].options[j].value : inputs[i].options[j].text;
								if (qs_str != ""){
									qstring[qstring.length]=qs_str;	
								}
							}
						}
					}
					else{
						var targ=(inputs[i].options[inputs[i].selectedIndex].value) ? inputs[i].options[inputs[i].selectedIndex].value : inputs[i].options[inputs[i].selectedIndex].text
						if (qs_str != ""){
							qstring[qstring.length]=qs_str;	
						}
					}
				break;
				case "textarea":
					if (qs_str != ""){
						qstring[qstring.length]=qs_str;	
					}
				break;
				case "input":
					if (inputs[i].getAttribute("type"))
					{
						switch(inputs[i].getAttribute("type").toLowerCase()){	
							case "radio":
								if(inputs[i].checked){
									if (qs_str != ""){
										if(inputs[i].value == 1){
											qstring[qstring.length]=inputs[i].getAttribute('name')+":true";	
										}
										else{
											qstring[qstring.length]=inputs[i].getAttribute('name')+":false";	
										}
										
									}
								}
							break;
							case "checkbox":
								if(inputs[i].value!=""){
									if(inputs[i].checked){
										if (qs_str != ""){
											qstring[qstring.length]=qs_str;	
										}
									}
								}
							break;	
							case "text":
									if (qs_str != ""){
										qstring[qstring.length]=qs_str;	
									}
							break;
							case "password":
									if (qs_str != ""){
										qstring[qstring.length]=qs_str;	
									}
							break;
							case "hidden":
									if (qs_str != ""){
										qstring[qstring.length]=qs_str;	
									}
							break;
						}
					}else
						alert(inputs[i].getAttribute('name'));
				break;	
			}
		}
	}
	//alert(qstring.join(joinChar))
	if (planNumStr != ""){
		window.location = "results.asp?_f="+planNumStr;
	}
	else{
		if (empty_kStr != ""){
			window.location = "results.asp?"+empty_kStr+"&_f="+qstring.join(joinChar);
		}
		else{
			if (qstring.join(joinChar)==""){
				window.location = "results.asp?_f=type:plan";
			}
			else{
				window.location = "results.asp?_f="+qstring.join(joinChar);
			}
		}
	}
	//return qstring.join(joinChar);
}

function get_qsPair(varName,joinChar)
{
	var rtn_str="";
	
	for (var i=1;i <50; i++)
	{
		var varComp="sty"+i;
		if (varName==varComp)
		{
			rtn_str="AND style:"+i;	
		}
	}

	if (varName=="Bd1" || varName=="Bd2" || varName=="Bd3" || varName=="Bd4" || varName=="Bd5")
	{
		if (varName == "Bd5")
		{
			rtn_str = "bed:longRange:5:999";
		}
		else
		{
			rtn_str = "bed:"+varName.substr(2);
		}
	}
	
	if (varName=="st1" || varName=="st2" || varName=="st3")
	{
		var n = varName.substr(2);
		switch(n)
		{
			case "3":
				rtn_str="level:longRange:3:999";
			break;	
			default:
				rtn_str="level:"+n;
		}
	}
	
	if (varName=="Bh1" || varName=="Bh2" || varName=="Bh3" || varName=="Bh4") 
	{
		var n = varName.substr(2);
		switch(n)
		{
			case "1":
				rtn_str="bath:1.0";
			break;    
			case "2":
				rtn_str="bath:1.5"+joinChar+"bath:2.0";
			break;
			case "3":
				rtn_str="bath:2.5"+joinChar+"bath:3.0";
			break;
			case "4":
				rtn_str="bath:3.5"+joinChar+"bath:4.0"+joinChar+"bath:4.5"+joinChar+"bath:5.0"+joinChar+"bath:5.5"+joinChar+"bath:6.0";
			break;				
			default:
				alert("baths");

		}
	}
	
	if (varName=="G0" || varName=="G1" || varName=="G2" || varName=="G3") 
	{
		var n = varName.substr(1);
		switch(n)
		{
			case "3":
				rtn_str="gar:longRange:3:999";
			break;	
			default:
				rtn_str="gar:"+n;
		}
	}

	if (varName=="planType1" || varName=="planType2" || varName=="planType3" || varName=="planType4" || varName=="planType5" || varName=="planType6" || varName=="planType7" || varName=="planType10" || varName=="planType14")
	{
		return "planType:"+varName.substr(8);
	}
	
	if (varName=="ddType")
	{
		if (document.getElementById(varName).value > 0)
		{
			return "planType:"+document.getElementById(varName).value;
		}
	}
	
	for (var i=1;i <= 84; i++)
	{
		var varComp="feat"+i;
		if (varName==varComp)
		{
			rtn_str="AND fx:"+i;	
		}
	}
	
	if (varName=="min_sqft" || varName=="max_sqft" || varName=="Tmin_sqft" || varName=="Tmax_sqft")
	{
		var minSqFt = 0;
		var maxSqFt = 0;
		
		if(document.getElementById("Tmin_sqft").value != 0 || document.getElementById("Tmax_sqft").value != 0)
		{
			minSqFt = document.getElementById("Tmin_sqft").value;
			maxSqFt = document.getElementById("Tmax_sqft").value;
		}
		else
		{
			minSqFt = document.getElementById("min_sqft").value;
			maxSqFt = document.getElementById("max_sqft").value;
		}

		rtn_str = "AND sq:longRange:";
		
		if(minSqFt == "")
		{
			minSqFt = 0;
		}
		
		var int_minSqFt = parseInt(minSqFt)
		var int_maxSqFt = parseInt(maxSqFt)
		
		rtn_str = rtn_str + int_minSqFt + ":";
		
		if(int_maxSqFt >= int_minSqFt && int_maxSqFt != 0)
		{
			rtn_str = rtn_str + int_maxSqFt;
		}
		else
		{
			if (int_minSqFt == 0){
				rtn_str="";
			}
			else{
				rtn_str = rtn_str + "990000";			
			}
		}	
	}
	
	if (varName=="width")
	{
		var w = document.getElementById("width").value;

		var intw = parseInt(w);
		var lowintw = intw-4;
		
		if (w == 0)
		{
			rtn_str = "";
		}
		else
		{
			if (intw == 20)
			{
				rtn_str = "AND w:longRange:0:" + intw;
			}
			else
			{
				if (intw == 75)
				{
					rtn_str = "AND w:longRange:51:" + intw;
				}
				else
				{
					if (intw == 1000)
					{
						rtn_str = "AND w:longRange:76:" + intw;
					}
					else
					{
						rtn_str = "AND w:longRange:" + lowintw + ":" + intw;
					}
				}
			}
		}
		
	}
	
	if (varName=="depth")
	{
		var d = document.getElementById("depth").value;
	
		var intd = parseInt(d);
		var lowintd = intd-4;
		
		if (d == 0)
		{
			rtn_str = "";
		}
		else
		{
			if (intd == 20)
			{
				rtn_str = "AND d:longRange:0:" + intd;
			}
			else
			{
				if (intd == 75)
				{
					rtn_str = "AND d:longRange:51:" + intd;
				}
				else
				{
					if (intd == 1000)
					{
						rtn_str = "AND d:longRange:76:" + intd;
					}
					else
					{
						rtn_str = "AND d:longRange:" + lowintd + ":" + intd;
					}
				}
			}
		}
	}
	
	if (varName=="Slab" || varName=="Crawlspace" || varName=="Pier" || varName=="Basement" || varName=="DayBasement" ||  varName=="WalkoutBasement")
	{
		rtn_str = "AND " + varName + ":true";
	}
	
	if (varName=="FinishedBasement")
	{
		rtn_str = varName + ":true";	
	}
	
	if (varName=="MAT")
	{
		rtn_str = "AND matList:y";
	}
	
	if (varName=="CAD")
	{
		rtn_str = "AND CAD:y";
	}
	
	return rtn_str;
}

function noQuote(top_element){
	var inputs=top_element.getElementsByTagName('*');
	for(var i=0;i<inputs.length;i++){
		if(!inputs[i].disabled&&inputs[i].getAttribute('name')!=""&&inputs[i].getAttribute('name')){
					inputs[i].value;

			switch(inputs[i].tagName.toLowerCase()){
				case "textarea":
					if (inputs[i].value != ""){
						inputs[i].value = (inputs[i].value).replace(/'/g,"");	
					}
				break;
				case "input":
					if (inputs[i].getAttribute("type"))
					{
						switch(inputs[i].getAttribute("type").toLowerCase()){	
							case "text":
								if (inputs[i].value != ""){
									inputs[i].value = (inputs[i].value).replace(/'/g,"");	
								}
							break;
							case "password":
								if (inputs[i].value != ""){
									inputs[i].value = (inputs[i].value).replace(/'/g,"");	
								}
							break;
						}
					}
				break;	
			}
		}
	}
}

function showDiv(divID)
{
	if (document.getElementById(divID))
	{
		divObj = document.getElementById(divID);
		divObj.style.visibility="visible";
		divObj.style.display="block";
	}
}

function hideDiv(divID)
{
	if (document.getElementById(divID))
	{
		divObj = document.getElementById(divID);
		divObj.style.visibility="hidden";
		divObj.style.display="none";
	}
}