/*****************************************************************************
 * onload / unload functions
 ****************************************************************************/	

function init(e) {
	// quit if this function has already been called
	if (arguments.callee.done) return;

	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;
	
	/* 
	 * Table row highlighting 
	 */
	//var myTR = document.getElementsByTagName('tr');
	//for (var i=0;i<myTR.length;i++) {
	//	if (i%2) {myTR[i].className = 'rowTint';}
	//}

	/* Fix Me */
	//switchDivDisplay('fix_me');

	/*
	 * Style Setup
	 */
  // NEXT_REV: Disabled flavor changing, should we enalbe again?
  // var cookie = readCookie("style");
  //   var title = styles.inArray(cookie) ? cookie : getPreferredStyleSheet();
  //   setActiveStyleSheet(title,'/images');

	/*
	 * View Setup
	 */
  // var viewCookie = readCookie("view");
  // var viewTitle = viewCookie ? viewCookie : getPreferredView(viewsYUI);
  // setActiveView(viewTitle,viewsYUI);
	
}

function unload(e) {
	/* Set flavor cookie */
	var title = getActiveStyleSheet();
	createCookie("style", title, 365);
	
	/* Set view */
	var viewTitle = getActiveView(viewsYUI);
	createCookie("view",viewTitle);
}

/*****************************************************************************
 * Arrays
 ****************************************************************************/

