// JavaScript Document
function CallGeoCodeAddressMatching(passed_param) {
	
	if (document.getElementById('btnGeoCode').value == 'OK')
	{
		//check if there were address options listed
		var listedoption = checkIfOptionReturned();
		//check if an address option has been selected
		var found_it
		for (var i=0; i<document.frmaddtocart.selectedAddress.length; i++)  {
		//for (var i=0; i<document.forms[0].selectedAddress.length; i++){
			if (document.frmaddtocart.selectedAddress[i].checked)  {
				found_it = document.frmaddtocart.selectedAddress[i].value //set found_it equal to checked button's value
			} 
		}
		//if address options listed and no option selected
		if(listedoption == 'optionListed')
		{
			if(found_it == null)
			{ //if found_it is NOT equal to null, a button HAS been checked
				alert('Please select a listed option to continue.')
			}
			else
			{
			//hide address options returned
			document.getElementById('verifiedAddressSelection').style.display = 'none';
			//change button value
			var blank
			document.getElementById('btnGeoCode').value = ChangeBtnGeoCode(document.getElementById('btnGeoCode').value, blank);
			}
		}
		else
		{
			//hide address options returned
			document.getElementById('verifiedAddressSelection').style.display = 'none';
			//change button value
			document.getElementById('btnGeoCode').value = ChangeBtnGeoCode(document.getElementById('btnGeoCode').value, 'notverified');
		}
	}
	else if(document.getElementById('btnGeoCode').value == 'Address Verified')
	{
		alert('Address has been verified!');
	}
	else if(document.getElementById('btnGeoCode').value == 'Verify Address')
	{
		showDiv();
		xmlHttp=GetXmlHttpObject()
		passed_param = passed_param + '< US'//"1433 West Loop South, Houston, Texas, 77027-9506, USA"
		//alert(passed_param);
		// Change application version url here
		var byz_av_url = "http://mlbs.net/nacgeoservicesv5.0/xmlgeocode.aspx?Address="+passed_param+"&SuppressError=yes"	
	
		var url = "byz_geo_addressverification_proxy.asp"
		url=url+"?url="+byz_av_url //ASP QUERYSTRING PARAMETRER
		
		if (xmlHttp==null)
		{
			alert ("Your browser does not support some functions on this site, please use Internet Explorer!");
			return;
		} 
		
		//SEND PARAMETERS TO ASP
		url=url+"&sid="+Math.random();
		//alert(url);
		xmlHttp.onreadystatechange=stateChanged;
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}
}

