


/*  rets functions  */

function deploy_new_subdomain()
{
	var source = "dev";
	var destination = "";
}



function refresh_log( mls_name )
{
	if ( ! mls_name ) {
		return false;
	}
		// alert( mls_name );
		var url 				= site_url + "rets/read_property_log/" + mls_name; 
		var containerId 		= "log_inner_" + mls_name;
		var parameters 			= {};
		var onCompleteCallback 	= function(){};
		var messageString 		= $(containerId).innerHTML; // smooth update without blanking out
		
		ajax_update( containerId, url, parameters, onCompleteCallback, messageString );
		// alert( mls_name );
}

function truncate_records()
{
	var confirmed = confirm("Earning - this will destroy all property records. This cannot be undone. Proceed?");
	if ( confirmed ){
		var url 				= site_url + "rets/truncate_records"; 
		var containerId 		= "notices_container";
		var parameters  		= {};
		var onCompleteCallback 	= audit_all;
		var messageString 		= "<br />Deleting all listings...";
		
		ajax_update( containerId, url, parameters, onCompleteCallback, messageString );

	} else {
		alert("Cancelled - No action was taken.");
	}
}

function rebuild_specific_records( mls_numbers_array, mls_service )
{
	if( mls_numbers_array.length>0 && mls_service ) {
		var url 				= site_url + "rets/delete_records_by_mls_number"; 
		var containerId 		= "notices_container";
		var parameters  		= { 'mls_numbers[]': mls_numbers_array,
			 						mls_name: mls_service };
		var onCompleteCallback 	= function(){ audit_records(mls_service); };
		var messageString 		= "<br />Deleting listings...";
		
		ajax_update( containerId, url, parameters, onCompleteCallback, messageString );

	} else {
		alert("Warning, no input received:  No action was taken.");
	}
}

function delete_specific_records( mls_numbers_array, mls_service )
{
	if( mls_numbers_array.length>0 && mls_service ) {
		var url 				= site_url + "rets/delete_records_by_mls_number"; 
		var containerId 		= "notices_container";
		var parameters  		= { 'mls_numbers[]': mls_numbers_array,
			 						mls_name: mls_service };
		var onCompleteCallback 	= function(){ audit_records(mls_service) };
		var messageString 		= "<br />Deleting listings...";
		ajax_update( containerId, url, parameters, onCompleteCallback, messageString );

	} else {
		alert("Warning, no input received:  No action was taken.");
	}
}

function audit_images( mls_service_name )
{
	// update missing images status
	var containerId 		= mls_service_name + "_missing_images";
	var url   				= site_url + "rets/missing_image_folders/" + mls_service_name;
	var parameters  		= {};
	var onCompleteCallback 	= 	function() {
									// a sleazy hack... the ajax-returned value 
									// (which typically updates the 'innerHTML' of the container) 
									// is passed along into the box's 'value' attribute
									$(containerId).value = $(containerId).innerHTML;
		
								};
	var messageString 		= "<br> Checking images...";
	ajax_update( containerId, url, parameters, onCompleteCallback, messageString );
}

function audit_all()
{
	audit_records( 'Berkshire' );
	audit_records( 'Capital_Region' );
	audit_records( 'Columbia' );
	audit_records( 'Connecticut' );
}

function audit_records( mls_service_name )
{

	// update listings status
	var containerId 		= mls_service_name + "_listings";
	var url   				= site_url + "rets/audit_records/" + mls_service_name;
	var parameters  		= {};
	var onCompleteCallback 	= function() { audit_images(mls_service_name); };
	var messageString 		= "<br />Checking listings...";
	ajax_update( containerId, url, parameters, onCompleteCallback, messageString );
}

function synchronize_records( mls_service_name )
{
	var containerId 		= mls_service_name + "_listings";
	var url   				= site_url + "rets/synchronize_records/" + mls_service_name;
	var parameters  		= {};
	var onCompleteCallback 	= 	function() {};
	var messageString 		= "<br />Committing changes to database...";	
	ajax_update( containerId, url, parameters, onCompleteCallback, messageString );
}

function ajax_update( containerElementId, url, parametersObject, onCompleteCallback, messageString ) {
	if( $(containerElementId) ) {
		$(containerElementId).update(messageString);
		var myUpdater = new Ajax.Updater( 	containerElementId, 
											url, 
											{ parameters: parametersObject, onComplete: onCompleteCallback } );
		return $(containerElementId);
	} else {
		// we couldn't find the element by that name, so just return the name itself
		return containerElementId;
	}
}

