/*****************************************************************************************************
* Easy Javascript Validation by Daniel Boorn
* Copyright 2006, All Rights reserved by Daniel Boorn
* Contact: daniel.boorn@gmail.com - wwww.dboorn.com
* In any form element add the following form attributes to validate
* required ="yes"
* validate = { "int", "float", "text", "email" }
* message = "Error Message for Element"
* Example: <input type="text" validate="int" message="Please enter valid zip code" name="zip">
*
* It is required that you add the following to any submit button
*     onClick="validate(this.form); return document.formSubmit;"
******************************************************************************************************/

	var timeoutId = "";
	var timeoutId2 = "";	
	var errorFormFields;
	var colorArray = new Array('#FF0000','#EE0000','#DD0000','#CC0000','#BB0000','#AA0000','#990000','#880000','#770000','#660000','#550000','#440000','#330000','#220000','#110000', "#C6C6C6");	

	function validate(form){
		errorFormFields = new Array();
		
		var error = "";
		//for each form element
		for(var i=0; i<form.length; i++){
			var element = form[i];
			element.style.backgroundColor="";
			element.style.border = "1px solid #C6C6C6";
			//if form field not required 
			if(!element.disabled){
				//if required
				if(element.getAttribute("required") == "yes"){
					//if form element if empty
					if(!valid(element.value,element.getAttribute("validate"),element)){
						error += element.getAttribute("message") + "\r\n";	
						errorFormFields.push(i);
						element.style.backgroundColor = "#CCFFFF";
					}
				}
				else if(element.getAttribute("validate") != ""){
					//if validation is need by not required
					if(element.value != ""){
						if(!valid(element.value,element.getAttribute("validate"),element))
							error += element.getAttribute("message") + "\r\n";
					}
				}
			}
		}
		
		//Alert Error
		if(error != ""){
			form[errorFormFields[0]].focus();
			alert(error);			
			changeColor(form.id, 0);
		}
		else{
			form.submit();
		}
			
			
	}
	
	function validateNs(form){
		errorFormFields = new Array();
		
		var error = "";
		//for each form element
		for(var i=0; i<form.length; i++){
			var element = form[i];
			element.style.backgroundColor="";
			element.style.border = "1px solid #C6C6C6";
			//if form field not required 
			if(!element.disabled){
				//if required
				if(element.getAttribute("required") == "yes"){
					//if form element if empty
					if(!valid(element.value,element.getAttribute("validate"),element)){
						error += element.getAttribute("message") + "\r\n";	
						errorFormFields.push(i);
						element.style.backgroundColor = "#CCFFFF";
					}
				}
				else if(element.getAttribute("validate") != ""){
					//if validation is need by not required
					if(element.value != ""){
						if(!valid(element.value,element.getAttribute("validate"),element))
							error += element.getAttribute("message") + "\r\n";
					}
				}
			}
		}
		
		//Alert Error
		if(error != ""){
			form[errorFormFields[0]].focus();
			alert(error);			
			changeColor(form.id, 0);
		}
		else{
			return true;
		}
			
			
	}	
	
	function changeColor(formId, colorId){
		
		form = document.getElementById(formId);
		
		for(var i=0;i<errorFormFields.length;i++){
//			alert(form[errorFormFields[i]]);
			if(colorArray[colorId] == "")
				form[errorFormFields[i]].style.border = "";			
			else
				form[errorFormFields[i]].style.border = "2px solid "+colorArray[colorId];
			
		}
		
		if(timeoutId != "")
			window.clearTimeout(timeoutId);
		
		colorId++;
		if(colorId<colorArray.length)
			timeoutId = window.setTimeout("changeColor('"+formId+"',"+colorId+")",300);
	}


	function changeColor2(divId, colorId){
		div = document.getElementById(divId);
		div.style.display = "";
		div.style.border = "2px solid "+colorArray[colorId];	
		if(timeoutId2 != "")
			window.clearTimeout(timeoutId2);		
		colorId++;
		if(colorId<colorArray.length)
			timeoutId2 = window.setTimeout("changeColor2('"+divId+"',"+colorId+")",300);
	}


	function valid(value,type,element){
		if(value == "")
			return false;
			
		switch(type){
			case "int":
				if(isNaN(parseInt(value)))
					return false;
				break;
			case "float":
				if(isNaN(parseFloat(value)))
					return false;
				break;
			case "email":					
				var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				if (!filter.test(value))
					return false;
				break;
			case "date(YYYY-MM-DD)":
				var filter  = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
				if (!filter.test(value))
					return false;
				break;				
			case "checked":
				if(!element.checked)
					return false;
				break;
			case "phone":// 555-555-5555
				var filter  = /^[2-9]\d{2}-\d{3}-\d{4}$/;
				if (!filter.test(value))
					return false;
				break;			
			case "creditcard": // 4444-4444-4444-4444
				var filter  = /^(\d{4}[- ]){3}\d{4}|\d{16}$/;
				if (!filter.test(value))
					return false;
				break;
			case "expdate": // MM/YY
				var filter  = /^((0[1-9])|(1[0-2]))\/(\d{2})$/;
				if (!filter.test(value))
					return false;
				break;				
				
			default://string
				break;
		}
		return true;
	}	

    function check_length(maxchars,message,div_id)
    {
    	var len = message.value.length;

        if(len > maxchars){
        	message.value = message.value.substr(0,maxchars);
        	len = maxchars;
        }

        document.getElementById(div_id).innerHTML = maxchars - len;
    }

	/*######################################################################################
# PHP STORE LOCATOR SCRIPT (phpscriptindex.com, phpstorelocatorscript.com)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
# NOTICE: (C) DB DESIGN 2007, DO NOT COPY OR DISTRIBUTE CODE WITH OUT PERMISSION
# Code is NOT open source and subject to a software license agreement. You are
# allowed to modify the software to meet the needs of your domain in accordance with
# the software license agreement.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
# SUPPORT: phpstorelocatorscript.com, phpscriptindex.com/support/
# EMAIL SUPPORT: phpsales@gmail.com Monday - Friday 10:00am to 5:00pm EST
######################################################################################*/