function stateChanged() 
{ 
	if (xmlHttp.readyState==4)
	{ 
		//change button value
		var blank
		
		//deselect all radio buttons
		document.getElementById('selectedAddress').checked = false;
		document.getElementById('selectedAddress1').checked = false;
		document.getElementById('selectedAddress2').checked = false;
		
		var response  = xmlHttp.responseXML.documentElement;//get response sent from remote site
		hideDiv();//hide progress indicator
		//set selection text an null
		document.getElementById('selection').innerHTML = '';
		document.getElementById('selection1').innerHTML = '';
		document.getElementById('selection2').innerHTML = '';
		
		//hide selection list container
		document.getElementById('selectioncontainer').style.display = 'none';
		document.getElementById('selectioncontainer1').style.display = 'none';
		document.getElementById('selectioncontainer2').style.display = 'none';
		document.getElementById('selectioncontainer3').style.display = 'none';
		
		//get selected city
		var City = document.getElementById('city').selectedIndex;
			
		//show address options returned
		document.getElementById('verifiedAddressSelection').style.display = '';
		
		//collect returned data in variables
		//zipcode verification results
		var Message2 = response.getElementsByTagName('Message')[2].firstChild.data;
		if((Message2 != 'No Result') && (response.getElementsByTagName('Street')[2].firstChild))
		{
			var InputAddress2 = response.getElementsByTagName('InputAddress')[2].firstChild.data;
			var Entity2 = response.getElementsByTagName('Entity')[2].firstChild.data;
			var AllMatches2 = response.getElementsByTagName('AllMatches')[2].firstChild.data;
			var Latitude2 = response.getElementsByTagName('Latitude')[2].firstChild.data;
			var Longitude2 = response.getElementsByTagName('Longitude')[2].firstChild.data;
			
			
			//get zipcode fro input address
			var mySplitResult = InputAddress2.split(",");
			var inputtedZipcode = mySplitResult[3]

			inputtedZipcode = trimAll(inputtedZipcode)
			Entity2 = trimAll(inputtedZipcode)
		}
		
		
		//full address verification results
		var Message = response.getElementsByTagName('Message')[0].firstChild.data;
		if((Message != 'No Result') && (response.getElementsByTagName('Street')[0].firstChild))
		{
			var InputAddress = response.getElementsByTagName('InputAddress')[0].firstChild.data;
			var Entity = response.getElementsByTagName('Entity')[0].firstChild.data;
			var AllMatches = response.getElementsByTagName('AllMatches')[0].firstChild.data;
			var Latitude = response.getElementsByTagName('Latitude')[0].firstChild.data;
			var Longitude = response.getElementsByTagName('Longitude')[0].firstChild.data;
		}
		
		//first line of address verification results
		var Message1 = response.getElementsByTagName('Message')[1].firstChild.data;
		if((Message1 != 'No Result') && (response.getElementsByTagName('Street')[1].firstChild))
		{
			var InputAddress1 = response.getElementsByTagName('InputAddress')[1].firstChild.data;
			var Entity1 = response.getElementsByTagName('Entity')[1].firstChild.data;
			var AllMatches1 = response.getElementsByTagName('AllMatches')[1].firstChild.data;
			var Latitude1 = response.getElementsByTagName('Latitude')[1].firstChild.data;
			var Longitude1 = response.getElementsByTagName('Longitude')[1].firstChild.data;
			
			//button change from 'Verify Address' to 'OK' as address verification in progress
			blank = ''
			document.getElementById('btnGeoCode').value = ChangeBtnGeoCode(document.getElementById('btnGeoCode').value, blank);
			
			//list returned address options
			document.getElementById('nomatchfoundcontainer').innerHTML = 'Please select an option below and click OK to continue...';
			
			document.getElementById('selectioncontainer').style.display = '';
			document.getElementById('selection').innerHTML = '';
			document.getElementById('selection').innerHTML = Entity;
			document.getElementById('selectedAddress_line1').value = response.getElementsByTagName('Street')[0].firstChild.data;
			document.getElementById('selectedAddress_city').value = response.getElementsByTagName('City')[0].firstChild.data;
			document.getElementById('selectedAddress_zipcode').value = response.getElementsByTagName('ZIP')[0].firstChild.data;
			document.getElementById('selectedAddress_lat').value =Latitude;
			document.getElementById('selectedAddress_long').value = Longitude;
			document.getElementById('selectedAddress_msg').value = Message;
			
			Entity = trimAll(Entity)
			Entity1 = trimAll(Entity1)
			if ((Entity1 != Entity) && (response.getElementsByTagName('Street')[1].firstChild))
			{
				document.getElementById('selectioncontainer1').style.display = '';
				document.getElementById('selection1').innerHTML = '';
				document.getElementById('selection1').innerHTML = Entity1;	
				document.getElementById('selectedAddress1_line1').value = response.getElementsByTagName('Street')[1].firstChild.data;
				document.getElementById('selectedAddress1_city').value = response.getElementsByTagName('City')[1].firstChild.data;
				document.getElementById('selectedAddress1_zipcode').value = response.getElementsByTagName('ZIP')[1].firstChild.data;
				document.getElementById('selectedAddress1_lat').value =Latitude1;
				document.getElementById('selectedAddress1_long').value = Longitude1;
				document.getElementById('selectedAddress1_msg').value = Message1;
			}

			document.getElementById('selectioncontainer3').style.display = '';
			document.getElementById('selection3').innerHTML = 'Ignore listed option(s)<br/>';
			document.getElementById('selectedAddress3_line1').value = document.getElementById('propertyaddress2').value;
			document.getElementById('selectedAddress3_city').value = document.getElementById('city').value;
			document.getElementById('selectedAddress3_zipcode').value = document.getElementById('zipcode').value;
			document.getElementById('selectedAddress3_lat').value =Latitude2;
			document.getElementById('selectedAddress3_long').value = Longitude2;
			document.getElementById('selectedAddress3_msg').value = Message2;
		}
		else
		{
			//button change
			blank = 'noresult'
			document.getElementById('btnGeoCode').value = ChangeBtnGeoCode(document.getElementById('btnGeoCode').value, blank);
			document.getElementById('nomatchfoundcontainer').innerHTML = 'No Match Found for address';	
			document.getElementById('selectioncontainer2').style.display = '';
			document.getElementById('selection2').innerHTML = '';
			toggleAddresses2();
			if(Message2 != 'No Result')
			{
				if(inputtedZipcode==Entity2)
				{
					document.getElementById('selection2').innerHTML = 'Match Found for Zipcode - '+inputtedZipcode+', Please check address entered<br/>';
				}
				else
				{
					document.getElementById('selection2').innerHTML = 'Nearest Match Found for Zipcode - '+Entity2+'<br/>';
				}
			}			
		}
		
		
		
		
	}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
	// Firefox, Opera 8.0+, Safari
	xmlHttp=new XMLHttpRequest();
}
catch (e)
{
	// Internet Explorer
	try
	{
	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
	xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	}
	return xmlHttp;
}


