// JavaScript Document
/*
Change Log
	
	Date		Programmer		Project				Issue		Subtask		Description
	----		----------		-------				-----		-------		-----------
	09/29/2006	Andrew			8					4192		4453		create
	12/07/2006	Andrew 			8					4192		4453		Fixed display issues and ie issue with variable name being status.
	12/28/2006	Jim Ames		8					4192		5533		limited the number of returned agents to five (5)
	01/03/2007	Andrew Leaf		8					4192		5583		Fixed error box set counter back to dynamic, fixed some display issues.
	01/08/2007	Andrew Leaf		8					4192		5600		Fixed productResult to recognize more than 2 products and fixed error message I found.
	02/07/2007	Adrian J. Moreno	8				5643		5924		updated CSS layout
	02/15/2007	Andrew Leaf		8					5643		6007		Added Phone number
	04/30/2007	Andrew Leaf		10					WBSPT2493				changed getAgency() to addapt to radio buttons.
	09/22/2008	Kelly Johnson	10					WBSPT3955				add changed agent locator folder, script name
	09/23/2008	Kelly Johnson	10					WBSPT4955				Add logic to fiindAgentsResult() for IPWatch
	10/02/2008	Kelly Johnson	10					WBSPT3861				Require zipcode on all searches (validate())
*/
this.messages = {
	typeCA:"We currently offer Commercial Vehicle insurance in your state.",
	typePA:"We currently offer Personal Auto insurance in your state.",
	typePACA:"We currently offer Personal Auto and Commercial Vehicle insurance in your state.  Please select the type of insurance you are looking for.",
	noZipCode:"There are no agencies in the selected zipcode and surrounding area.  Please enter a new zipcode and/or search radius.",
	selectType:"Please select the type of insurance you are looking for."
}


/***********************************************/
/*************** product ajax ******************/
/***********************************************/

function validate()
{
	var zip 		= new getObj("zipCode");
	var agentName 	= new getObj("agency");
	if( !isNaN(zip.obj.value) && zip.obj.value.length == 5 )
	{
		return true;			
	}
	else
	{
		displayObject("validateNameText", 1);
		return false;
	}
}

function process()
{
	if(validate())
	{
		//process
		var setSearchStatus = new getObj("setSearchStatus");
		displayObject("validateNameText", 0);	
		enableObject("searchButton",0,"Searching")
		
		if( setSearchStatus.obj.value == "" )
		{
			getProduct();
		}
		else
		{
			getAgency();
		}
	}
}

function clearForm() 
{
	var tbl 	= document.getElementById("report").getElementsByTagName("tbody")[0];
	personal 	= new getObj("personal");
	commercial 	= new getObj("commercial");
	clearTable(tbl)
	document.getElementById("setSearchStatus").value="";
	document.getElementById("agency").value = "";
	setMessage("messageText", "" );
	displayObject("validateOptionText", 0);
	displayObject("message", 0);
	displayObject("legendHide", 0);
	commercial.obj.checked = "";
	personal.obj.checked = "";
}


/***********************************************/
/*************** product ajax ******************/
/***********************************************/
function getProduct()
{
	var zipCode=DWRUtil.getValue("zipCode");
	DWREngine._execute(baseUrl()+"/agencyLocator/scripts/locatorControl.cfm", null, "productsByState", zipCode, productResult);
}

function productResult(result)
{
	enableObject("searchButton",1,"Search");
	setSearchStatus = new getObj("setSearchStatus");
	personal 		= new getObj("personal");
	commercial 		= new getObj("commercial");
	if(result.length != 0)
	{
		
		switch(result.length > 1)
		{
			case true:
				this.displayMessage = this.messages.typePACA;
				displayObject("validateOptionText",1);
				displayObject("message", 1);
				setSearchStatus.obj.value 		= "search";
				personal.obj.value 		= result[1];
				commercial.obj.value 	= result[0];
			break;
			
			default:
				if(result[0] == "'PA'")
				{
					this.displayMessage = this.messages.typePA;
					personal.obj.checked = "checked";
					displayObject("message", 1);
					setSearchStatus.obj.value 		= "search";
					personal.obj.value 		= result[0];
					process();
				}
				else
				{
					this.displayMessage = this.messages.typeCA;
					commercial.obj.checked = "checked";
					displayObject("message", 1);
					setSearchStatus.obj.value 		= "search";
					commercial.obj.value 	= result[0];
					process();
				}
			break;
		}
		setMessage("messageText", this.displayMessage )
	}
	else
	{
		setMessage("messageText", this.messages.noZipCode);
		displayObject("message", 1);
	}
}

/***********************************************/
/***************** agent ajax ******************/
/***********************************************/