/*  end rets  */





/**
* Change page on selection.  Abstracted to use any calling controller.
**/
function jumpBox(el, page) {
	location.href = site_url+page+'/'+$(el).getValue();
}

function setupJumpBox()
{
	EventManager.Add( $('office_select'), "change", jumpBox );
}

// county/town/school pulldowns on Search page
function setupSearchFormSelectors() {
	var county 		= $('county');
	var town   		= $('town');
	var school 		= $('school_district_id');
	var sort_mode 	= $('sort_mode');

	if( county && town ) {
		EventManager.Add( county, "change", function(){ changedCounty(true) });
		EventManager.Add( town,   "change", function(){ changedTown(true) });
		selectCountyTownMode();
	}
	if( school ) {
		EventManager.Add( school, "change", function(){ changedSchool(true) });
	}
	if( sort_mode ) {
		EventManager.Add( sort_mode, "change", function() { updateSort() });
	}
}
// county/town pulldowns on Home Page
function setupQuickSearchSelectors() {
	var county 		= $('county');
	if( county ) {
		EventManager.Add( county, "change", function(){ changedCounty(false) });
	}
}
function changedCounty( do_load_results )
{
	selectCountyTownMode();
	resetSchool();
	updateTownsSelector();
	if( do_load_results ) {
		loadResults();
	}
}
function changedTown( do_load_results ) {
	resetSchool();
	selectCountyTownMode();
	if( do_load_results ) {
		loadResults();
	}
}
function changedSchool( do_load_results ) {
	setCountyFromSchoolDistrict();
	if( do_load_results ) {
		loadResults();
	}
	selectSchoolMode();
}
function setCountyFromSchoolDistrict() {
	var county_name = $('school_district_id').options[ $('school_district_id').selectedIndex ].readAttribute('pjm_county');
	for( var i=0; i < $('county').options.length; i++ ) {
        if( $('county').options[i].value == county_name ) {
			$('county').selectedIndex = i;
		}
	}
	updateTownsSelector();
}
function selectCountyTownMode() {
	if ( $('county_select') ) {$('county_select').addClassName('selected');}
	if ( $('town_select') ) {$('town_select').addClassName('selected');}
	if ($('school_district_select')) { $('school_district_select').removeClassName('selected'); }
}
function selectSchoolMode() {
	if ( $('county_select') ) {$('county_select').removeClassName('selected');}
	if ( $('town_select')   ) {$('town_select').removeClassName('selected');}
	if ($('school_district_select')) { $('school_district_select').addClassName('selected'); }
}
function resetCounty(){
	$('county').selectedIndex = 0 ;
	updateTownsSelector();
}
function resetTown(){
	updateTownsSelector();
}
function resetSchool(){
	if ($('school_district_id')) { $('school_district_id').selectedIndex = 0; }
}
function setTownSelector( town_name ) {
	var town = $('town');
	if( town && town_name ) {
		for( var i=0; i < town.options.length; i++ ) {
	        if( town.options[i].value == town_name ) {
				town.selectedIndex = i;
			}
		}
	}
}
function updateTownsSelector() {
	var town   = $('town');
	var county = $('county');
	if( county && town ) {
		removeAllOptions(town);
		var css_for_element_to_copy = '.hidden_town_pulldowns select.' + getSelectValue( county );
		//alert( css_for_element_to_copy );
		town.update( $$( css_for_element_to_copy ).first().innerHTML );
	}
}
function removeAllOptions(sel) {
	while(sel.options.length > 0) {
		sel.options[0] = null;
	}
}
function addSelectValue(field_name, name, value) {//form_obj,
	var s = field_name;//form_obj.elements[field_name];
	var o = new Option(name, value);
	s.options[s.options.length] = o;
}
function getSelectValue(elm) {
	if (elm == null || elm.options == null) { return ""; }
	return elm.options[elm.selectedIndex].value;
}
function snappyLogin()
{
	new Ajax.Request(site_url + 'login/snappy', {
		parameters: 	$('accountLoginForm').serialize(true),
		onSuccess: 	function( transport ) {
			if( transport.responseText.match('success') ) {
				loadDialog('accountlogintool' );
			}
			else
			{
				alert( "Sorry, your email or password was not recognized. <br /> Please try again. Be careful the CAPS-Lock key isn't on by accident." );
			}
		}
	});
}