Array.prototype.inArray = function (value)
// Returns true if the passed value is found in the
// array.  Returns false if it is not.
{
    var i;
    for (i=0; i < this.length; i++) {
        // Matches identical (===), not just similar (==).
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};	

/*****************************************************************************
 * Forms
 ****************************************************************************/
 
// Change county value and refresh town list
function chgcounty(){
	//document.forms["frm"].submit();
	var d = document;	
	MM_goToURL('parent','<?php $tmp = preg_replace("/(\?)county=[0-9]+/","$1",$_SERVER[REQUEST_URI]); $tmp = preg_replace("/(&)county=[0-9]+/","",$tmp); echo $tmp; if(substr_count($_SERVER[REQUEST_URI],"?")==0) echo "?"; else echo "&"; ?>county='+d.search["county"].options[d.search["county"].selectedIndex].value);
	return document.MM_returnValue;
}

function chooseAction(){
	for (i=document.research.searchAction.length-1; i > -1; i--) {
		if (document.research.searchAction[i].checked)
		myOption = i;
	}
	if(myOption == 0)
		document.research.action = "/research/markettrends.php";
	else if (myOption == 1)
		document.research.action = "/search/towndetails.php";
	else
		document.research.action = "/selling/homesvalue.php";
}

function fillSelectFromJSON(receiver,element){
    var box = $(element);
		var obj = json_decode(receiver.responseText);
    box.options.length = 0;
    var opts = obj.options;
    for( var i=0; i<opts.length; i++ ) {
        box.options[i] = new Option(opts[i].text,opts[i].value,null,false);
    }
}

/*****************************************************************************
 * Form Validation
 ****************************************************************************/
 
// Script to validate the search module
function validateSearch(){
	var retVal = true;
	var errMsg = "The form has encountered the following errors:\n";
	// Validate that at least one town has been selected
	if (document.search.searchTown1.options[document.search.searchTown1.selectedIndex].text == "Select a town" &&
		document.search.searchTown2.options[document.search.searchTown2.selectedIndex].text == "Select a town" &&
		document.search.searchTown3.options[document.search.searchTown3.selectedIndex].text == "Select a town" ){
		retVal = false;
		errMsg += "  - HomeFinder: Please select at least one town.\n";
	}
	// If yearbuilt is specified with "before" or "after" then a year must be given
	if (document.search.searchTime.options[document.search.searchTime.selectedIndex].text == "Before" || 
		document.search.searchTime.options[document.search.searchTime.selectedIndex].text == "After"){
		if (document.search.searchYear.options[document.search.searchYear.selectedIndex].text == 0){
			retVal = false;
			errMsg += "  - HomeFinder: Please select a year for year built.\n";
		}
	}
	// Validate That at least one Property Type is selected
	if (!document.search.searchPTSF.checked && 
		!document.search.searchPTCN.checked && 
		!document.search.searchPTRN.checked && 
		!document.search.searchPTMU.checked && 
		!document.search.searchPTLA.checked){
		retVal = false;
		errMsg += "  - HomeFinder: Please select at least one Property Type.\n";
	}
	// if there were errors then alert the user and return false
	if (!retVal){
		alert(errMsg);
		return false
	}
	return true;
}

function validateResearch(){
	var retVal = true;
	var errMsg = "The form has encountered the following errors:\n";
	// Validate that at least one town has been selected
	if (document.research.searchTown1.options[document.research.searchTown1.selectedIndex].text == "Select a town"){
		retVal = false;
		errMsg += "  - Please select at least one town.\n";
	}
	// if there were errors then alert the user and return false
	if (!retVal){
		alert(errMsg);
		return false
	}
	return true;
}

function validatePassword(){
	var retVal = true;
	var errMsg = "The form has encountered the following errors:\n";
	// Validate that at least one town has been selected
	if (document.changePassword.newPassword1.value != document.changePassword.newPassword2.value ){
		retVal = false;
		errMsg += "  - Passwords must match.\n";
	}
	// if there were errors then alert the user and return false
	if (!retVal){
		alert(errMsg);
		return false
	}
	return true;
}

/*****************************************************************************
 * JSON
 ****************************************************************************/

function json_decode(txt){
    try{
        return eval('('+txt+')');
    }catch(ex){}

}

/*****************************************************************************
 * CSS Manipulation
 ****************************************************************************/

/* change the class of a div */
function changeDivClass(id, newClass) {
	var identity = document.getElementById(id);
	identity.className=newClass;
}

function getDivClass(id) {
	var identity = document.getElementById(id);
	if(identity)
		return identity.className;
	return false;
}

function setDivId(id, newId) {
	var identity = document.getElementById(id);
	if(identity)
		return identity.id = newId;
	return false;
}

function getDivId(id) {
	var identity = document.getElementById(id);
	if(identity)
		return identity;
	return false;
}

function switchDivClass(id,c1,c2) {
	var i=document.getElementById(id);
	if(i.className == c1)
		return i.className = c2;
	if(i.className == c2)
		return i.className = c1;
	else
		return i.className;
}

function changeDivDisplay(id, newDisplay) {
	i=document.getElementById(id);
	if(i){
		i.style.display=newDisplay
	}
}

function switchDivDisplay(pass) {
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++){
		if(divs[i].id.match(pass) || divs[i].className.match(pass)){
			if (document.getElementById)
				if(divs[i].style.display=="none")
					divs[i].style.display=""
				else
					divs[i].style.display="none";
			else
				if (document.layers) // Netscape 4
					if(document.layers[divs[i]].display == 'none')
						document.layers[divs[i]].display = '';
					else
						document.layers[divs[i]].display = 'none';
				else // IE 4
					if(document.all.hideShow.divs[i].display == 'none')
						document.all.hideShow.divs[i].display = '';
					else
						document.all.hideShow.divs[i].display = 'none';
		}
	}
}

/* Doesn't display initially hidden divs
function switchDivVis(pass) {
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++){
		if(divs[i].id.match(pass) || divs[i].className.match(pass)){
			if (document.getElementById)
				if(divs[i].style.visibility=="hidden")
					divs[i].style.visibility="visible"
				else
					divs[i].style.visibility="hidden";
			else
				if (document.layers) // Netscape 4
					if(document.layers[divs[i]].visibility == 'hidden')
						document.layers[divs[i]].visibility = 'visible';
					else
						document.layers[divs[i]].visibility = 'hidden';
				else // IE 4
					if(document.all.hideShow.divs[i].visibility == 'hidden')
						document.all.hideShow.divs[i].visibility = 'visible';
					else
						document.all.hideShow.divs[i].visibility = 'hidden';
		}
	}
}
*/


/*****************************************************************************
 * Popups
 ****************************************************************************/