//PROGRESS INDICATOR FUNCTIONS
function showDiv() 
{
	//setTimeout('document.images["myAnimatedImage"].src="loading.gif"', 200); 
	document.getElementById('myHiddenDiv').style.display ="";
}
function hideDiv() 
{
	document.getElementById('myHiddenDiv').style.display ="none";  
} 

function trimAll(sString)
{
	if(sString)
	{
		while (sString.substring(0,1) == ' ')
		{
			sString = sString.substring(1, sString.length);
		}
		while (sString.substring(sString.length-1, sString.length) == ' ')
		{
			sString = sString.substring(0,sString.length-1);
		}
	}
	return sString;
}

function ChangeBtnGeoCode(btnGeoCode, reverseForward)
{	
	document.getElementById('propertyaddress2').disabled = false;
	document.getElementById('city').disabled = false;
	document.getElementById('zipcode').disabled = false;
	if (btnGeoCode == 'OK')
	{
		document.getElementById('propertyaddress2').disabled = false;
		document.getElementById('city').disabled = false;
		document.getElementById('zipcode').disabled = false;
		if(reverseForward == 'notverified')
		{
			return 'Verify Address';
		}
		else
		{
			return 'Address Verified';
		}
	}
	else if(btnGeoCode == 'Verify Address')
	{
		if (reverseForward == 'reverse')
		{
			document.getElementById('propertyaddress2').disabled = false;
			document.getElementById('city').disabled = false;
			document.getElementById('zipcode').disabled = false;
			return 'Verify Address';
		}
		else if(reverseForward=='noresult')
		{
			document.getElementById('propertyaddress2').disabled = false;
			document.getElementById('city').disabled = false;
			document.getElementById('zipcode').disabled = false;
			return 'Address Verified';
		}
		else
		{
			document.getElementById('propertyaddress2').disabled = true;
			document.getElementById('city').disabled = true;
			document.getElementById('zipcode').disabled = true;
			return 'OK';
		}
	}
	else if(btnGeoCode == 'Address Verified')
	{
		return 'Verify Address';
	}
	else if(btnGeoCode == '')
	{
		return 'Verify Address';
	}
}

function setButtonToVerify(reverseForward)
{
	//change button value
	document.getElementById('btnGeoCode').value = ChangeBtnGeoCode(document.getElementById('btnGeoCode').value, reverseForward);
}



function toggleAddresses(which)
{
	var PropertyAdress = document.getElementById('featurenum1').value
	var PropertyCity
	var PropertyZip = document.getElementById('featurenum6').value
	var PropertyUnit
	
	//set verify address form fields to selected option
	document.getElementById('propertyaddress2').value = document.getElementById('selectedAddress'+which+'_line1').value;
	document.getElementById('zipcode').value = document.getElementById('selectedAddress'+which+'_zipcode').value;
	//if dropwdown the use serach function, else pass values
	if(document.getElementById('city').options)
	{
		searchSel('city', which)
	}
	else
	{
		document.getElementById('city').value = document.getElementById('selectedAddress'+which+'_city').value;
	}
	
	//set features values to selected option
	if(document.getElementById('featurenum4'))
	{
		PropertyCity = document.getElementById('featurenum4').value
		document.getElementById(PropertyCity).selectedIndex = document.getElementById('city').selectedIndex;
	}
	if(document.getElementById('featurenum73'))
	{
		PropertyCity = document.getElementById('featurenum73').value
		document.getElementById(PropertyCity).value = document.getElementById('city').value;
	}
	
	if(document.getElementById('featurenum74'))
	{
		PropertyUnit = document.getElementById('featurenum74').value
		document.getElementById(PropertyUnit).value = document.getElementById('unitorsuite').value;
	}
	
	document.getElementById(PropertyAdress).value = document.getElementById('selectedAddress'+which+'_line1').value;
	document.getElementById(PropertyZip).value = document.getElementById('selectedAddress'+which+'_zipcode').value;
	//set latittude and longitude values
	document.getElementById('productlatitude').value = document.getElementById('selectedAddress'+which+'_lat').value
	document.getElementById('productlongitude').value = document.getElementById('selectedAddress'+which+'_long').value;
	document.getElementById('addressverificationmessage').value = document.getElementById('selectedAddress'+which+'_msg').value;	
	setLegalDescription()
}