function loadResults( in_begin )
{
	var begin = in_begin || "" ;
	var url   = site_url + "search/results/" + begin;
	var queryString = $('searchToolForm').serialize();
	setCurrentSearch( queryString );
	loadContainer( 'SearchResultsContainer', url, queryString );
}

function getCurrentSearch()
{
	return getCookie("CurrentSearch");
}

function setCurrentSearch( in_serializedQuery )
{
	// alert("Setting " + in_serializedQuery );
	setCookieExpDays( "CurrentSearch", in_serializedQuery, 40, "/")
}

function loadNewPage( address )
{
	closeDialog();
	window.location = site_url + address;
	return true;
}
function loadContainer( containerId, url, parametersObject )
{
	// blanking out the display first achieves two things:
	// ... we see instant action in the interface, while waiting for the update,
	// ... we empty the contents of the div which avoids redraw bugs in certain browsers
	// additionally we could display a spinner here, while waiting for results

	$( containerId ).update("<div class='loading_notice'>Searching...</div>");
	var myUpdater = new Ajax.Updater( containerId, url, {parameters: parametersObject, onComplete: function() {
		// activateSorting();
		activateHotsheetTogglers()
	}} );
	return $(containerId);
}

function loadDialog( url, parametersObject )
{
	var full_url = site_url + url;
	$('Scrim').removeClassName('off').addClassName('on');
	var myUpdater = new Ajax.Updater( 'Dialog', full_url,{ parameters: parametersObject });
	return $('Dialog').removeClassName('off').addClassName('on');
}

function closeDialog()
{
	$('Dialog').update("").removeClassName('on').addClassName('off');
	$('Scrim').removeClassName('on').addClassName('off');
	// no return value
}

// ORIGINAL cookiehandler.js
function defaultPath(path) {
	return (path=="undefined") ? "/" : path;
}
function setCookie(name, value, expire, path) {
	var path = defaultPath(path);
	document.cookie = name + "=" + escape(value) + ((expire == null) ? "" : ("; expires=" + expire.toGMTString())) + " ;path="+path;
}
function setCookieExpDays(name, value, daysToExpire, path) {
	var path = defaultPath(path);
	var dt = new Date();
	dt.setTime(dt.getTime() + (1000*60*60*24*daysToExpire));
	document.cookie = name + "=" + escape(value) + ((daysToExpire == null) ? "" : ("; expires=" + dt.toGMTString())) + " ;path="+path;
}
function getCookie(Name) {
	var search = Name + "=";
	if (document.cookie.length > 0) { // if there are any cookies
		offset = document.cookie.indexOf(search);
		if (offset != -1) { // if cookie exists
			offset += search.length;
			// set index of beginning of value
			end = document.cookie.indexOf(";", offset);
			// set index of end of cookie value
			if (end == -1) { end = document.cookie.length; }
			return unescape(document.cookie.substring(offset, end));
		}
	}
}
function killAllCookies() {
	alert("killing all cookies...");
	document.cookie = "";
}
// END ORIGINAL cookieHandler.js





//  ORIGINAL JAVASCRIPT  //

//Add array.push() method for lacking browsers
if (!Array.prototype.push) {
	Array.prototype.push = function() {
		for (var i = 0; i < arguments.length; ++i) {
			this[this.length] = arguments[i];
		}
		return this.length;
	};
}
function cancelEvent(e,ethis) {
	var e = e || window.event;
	e.cancelBubble = true; // for IE
	if (e.stopPropagation) {
		e.stopPropagation();
	}
	e.returnValue = false; // for IE
	if (e.preventDefault) {
		e.preventDefault();
	}
}