function getAgency()
	{
		var setSearchStatus	= DWRUtil.getValue('setSearchStatus');
		var zipCode	= DWRUtil.getValue('zipCode');
		var radius5	= DWRUtil.getValue('radius5');
		var radius10= DWRUtil.getValue('radius10');
		var agency	= DWRUtil.getValue('agency');
		var LOB		= "";
		var personal = document.getElementById("personal");
		var commercial = document.getElementById("commercial");
		var radius = "";
		if(radius5)
		{
			radius = document.getElementById("radius5").value;
		}
		else
		{
			radius = document.getElementById("radius10").value;
		}
		
		if( personal.checked)
		{
			LOB += personal.value;
			
		}
		
		if( commercial.checked)
		{
			LOB += commercial.value;
			
		}
		
		if(LOB.length)
		{
			LOB = LOB.replace("''",",")
		DWREngine._execute(baseUrl()+'/agencyLocator/scripts/locatorControl.cfm', null, 'findAgents',  zipCode, radius, LOB, agency, findAgentsResult);
		}
		else
		{
			alert(this.messages.selectType)
			enableObject("searchButton",1,"Search");
		}
	}

	function findAgentsResult(result)
	{
		var tbl 		= document.getElementById("report").getElementsByTagName("tbody")[0];
		var message 	= new getObj("messageText");
		var agencyFld 	= document.getElementById("agency");
		var searchField = "";
		clearTable(tbl);
		displayObject("legendHide", 1);
		// 9/23/2008 - JKJ - WBSPT3955
		if (result == "false")
		{
			// Attempts exceeded, redirect to message page
			document.location = "/us/agencyLocator/blockMessage.cfm";
		}
		else
		{
			if(result.length)
			{
				displayObject("legendHide", 1);
				setMessage("messageText", this.displayMessage);
				message.obj.className = "";
				for( var i=0; i < result.length; i++)
				{
					var rowObj 		= document.createElement("tr");
					rowObj.className = "headerRow";
					//adds a dynamic header
					if ( !i )
					{
						tbl.appendChild(addHeader(rowObj, ["Company", "Address", "City", "State", "Zip", "LOB","Phone", "Map"] ) ); //add ("WebSite") to array in agency master project
						var rowObj = document.createElement("tr");
						
					}
					if (i % 2)
					{
						rowObj.className = "evenRow";
					}
					else
					{
						rowObj.className = "oddRow";
					}
					tbl.appendChild(addRows(rowObj, result[i],[getCompanyName, getAddress, getCity, getState, getZip, getLOB, getPhone, getMap]));//add ( getWebSite ) to array in agency master project
				}
			}
			else
			{
				displayObject("legendHide", 0);
				if(agencyFld.value != "")
				{
					searchField = " for <b>" + agencyFld.value +"</b> ";
				}
				setMessage("messageText", "No Records were found" +  searchField + ". You can change the name of the agency and search again.");
				message.obj.className = "required";
				displayObject("message", 1);
			}
			enableObject("searchButton",1,"Search");
		}
	}

/*************************************************/
/*************** populate table ******************/
/*************************************************/
	function addHeader(rowObj,array)
	{
		for( var j=0; j<array.length; j++)
		{
			var column = document.createElement("th");
			column.innerHTML = array[j];
			rowObj.appendChild(column);
		}
		return rowObj;
	}
		
	function clearTable(ele)
	{
		while (ele.childNodes.length > 0)
		{
			ele.removeChild(ele.firstChild);
		}
	}
	
	function addRows( rowObj, row, cellFuncs)
	{
		for( var j=0; j<cellFuncs.length; j++ )
		{
			var func = cellFuncs[j];
			var value = func(row);
			var column = document.createElement("td");
			
			
			if(func != getLOB)
			{
				if( func == getMap)
				{
					column.appendChild(value);
				}
				else
				{
					column.innerHTML = value.toLowerCase();	
				}
			}
			else
			{
				column.innerHTML = value;
			}
			rowObj.appendChild(column);
		}
		return rowObj;
	}


/**************************************************************************/
/*************** function that are called to load table. ******************/
/**************************************************************************/

//var getWebSite = function(result){return addHREF( result.WEBSITE, result.WEBSITE ) };	//remove comments for agency master project
var getAddress = function(result){return result.ADDRESS};
var getCity = function(result){return result.CITY};
var getState = function(result){return result.STATE};
var getZip = function(result){return result.ZIP};
var getLOB = function(result){return result.LOB};
var getPhone = function(result){return formatPhoneNumber(result.PHONE)};
var getCompanyName = function(result)
{
	if(result.EMAIL.match("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$"))
	{
		str = "<a href='mailto:"+result.EMAIL+"'>"+result.COMPANYNAME+"</A>";
	}
	else
	{
		str = result.COMPANYNAME;
	}
	return str
};
var getMap = function(result)
{
	var url = 'http://maps.yahoo.com/maps_result?newFL=Use+Address+Below&addr=' + result.ADDRESS + '&csz=' + result.CITY + '%2C+' + result.ZIP + '&.intl=us&name=&lat=&lon=&srchtype=a&qty=&new=1&trf=0&getmap=Get+Map'
	
	return addHREF( url, "Get Map");
}

function addHREF(url, str)
{
	var a = document.createElement("a");
	a.setAttribute("href", url);
	a.setAttribute("target", "_blank");
	a.innerHTML = str;
	return a
}

function formatPhoneNumber(num)
{
	var prefix = num.substring(0,3);
	var suffix = num.substring(3,6);
	var postfix = num.substring(6,10);
	var str = "(" + prefix + ") " + suffix + "-" + postfix;
	return str;
}