function stopRKey(evt) { //http://www.mediacollege.com/internet/javascript/form/disable-return.html
	var evt  = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text")) { return false; }
}
document.onkeypress = stopRKey;

function postcodeLookUp(form){
	var node = new geoNode();
	node.returnHandler = function(result){ 
		form.lat.value = result.lat;
		form.lng.value = result.lng;
		form.submit();
	};
	node.geocode(form.postcode.value+', '+form.countryIso.value);
}

function locationLookUp(form){
	var node = new geoNode();
	node.returnHandler = function(result){ 
		form.lat.value = result.lat;
		form.lng.value = result.lng;
		form.submit();
	};
	var loc = form.location.value + ", " + form.countryIso.value;
//	alert(loc);
	node.geocode(loc);	
}

function townLookUp(form){
	var node = new geoNode();
	node.returnHandler = function(result){ 
		form.lat.value = result.lat;
		form.lng.value = result.lng;
		form.town.value = result.city;
		form.state.value = result.region;
		form.submit();
	};
	var loc = form.town.value + " " + form.state.value + ", " + form.countryIso.value;
//	alert(loc);
	node.geocode(loc);	
}

function addressLookUp(form){
	if(form.fetchLL.checked){
		var node = new geoNode();
		node.returnHandler = function(result){ 
			form.latitude.value = result.lat;
			form.longitude.value = result.lng;
			form.fetchLL.checked = false;
			form.latitude.disabled = '';
			form.longitude.disabled = '';
			form.submit();
		};
		var loc = form.address.value + ", " + form.city.value + ", " + form.state.value + " " + form.zipcode.value
//		alert(loc);
	}else{
		form.submit();
	}
	node.geocode(loc);	
}