/*
* EventManager Object
* (c) 2005 by Keith Gaughan <http://talideon.com/about/contact/>
*/
var EventManager = {
	_registry: null,
	Initialize: function() {
		if (this._registry === null) {
			this._registry = [];
			// Register the cleanup handler on page unload.
			EventManager.Add(window, "unload", this.CleanUp);
		}
	},
	/**
	* Registers an event and handler with the manager.
	*
	* @param  obj         Object handler will be attached to.
	* @param  type        Name of event handler responds to.
	* @param  fn          Handler function.
	* @param  useCapture  Use event capture. False by default. If you don't understand this, ignore it.
	*
	* @return True if handler registered, else false.
	*/
	Add: function(obj, type, fn, useCapture) {
		this.Initialize();
		/* If a string was passed in, it's an id. */
		if (typeof obj == "string") { obj = document.getElementById(obj); }
		if (obj == null || fn == null) { return false; }
		/* Mozilla/W3C listeners? */
		useCapture = (useCapture===true);
		if (obj.addEventListener) {
			obj.addEventListener(type, fn, useCapture);
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: useCapture});
			return true;
		}
		/* IE-style listeners? */
		if (obj.attachEvent && obj.attachEvent("on" + type, fn)) {
			this._registry.push({obj: obj, type: type, fn: fn, useCapture: false});
			return true;
		}
		return false;
	},
	/* Cleans up all the registered event handlers. */
	CleanUp: function() {
		for (var i = 0; i < EventManager._registry.length; i++) {
			with (EventManager._registry[i]) {
				// Mozilla/W3C listeners?
				if (obj.removeEventListener) {
					obj.removeEventListener(type, fn, useCapture);
				}
				// IE-style listeners?
				else if (obj.detachEvent) {
					obj.detachEvent("on" + type, fn);
				}
			}
		}
		// Kill off the registry itself to get rid of the last remaining references.
		EventManager._registry = null;
	}
};

/* BEGIN AJAX HELPER */
function getXMLHTTPObject() {
	var xmlHttpObj;
	/*@cc_on
	@if (@_jscript_version >= 5)
	try {
	xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	try {
	xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (E) {
	xmlHttpObj = false;
	}
	}
	@else
	xmlHttpObj = false;
	@end @*/
	if (!xmlHttpObj && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlHttpObj = new XMLHttpRequest();
		} catch (e) {
			xmlHttpObj = false;
		}
	}
	return xmlHttpObj;
}

function getXML(uri, method, func) {
	var xmlHttpObj = getXMLHTTPObject(); // We create the HTTP Object
	xmlHttpObj.open(method, uri, true);
	xmlHttpObj.onreadystatechange = function() {
		//		alert("xmlhttp.readyState: "+xmlhttp.readyState);
		if (xmlHttpObj.readyState == 4) {
			func(xmlHttpObj);
		}
	}
	xmlHttpObj.send(null);
}

function setXML(uri, method, func, XMLTEXT) {
	var xmlHttpObj = getXMLHTTPObject(); // We create the HTTP Object
	xmlHttpObj.open(method, uri, true);
	xmlHttpObj.setRequestHeader("Content-Type", "text/xml");
	xmlHttpObj.onreadystatechange = function() {
		//		alert("xmlhttp.readyState: "+xmlhttp.readyState);
		if (xmlHttpObj.readyState == 4) {
			func(xmlHttpObj);
		}
	}
	xmlHttpObj.send(XMLTEXT);
}
/* END AJAX HELPER */

function mail_safe(email) {
	email = email.split("PNT").join(".").split("TKG").join("@");
	location.href = "mailto:"+email;
}

function checkHotsheetStatus(obj) {
	var pid = obj.href.split("/");
	pid = pid[pid.length-1];
	getXML(site_url+"saved_properties/is_hot/"+pid, "post", function(xmlHttpObj) {
		if(xmlHttpObj.responseText == "true") {
			if(obj.className != "remove")	{
				obj.innerHTML = "Remove from My Saved Properties";
				obj.href = obj.href.split('add').join('remove');
				obj.className = "remove";
			}
		} else {
			if(obj.className != "add")	{
				obj.innerHTML = "Add to My Saved Properties";
				obj.href = obj.href.split('remove').join('add');
				obj.className = "add";
			}
		}
	});
}