function showPopup(p){
	centerDiv(p);
	changeDivClass("doc","ot-950 dim");
	//switchDivDisplay("main");
	changeDivClass(p,"vis_vis");
}

function hidePopup(p){
	changeDivClass("doc","ot-950");
	//switchDivDisplay("main");
	changeDivClass(p,"vis_hid");
}

/*****************************************************************************
 * Style Switcher
 ****************************************************************************/

function setActiveStyleSheet(title,photoPath) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
	/* Also Change Logo Photo */
	MM_swapImage('logo','',photoPath+'/'+title+'/logo.gif',1);
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}


/*****************************************************************************
 * View Settings - Sets the style to use for the screen resolution 
 ****************************************************************************/

function getActiveView(views) {
	for (i=0; i<views.length; ++i) {
		var id = document.getElementById(views[i]);
		if(id)
			return views[i];
  }
	return getPreferredView(views);
}

// The preferred view is the first one
function getPreferredView(views) {
	return views[0];
}

function setActiveView(newId,views)	{
	return setDivId(getActiveView(views),newId);
}

/*****************************************************************************
 * Cookies
 ****************************************************************************/

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}


/*****************************************************************************
 * Table row formating
 ****************************************************************************/

function colorRows() {
	var myTR = document.getElementsByTagName('tr');
	for (var i=0;i<myTR.length;i++) {
		if (i%2) {
			myTR[i].className = 'rowTint';
		}
	}
}
		
		
/*****************************************************************************
 * Google Maps
 ****************************************************************************/

/* show basic map with center pointer at given lat lon */
function showMapB(lon,lat) {
	var map = new GMap(document.getElementById("map"));
	var point = new GPoint(lon,lat);
	map.centerAndZoom(point, 3);
	var marker = new GMarker(point);
	map.addOverlay(marker);
}


/*****************************************************************************
 * Positioning and Page Resizing
 ****************************************************************************/

// Copied code from: http://www.bugimus.com/gurus/center_div.html
/*
onload=initialize   // call initialize() when page loads
onresize=rePos      // call rePos() whenever page is resized

// Opera doesn't have an onresize event so you have to call rePos all the time.
if(OPA) setInterval("rePos()",500)

function initialize() {
	if(NN4) myObj=document.centerDiv
	else myObj=document.getElementById("centerDiv").style
	rePos()
}

w=100   // width of the div
h=100   // height of the div
function rePos() {
	// compute center coordinate
	if(NN4||NN6) {
		xc=Math.round((window.innerWidth/2)-(w/2))
		yc=Math.round((window.innerHeight/2)-(h/2))
	} else {
		xc=Math.round((document.body.clientWidth/2)-(w/2))
		yc=Math.round((document.body.clientHeight/2)-(h/2))
	}
	// reposition div
	if(this.NN4) {
		myObj.moveTo(xc,yc)
	} else {
		myObj.left = xc + "px"
		myObj.top = yc + "px"
	}
}
*/

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function getWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
	
	return [ myWidth, myHeight ];
}

function centerDiv(id) {
	// Identify div by id
	if(NN4) i=document.id
	else i=document.getElementById(id).style
	
	// Get DIV's dimensions
	w = 320;
	h = 100;
	
	// Get scroll top
	st = getScrollXY();
	
	// Get window size
	ws = getWindowSize();
	
	// compute center coordinate
	
	xc=Math.round((ws[0] / 2)-(w / 2));
	yc=Math.round(st[1] + (ws[1] / 2) - (h / 2));
	
	
	// reposition div
	if(this.NN4) {
		i.moveTo(xc, yc)
	} else {
		i.left = xc + "px"
		i.top = yc + "px"
	}
}

/*****************************************************************************
 * Misc Functions
 ****************************************************************************/
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

/*****************************************************************************
 * Image Swap - TH
 ****************************************************************************/

function swapImages(id, image1, image2)
{
  i=document.getElementById(id);

  if (i.src == image1)
  {
    i.src = image2;
  }
  else
  {
    i.src = image1;
  }
}