function geoNode(){
	this.gls = new GlocalSearch();
	this.returnHandler = function (latitude, longitude){ };
	this.parseResult = function(){ 
//		alert(this.gls.completionFailureDetails);
		if(this.gls.results[0]){
			this.returnHandler(this.gls.results[0]);
		}else{
			alert('Sorry your location was not found. Please uncheck *Fetch latitude and longitude automaticly using Google Geocoder* and click Save');
		}
	}
	this.geocode = function(loc){
		this.gls.setSearchCompleteCallback(this, this.parseResult);
		this.gls.execute(loc);
	}	
}

//<Script>

function toggleButton(button, propertyid, vars){
	var handler = function(html, xml){
		var result = parseInt(xml.getElementsByTagName("result")[0].firstChild.nodeValue);		
		if(result){
			button.value = xml.getElementsByTagName("value")[0].firstChild.nodeValue;
		}else{
			alert('Sorry, cannot update sold status at this time');
		}
	}
	ajax(vars, "manageoptions.php", handler);
}

function ge2(a, b, s){
	var j = a+"@"+b;
	return "<a class='"+s+"' href='mailto:"+j+"'>"+j+"</a>";
}


function ge(a, b, c, s){
	var j = a+"@"+b+"."+c;
	return "<a class='"+s+"' href='mailto:"+j+"'>"+j+"</a>";
}

function dump(obj){
	alert(obj);
	var str = "";
	for(var i in obj){
		str += i+"\n";
	}
	alert(str);
}

function voidr(){
}

function loadTab(tab, tabmenuId){
	var tabmenu = document.getElementById(tabmenuId);
	
	var tabs = tabmenu.getElementsByTagName('DIV');
	for(var i=0; i<tabs.length; i++){
		tabs[i].id = "";
	}
	
	tab.id = "on";
}

function sendForm(divId, form, page, loadingId){
	var sendVars = "";
	for(var i=0;i<form.elements.length;i++){
		if(!form.elements[i].disabled && form.elements[i].name != ""){
			sendVars += "&"+escape(form.elements[i].name)+"="+escape(form.elements[i].value);
		}
	}
	loadAjaxDiv(divId, page, sendVars, loadingId);
}

function removeSavedR(page, sendVars, redirect){
	var handler = function(text, xml){
		window.location=redirect;
	}
	ajax(sendVars, page, handler);
}

function loadAjaxDiv(divId, page, sendVars, loadingId){
	var loading = getObj(loadingId);
	if(loading) loading.style.display='';
	var div = getObj(divId);
	var handler = function(text,xml){
		if(loading!=null){
			loading.style.display='none';
		}
		var div = getObj(divId);
		try { 
			div.innerHTML = text; 
		}catch(e){ 
			alert(e); 
		} 
	} 
	ajax(sendVars, page, handler);
}

//********************************************
var drMap;
var gdir;
var geocoder = null;
var addressMarker;    

function setDirections(fromAddress, toAddress, locale) {
	document.getElementById("drOutDiv").style.display = '';		
	document.getElementById("directions").innerHTML = '';
	drMap = new GMap2(document.getElementById("drMap"));
	gdir = new GDirections(drMap, document.getElementById("directions"));
	GEvent.addListener(gdir, "error", handleErrors);		
	gdir.load("from: " + fromAddress + " to: " + toAddress, { "locale": locale });
}