function toggleHotsheetA(e) {
	cancelEvent(e);
	obj = (e.srcElement) ? e.srcElement : e.currentTarget;
	var ar = (obj.className != "add") ? "remove" : "add";
	obj.className = "waiting";
	if(ar == "add")
	{
		getXML(obj.href, "post", function(xmlHttpObj)
		{
			if(xmlHttpObj.responseText != "true") {
				alert("It appears that your property was not added to your saved properties.\nPlease contact The Kinderhook Group to notify them of this error");
			} else {
				obj.innerHTML = "Remove from My Saved Properties";
				obj.href = obj.href.split('add').join('remove');
				obj.className = "remove";
			}
			return false;
		});
		new Ajax.Request(	'/login/isLoggedIn', {
			onSuccess: 	function( transport ) {
				if( transport.responseText.match('FALSE') )
				{
					loadDialog('accountregistrationtoolfordialog' );
				}
			}
		});
	}
	else
	{
		getXML(obj.href, "post", function(xmlHttpObj) {
			if(xmlHttpObj.responseText != "true") {
				alert("It appears that your property was not removed from the your saved properties.\nPlease contact The Kinderhook Group to notify them of this error");
			} else {
				obj.innerHTML = "Add to My Saved Properties";
				obj.href = obj.href.split('remove').join('add');
				obj.className = "add";
			}
			return false;
		});
	}
	return false;
}

function activatePropertyImageSelectors() {
	if(document.getElementById && document.getElementById("thumbnails")) {
		var thumbholder = document.getElementById("thumbnails");
		var thumbs = thumbholder.getElementsByTagName("a");
		for(var i=0; i<thumbs.length; i++) {
			if(is_Safari) {thumbs[i].onclick = null;}
			EventManager.Add(thumbs[i],"click",propertyMediaSelect);
		}
	}
}
function getThumbnailAnchorByHref(href) {
	if(document.getElementById && document.getElementById("thumbnails")) {
		var thumbholder = document.getElementById("thumbnails");
		var thumbs = thumbholder.getElementsByTagName("a");
		for(var i=0; i<thumbs.length; i++) {
			if(thumbs[i].href == href) {
				return thumbs[i];
			}
		}
	}
}
function propertyMediaSelect(e) {
	cancelEvent(e);
	obj = (e.srcElement) ? e.srcElement : e.currentTarget;
	var src = (obj.parentNode.href) ? obj.parentNode.href : obj.href;
	var div = document.getElementById("prop_img");
	var img = div.getElementsByTagName("img")[0];
	if (src != "") {
		img.setAttribute("src",site_url+'images/tkg-pinwheel.gif');
		img.setAttribute("src",src);
		img.setAttribute("alt",cap);
	} else {
		img.setAttribute("src","../images/spacer.gif");
		img.setAttribute("alt",cap+1);
	}
	if(obj.getAttribute) {
		var cap = obj.getAttribute("title");
		if(cap == "" || cap==null) {
			cap = getThumbnailAnchorByHref(src).getAttribute("title");
		}
		changeImgCaption(cap);
	}
	return false;
}
function changeImgCaption(txt) {
	var div = document.getElementById("prop_caption");
	div.innerHTML = "&nbsp;"+txt+"&nbsp;";
};
function activateHotsheetTogglers() {
	activateHotsheetLinksIn("saveproperty",toggleHotsheetA);
	activateHotsheetLinksIn("search_results",toggleHotsheetA);
}
function activateHotsheetLinksIn(id, fn) {
		var div = $(id);
		var inputs = $$("a");
		for(var i=0; i<inputs.length; i++) {
			if(cookiesEnabled && (inputs[i].className == "add" || inputs[i].className == "remove")) {
				EventManager.Add(inputs[i],"click",fn);
				checkHotsheetStatus(inputs[i]);
				if(is_Safari) {inputs[i].onclick = function() { return false; };}
			}
		}
}


/* accepts column name and direction, separated with an underscore
/* examples: 'price_up', 'price_down', 'acreage_up', etc...    */
function updateSort() {
	
	/* TO DO: trap for bad args coming in */
	// alert(column_and_direction);
	var column_and_direction = $('sort_mode').options[ $('sort_mode').selectedIndex ].value;
	var splits 			= column_and_direction.split('_');
	var new_column 		= splits[0];
	var new_direction   = splits[1];
	var form 			= $('searchToolForm');	

	if( new_column ) {
		form.down('#order_by').value = new_column;
	} 
	if( new_direction ) {
		form.down('#direction').value = new_direction;
	}
	loadResults();
	return false;
}