function toggleAddresses2()
{
	var PropertyAdress = document.getElementById('featurenum1').value
	var PropertyCity
	var PropertyZip = document.getElementById('featurenum6').value
	
	//set verify address form fields to selected option
	if(document.getElementById('featurenum4'))
	{
		PropertyCity = document.getElementById('featurenum4').value
		document.getElementById(PropertyCity).selectedIndex = document.getElementById('city').selectedIndex;
	}
	if(document.getElementById('featurenum73'))
	{
		PropertyCity = document.getElementById('featurenum73').value
		document.getElementById(PropertyCity).value = document.getElementById('city').value;
	}
	
	if(document.getElementById('featurenum74'))
	{
		PropertyUnit = document.getElementById('featurenum74').value
		document.getElementById(PropertyUnit).value = document.getElementById('unitorsuite').value;
	}
	document.getElementById(PropertyAdress).value = document.getElementById('propertyaddress2').value;
	document.getElementById(PropertyZip).value = document.getElementById('zipcode').value;
	//set latittude and longitude values
	document.getElementById('productlatitude').value = ''
	document.getElementById('productlongitude').value = '';
	document.getElementById('addressverificationmessage').value = 'No Result';	
	setLegalDescription()
}



function setLegalDescription()
{
	if (document.getElementById('featurenum2'))
	{
		var LegalDescr = document.getElementById('featurenum2').value
		document.getElementById(LegalDescr).value = document.getElementById('propertyaddress1').value;
	}
}



function checkIfOptionReturned()
{
	var option1 = document.getElementById('selectioncontainer').style.display
	var option2 = document.getElementById('selectioncontainer1').style.display
	var option3 = document.getElementById('selectioncontainer3').style.display
	if((option1 == '') || (option2 == '') || (option3 == ''))
	{
		return 'optionListed'
	}
	else
	{
		return 'noptionListed'
	}
}


function IsAddressVerified()
{
	if(document.getElementById('btnGeoCode').value == 'Verify Address')
	{
		alert('Please verify address entered to continue.');
		document.getElementById('propertyaddress1').focus();
		return false;
	}
	
	if(document.getElementById('btnGeoCode').value == 'OK')
	{
		alert('Please complete address verification to continue.');
		document.getElementById('propertyaddress1').focus();
		return false;
	}
}


function searchSel(realitems, realtxt) {
	var input=document.getElementById('selectedAddress'+realtxt+'_city').value.toLowerCase();
	var output=document.getElementById(realitems).options;
	var found = 0
	var thelength = output.length
	var inputTitle = titleCase(input);
    var inputUpper = input.toUpperCase()
	for(var i=0;i<output.length;i++) 
	{
		if((output[i].value.indexOf(input)==0)||(output[i].value.indexOf(inputUpper)==0)||(output[i].value.indexOf(inputTitle)==0))
		{
			output[i].selected=true;
			found = 1
		}
	}
	if(found == 0)
	{
		input = titleCase(input);
		document.getElementById('city').disabled = false;
		document.getElementById('city').options[thelength] = new Option(input + " - Call for $Price$", input);
		document.getElementById('city')[thelength].selected=true;
		document.getElementById('city').disabled = true;
	}
}

function titleCase(original)
	{
		var o_split = original.split(" ");
		//this probably isn't a complete list of words that shouldn't be capitalized
		var special_words = new Array('and', 'the', 'to', 'for', 'is', 'in', 'a', 'at', 'an', 'from', 'by', 'if', 'of');
		for (i=0;i<o_split.length;i++) {
			if (i == 0) {
				//always capitalize the first word
				o_split[i] = (o_split[i].substring(0,1)).toUpperCase() + o_split[i].substring(1);
			}
			else if(special_words.indexOf(o_split[i]) < 0) { 
			  	o_split[i] = (o_split[i].substring(0,1)).toUpperCase() + o_split[i].substring(1);
			}
		}
		retval = o_split.join(' ');
		return retval;
	}