function handleErrors(){
	if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS){
		document.getElementById("drOutDiv").style.display = 'none';		   
		alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
	}else if (gdir.getStatus().code == G_GEO_SERVER_ERROR){
		document.getElementById("drOutDiv").style.display = 'none';		   		   
		alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
	}else if (gdir.getStatus().code == G_GEO_MISSING_QUERY){
		document.getElementById("drOutDiv").style.display = 'none';		   		   			
		alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
	}else if (gdir.getStatus().code == G_GEO_BAD_KEY){
		document.getElementById("drOutDiv").style.display = 'none';		   		   		
		alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
	}else if (gdir.getStatus().code == G_GEO_BAD_REQUEST){
		document.getElementById("drOutDiv").style.display = 'none';		   		   			
		alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
	}else{ 
		document.getElementById("drOutDiv").style.display = 'none';		   		   					
		alert("Sorry. I'm unable to get directions for this address.");
	}
}


function selectOption(selectId, value){
	var obj = getObj(selectId);
	for(var i=0; i<obj.options.length; i++){
		if(obj.options[i].value==value){
			obj.options[i].selected = true;
			return;
		}
	}
}

function fetchCities(countyObj){
	form = countyObj.form;
	form.city.disabled=true;
	form.city.innerHTML = null;
	form.city.options[0] = new Option("-- All City, or Select County Above --","");
	if(countyObj.value=="") return; //cancel call	
	
	var vars = "act=fcities&cid="+escape(countyObj.value);
	document.getElementById("workingcounty").style.display='';	
	
	var handler = function(html, xml){
	document.getElementById("workingcounty").style.display='none';
		var result = parseInt(xml.getElementsByTagName("result")[0].firstChild.nodeValue);		
		if(result){
			var row = xml.getElementsByTagName("row");
			if(parseInt(xml.getElementsByTagName("totalrows")[0].firstChild.nodeValue)>0){
				form.city.innerHTML = "";
				form.city.options[0] = new Option("-- All Cities --","");				
				for(i=0;i<row.length;i++){
					form.city.options[form.city.length] = new Option(row[i].firstChild.nodeValue, row[i].getAttribute('value'));
				}
				form.city.disabled=false;
			}else{
				alert('No cities found for county.');
			}
		}else{
			alert('Unable to fetch cities.');
		}
	}	
	ajax(vars, "manageoptions.php", handler);
}

var popUpWin=0;
function popUpWindow(URLStr, left, top, width, height){
  if(popUpWin){
    if(!popUpWin.closed) popUpWin.close();
  }
  popUpWin = open(URLStr, 'popUpWin', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
}


function ch(spanId, formId){
	try{
		var span = document.getElementById(spanId);
	}catch (e){
		alert('Unable to change country. Please contact site owner. Error Message: Iso div id is invalid.');
		return;
	}
	try{
		var form = document.getElementById(formId);
	}catch (e){
		alert('Unable to change country. Please contact site owner. Error Message: Iso form id is invalid.');
	}
	span.style.display='none';
	form.countryIso.style.display = '';
	
}

//ajax function for w3c school tutorial
function ajax(sendVars, page, responceHandler){
  var xmlHttp;
  try{
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }catch (e){
    // Internet Explorer
    try{
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch (e){
      try{
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }catch (e){
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
    xmlHttp.onreadystatechange=function(){
      if(xmlHttp.readyState==4)
        {		
          responceHandler(xmlHttp.responseText, xmlHttp.responseXML);
        }
      }
    xmlHttp.open("POST",page,true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 	  	
    xmlHttp.send(sendVars);
}


function getObj(name){
	return document.getElementById(name);
}

function loadSchools(form){
	//e.g. http://www.schoolmatters.com/schools.aspx/q/page=sr/txt=myrtle$sp;beach/ust=SC/p=1/fp=1
	var url = "http://www.schoolmatters.com/schools.aspx/q/page=sr/txt=";
	url += form.city.value.replace(/ /, '$sp;');
	url += "/ust=";
	url += form.state.value;
	url += "/p=1/fp=1";
	popUpWindow(url, 10, 10, 800, 500);
}

function loadNeighborhoodinfo(form){
	var url = "http://www.bestplaces.net/search/default.aspx?q=";
	url += escape(form.city.value);
	popUpWindow(url, 10, 10, 850, 500);
}