/* home page banners */
/* TO DO:  This is cheesy, having updateSlogan1, updateSlogan2, updateSlogan3... Set this up to accept args.  */
function updateSlogan1()
{
	var slogans = ["The Berkshires","Columbia County","Dutchess County","Washington County","Rensselaer County","Hudson Valley","Greene County","Litchfield County","Capital Region", "Battenkill Valley"];
	var sloganLeftBound   = 10;
	var sloganRightBound  = 320;
	var sloganTopBound    = 140;
	var sloganBottomBound = 176;

	new Effect.Fade( 	'Slogan1', 
      					{ 	duration: 2,
					  	afterFinish: function(obj)
						{ 
							if( KHG_previousSloganIndex1 >= slogans.length )
							{
								KHG_previousSloganIndex1 = 0;
							}
							var newSloganText 	= slogans[KHG_previousSloganIndex1];
							KHG_previousSloganIndex1 	= KHG_previousSloganIndex1 + 1;

							var newLeft = sloganLeftBound + ( Math.floor( Math.random()*(sloganRightBound -sloganLeftBound) ) );
							var newTop  = sloganTopBound  + ( Math.floor( Math.random()*(sloganBottomBound -sloganTopBound) ) );
							newLeft += "px";
							newTop  += "px";
							var newSloganPos  = { top: newTop, left: newLeft };
							$('Slogan1').update( newSloganText );
							$('Slogan1').setStyle( newSloganPos );		
								new Effect.Appear( 	'Slogan1', 
      												{ 	duration: 2,
												  	afterFinish: function(obj)
													{
														setTimeout( 'updateSlogan1()', 1200 );
												  	}
											 	}
											  );
						}
					}
				);
}
function updateSlogan2()
{
	var slogans = ["The Berkshires","Columbia County","Dutchess County","Washington County","Rensselaer County","Hudson Valley","Greene County","Litchfield County","Capital Region", "Battenkill Valley"];
	var sloganLeftBound   = 10;
	var sloganRightBound  = 320;
	var sloganTopBound    = 197;
	var sloganBottomBound = 229;

new Effect.Fade( 	'Slogan2', 
      				{ 	duration: 1,
					afterFinish: function(obj)
					{ 
						if( KHG_previousSloganIndex2 >= slogans.length )
						{
							KHG_previousSloganIndex2 = 0;
						}
						var newSloganText 		= slogans[KHG_previousSloganIndex2];
						KHG_previousSloganIndex2 	= KHG_previousSloganIndex2 + 1;

						var newLeft = sloganLeftBound + ( Math.floor( Math.random()*(sloganRightBound -sloganLeftBound) ) );
						var newTop  = sloganTopBound  + ( Math.floor( Math.random()*(sloganBottomBound -sloganTopBound) ) );
						newLeft += "px";
						newTop  += "px";
						var newSloganPos  = { top: newTop, left: newLeft };
						$('Slogan2').update( newSloganText );
						$('Slogan2').setStyle( newSloganPos );		
						new Effect.Appear( 	'Slogan2', 
      										{ 	duration: 2,
											afterFinish: 	function(obj) {
															setTimeout( 'updateSlogan2()', 1200 );
												  		}
										}
									);
					}
				}
			);
}
function updateSlogan3()
{
	var slogans = ["The Berkshires","Columbia County","Dutchess County","Washington County","Rensselaer County","Hudson Valley","Greene County","Litchfield County","Capital Region", "Battenkill Valley"];
	var sloganLeftBound   = 10;
	var sloganRightBound  = 320;
	var sloganTopBound    = 252;
	var sloganBottomBound = 287;

	new Effect.Fade( 	'Slogan3', 
      					{ 	duration: 1,
					  	afterFinish: function(obj)
						{ 
							if( KHG_previousSloganIndex3 >= slogans.length )
							{
								KHG_previousSloganIndex3 = 1;
							}
							var newSloganText 		= slogans[KHG_previousSloganIndex3];
							KHG_previousSloganIndex3 	= KHG_previousSloganIndex3 + 1;

							var newLeft = sloganLeftBound + ( Math.floor( Math.random()*(sloganRightBound -sloganLeftBound) ) );
							var newTop  = sloganTopBound  + ( Math.floor( Math.random()*(sloganBottomBound -sloganTopBound) ) );
							newLeft += "px";
							newTop  += "px";
							var newSloganPos  = { top: newTop, left: newLeft };
							$('Slogan3').update( newSloganText );
							$('Slogan3').setStyle( newSloganPos );		
								new Effect.Appear( 	'Slogan3', 
      												{ 	duration: 2,
												  	afterFinish: function(obj) {
													setTimeout( 'updateSlogan3()', 1200 );
												  	}
											 	}
											  );
						}
					}
				);
}






/*  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       */
/*  			EXECUTE IMMEDIATELY			       				        				*/
/*  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       */

var cookiesEnabled;
var is_Safari = navigator.vendor && navigator.vendor.indexOf('Apple') != -1;

// price sliders
var handleWidth, sliderWidth, slide;

function refreshSliderDisplay( valuesArray )
{
	// requires the globals 'priceSliderDisplaysLookup' & 'priceSliderValuesLookup' be already set (during slider init)
	// set filled slider bar
	var leftpos  = ( valuesArray[0]/100 * sliderWidth ) + 'px';
	var rightpos = ( sliderWidth - ( valuesArray[1]/100 * sliderWidth ) ) + 'px';
	$('slider-filled-bar').setStyle( { left: leftpos, right: rightpos } );

	// set text in price readouts
	$('price_Left').update( $(priceSliderDisplaysLookup)[ valuesArray[0] ] );
	$('price_Right').update( $(priceSliderDisplaysLookup)[ valuesArray[1] ] );

	// set input prices for form query
	$('price_low').value  = Math.round( $(priceSliderValuesLookup)[ valuesArray[0] ] );
	$('price_high').value = Math.round( $(priceSliderValuesLookup)[ valuesArray[1] ] );
	// alert( $('price_low').value );
}


Event.observe( window, 'load', function()
{
	cookiesEnabled = typeof(getCookie("ci_session")) == "string";
	activateHotsheetTogglers();
	activatePropertyImageSelectors();

	if( $('priceSlider') )
	{
		// globals for performance, for now
		sliderWidth = $('slider-bar').getWidth();
		handleWidth = $('slider-handle_Left').getWidth();
		window.priceSliderDisplaysLookup = 	{	1:	"$0",
		10:	"$50K",
		20:	"$100K",
		30:	"$150K",
		40:	"$200K",
		50:	"$300K",
		60:	"$400K",
		70:	"$500K",
		80:	"$750K",
		90:	"$1M",
		100:	"Max"
		};
		window.priceSliderValuesLookup = 	{	1:	0,
		10:	"50",
		20:	"100",
		30:	"150",
		40:	"200",
		50:	"300",
		60:	"400",
		70:	"500",
		80:	"750",
		90:	"1000",
		100:	"100000"
		};

		slide  = new Control.Slider( $('priceSlider').select('.sliderhandle'), 'slider-bar', {
			restricted: true,
			range: $R( 1, 100 ),
			values: [ 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 ],
			onSlide:
			function( valuesArray ) {
				refreshSliderDisplay( valuesArray );
			},
			onChange:
			function( valuesArray ) {
				refreshSliderDisplay( valuesArray );
			}
		});
		slide.setValue( 1, 0 );
		slide.setValue( 100, 1 );
	}

	if( $('office_select') )
	{
		setupJumpBox();
	}

	if( $('QuickSearchForm') )
	{
		setupQuickSearchSelectors();
	}

	if( $('searchToolForm') )
	{
		setupSearchFormSelectors();
		if( getCurrentSearch() )
		{
			window.puddlejump_bh = {};
			window.puddlejump_bh.county_was_changed = false;
			window.puddlejump_bh.town_should_be = "";
			$H( getCurrentSearch().toQueryParams() ).each( 
				function( queryPair ) {
					// alert( queryPair.key );
					Try.these(
						function()	{

							// set the form controls to match the stored query
							if( queryPair.key == "county" ) {
								$( 'county' ).value = queryPair.value;
								changedCounty(false);
								window.puddlejump_bh.county_was_changed = true;
							}
							if( queryPair.key == "town" ) {
									$('town').value = queryPair.value;
									// setTownSelector( queryPair.value );
									town_should_be = queryPair.value;
							}
							if( queryPair.key == "school_district_id" ) {
								if( queryPair.value=="" || queryPair.value=="0" ){
									/* do nothing */
								} else {
									changedSchool(false);
								}
							}
							// slider values
							if( queryPair.key == "price_low" ) {
								$H( priceSliderValuesLookup ).each(
									function (valuePair) {
										if( valuePair.value==queryPair.value ) {
											slide.setValue( valuePair.key, 0 );
										}
									});
							}
							if( queryPair.key == "price_high" ) {
								$H( priceSliderValuesLookup ).each(
									function (valuePair) {
										if( valuePair.value==queryPair.value ) {
											slide.setValue( valuePair.key, 1 );
										}
									});
							}

						});
				});
		}
	
		if ( window.puddlejump_bh.county_was_changed ) {
			// we need to set the town pulldown again, in case it was reset by the county changing
			// TO DO:  This is sloppy, there is probably a better way
			setTownSelector( window.puddlejump_bh.town_should_be );
		}
		loadResults();
	}


		// HOME PAGE
		// banner slogan effects
		if( $('Slogan1') ) {	
			window.KHG_previousSloganIndex1 = 2; // Yep, global on purpose.
			window.KHG_previousSloganIndex2 = 4;
			window.KHG_previousSloganIndex3 = 6;
			updateSlogan1();
			setTimeout( 'updateSlogan2()', 1000 );
			setTimeout( 'updateSlogan3()', 1400 );
		}
		// validate account registration form 
		if( $('accountRegistrationForm') ) {
		    var firstname_chk       = new LiveValidation( 'firstname', {validMessage: 'OK', onlyOnSubmit: true, wait: 5000 } ).add( Validate.Presence );
		    var lastname_chk        = new LiveValidation( 'lastname',  {validMessage: 'OK', onlyOnSubmit: true, wait: 5000 } ).add( Validate.Presence );
		    var email_chk           = new LiveValidation( 'khg_email', {validMessage: 'OK', onlyOnSubmit: true, wait: 5000 } ).add( Validate.Email );
		    var password_chk        = new LiveValidation( 'password',  {validMessage: 'OK', onlyOnSubmit: true, wait: 5000 } ).add( Validate.Presence );
		    var password2_chk       = new LiveValidation( 'password2', {validMessage: 'OK', onlyOnSubmit: true, wait: 5000 } ).add( Validate.Presence );
		}
		// validate quick search form: require County selection
		if( $('QuickSearchForm') ) {
		    var county_chk       	= new LiveValidation( 'county', {validMessage: '', onlyOnSubmit: false, wait: 5000 } ).add( Validate.Presence, { failureMessage: "REQUIRED" }  );
		}


		// RETS ADMIN PANEL
		if( $$('.rets_container') )
		{
			$$('.minibutton.refresh').each(
					function( button )
					{
						// run the initial status report
						audit_all();
						
						// refresh the status report when clicked
						Event.observe( button, 'click', function()
						{
							audit_all();
						});
					});
			$$('.minibutton.synchronize').each(
					function( button )
					{
						Event.observe( button, 'click', function()
						{
							synchronize_records( this.getAttribute( 'pjm_mlsname' ) );
						});
					});
			$$('.minibutton.truncate').each(
					function( button )
					{
						Event.observe( button, 'click', function()
						{
							truncate_records();
						});
					});

			$$('.minibutton.delete').each(
					function( button )
					{
						Event.observe( button, 'click', function()
						{
							var regexp_whitespace = new RegExp("[^0-9][^0-9]*");
							var mls_service = this.getAttribute( 'pjm_mlsname' );
							var input_box   = $( 'numbers_input_' + mls_service );
							var mls_numbers_array = new Array();
							mls_numbers_array = input_box.value.split( regexp_whitespace );
							delete_specific_records( mls_numbers_array, mls_service);
							// alert(mls_numbers_array);
						});
					});
			$$('.minibutton.rebuild').each(
					function( button )
					{
						Event.observe( button, 'click', function()
						{
							var regexp_whitespace = new RegExp("[^0-9][^0-9]*");
							var mls_service = this.getAttribute( 'pjm_mlsname' );
 							var status_box   = $( mls_service + '_missing_images' );
							var mls_numbers_array = new Array();
							mls_numbers_array = status_box.value.split( regexp_whitespace );
							// alert(mls_numbers_array);
							rebuild_specific_records( mls_numbers_array, mls_service);
							// alert(mls_numbers_array);
						});
					});

			$$('.log_container').each(
					function( log_container )
					{
						var mls_name = log_container.getAttribute( 'pjm_mlsname' );
						setInterval('refresh_log("' + mls_name + '")',2500);						
					});

		}
});







