/***************************************************************************
***************************************************************************
	CONFIGURE SERVER CALLS	
***************************************************************************/
var searchCallOptions = {
    method: 'get',
	parameters: '', 
    // Handle successful response
    onSuccess: function(response) {
		responseVar = eval('(' + response.responseText + ')');		
		displayList(responseVar);
    },
    // Handle 404
    on404: function(t) {
        alert('Error 404: location "' + t.statusText + '" was not found.');
    },
    // Handle other errors
    onFailure: function(t) {
        alert('Error ' + t.status + ' -- ' + t.statusText);
    }
}

var recordDetailCallOptions = {
    method: 'get',
	parameters: '', 
    // Handle successful response
    onSuccess: function(response) {
		displayDetail(response.responseText);
    },
    // Handle 404
    on404: function(t) {
        alert('Error 404: location "' + t.statusText + '" was not found.');
    },
    // Handle other errors
    onFailure: function(t) {
        alert('Error ' + t.status + ' -- ' + t.statusText);
    }
}

/***************************************************************************
	delay server request to allow user to move multiple selectors
***************************************************************************/
var goCommand;
function sendQueue(){
	show_cmd('overlay','block');
	show_cmd('loading','block');
	var delay = 1500; // milliseconds
	window.clearTimeout(goCommand);
	goCommand = window.setTimeout('getRecords()', delay);
}
/***************************************************************************
***************************************************************************
	MAKE SERVER CALLS
/***************************************************************************
	request search records
***************************************************************************/
function getRecords(){
	var requestURL = '';
	
	var community = $('community').innerHTML;
	var floorplan = $('floorplan').innerHTML;
	
	if (community!='') {
		requestURL = '/_search.php?price='+translate_price[priceSlider.values[0]]+','+translate_price[priceSlider.values[1]]+'&beds='+translate_beds[bedsSlider.values[0]]+','+translate_beds[bedsSlider.values[1]]+'&baths='+translate_baths[bathsSlider.values[0]]+','+translate_baths[bathsSlider.values[1]]+'&sqft='+translate_sqft[sqftSlider.values[0]]+','+translate_sqft[sqftSlider.values[1]]+'&community='+community;
	} else {
		requestURL = '/_search.php?price=0,9999999&beds=0,99&baths=0,99&sqft=0,9999';
	}

	new Ajax.Request(encodeURI(requestURL), searchCallOptions);
	//document.location.href=requestURL;
	
	// reset the selected div
	selected_div = '';
	
	// reset the right content html
	if (floorplan=='flush' || floorplan=='') {
		displayMap();
	} else {
		$('floorplan').innerHTML = 'flush';
		displayFloorplan(floorplan);
	}
	
}


/***************************************************************************
	request record detail
***************************************************************************/
function getDetails(id){
	var requestURL = '/_detail.php?id='+id;
	new Ajax.Request(encodeURI(requestURL), recordDetailCallOptions);
	
	// change list highlist state to on
	var list_record_div = $('record_'+id);
	listHighlight(list_record_div,id,'on');
}

/***************************************************************************
***************************************************************************
	REACT TO SERVER RESPONSES
/***************************************************************************
	display search records
***************************************************************************/
function displayList(response){
	var list_element_div = 'list_div';
	var list_html = '';
	if(response.models.length>0){
		for(i=0;i<response.models.length;i++){
			list_html += '<div id="record_'+response.models[i].id+'" class="record" onmouseover="listHighlight(this,\''+response.models[i].community+'\',\'over\')" onmouseout="listHighlight(this,\'none\',\'out\')"><b>'+response.models[i].community+' - plan '+response.models[i].name+'</b><br /><b>Price:</b> '+response.models[i].price+'<br /><b>SqFt:</b> '+(response.models[i].sqft).commafy()+'<br /><b>Bedrooms:</b> '+response.models[i].beds+'<br /><div style="float: right;"><a href="javascript:displayFloorplan('+response.models[i].id+');">View floorplans</a></div><b>Bathrooms:</b> '+response.models[i].baths+'<br /></div>';
		}
	} else {
		list_html = '<div class="record"><b>No records matched your request.  Please try to re-define your selection.</b></div>';
	}
	$(list_element_div).innerHTML = list_html;
	show_cmd('overlay','none');
	show_cmd('loading','none');
}

/***************************************************************************
	display record detail
***************************************************************************/
function displayDetail(responseHTML){
	var detail_div = 'right_content';
	$(detail_div).innerHTML = responseHTML;
}

/***************************************************************************
	display record floorplan
***************************************************************************/
function displayFloorplan(id){
	// display this div's floorplan flash piece
	//var map_html = '<div id="right_title_flash"><img src="/images/ttl_court.gif" title="should be the record specific title and flash. id:'+id+'" width="223" height="23" border="0"></div><div id="right_floorplan_flash"><img src="/images/flash_placeholder.gif" alt="" width="483" height="373" border="0"></div><div id="right_close_html"><a href="javascript:displayMap();">temp - close</a></div>';
	//displayDetail(map_html);
	var pars = '?id='+id;
	var myAjax = new Ajax.Updater({success:'right_content'}, '/homes/zoom/index.php', { method: 'get',	parameters: pars, onFailure: _Error, evalScripts: true });
}

/***************************************************************************
	return to map display
***************************************************************************/
function displayMap(){
	// reset the right content html
	var map_html = '<div id="right_title"><img src="/images/ttl_map.gif" alt="" width="143" height="23" border="0"></div><div id="map"><div id="map_rollover"></div></div>';
	displayDetail(map_html);
}
/***************************************************************************
***************************************************************************
	DISPLAY/DHTML SUPPORT FUNCS
/***************************************************************************
	search records rollover 
***************************************************************************/
var selected_div = '';
function listHighlight(ele,id,state_style){
	// highlight info div
	var state_styles = Array();
	state_styles['out']='record';
	state_styles['over']='record_hover';
	state_styles['on']='record_selected';
	
	// swap the div style unless
	// this is the selected div: don't swap to 'out' or 'on' state
	if(!((state_style=='out'||state_style=='over')&&ele.id==selected_div)){
		ele.className=state_styles[state_style];
	}
	
	// set selected_div
	if(state_style=='on'){
		// switch state to out on previously selected divs
		if($(selected_div)){
			// make sure your not trying to turn off the currently selected div
			if(ele.id!=selected_div){
				$(selected_div).className=state_styles['out'];
			}
		}
		selected_div = ele.id;
	}
	
	// overlay map div with transparent highlight image
	var rollover_div = 'map_rollover';
	if($(rollover_div)){ // check that his div still exists before trying to execute
		$(rollover_div).innerHTML = '<img src="/images/rollover_'+id+'.gif" border="0">';
	}
}

/***************************************************************************
	set display mode - display/none
***************************************************************************/
function show_cmd(ele,cmd){
	$(ele).style.display = cmd;
}

/***************************************************************************
	toggle display mode - switch on if off, off if on
***************************************************************************/
function show(ele){
    $(ele).toggle;

    /*
	var element = document.getElementById(ele);
	if(element.style.display=='none'||element.style.display==''){
		element.style.display='block';
	} else {
		element.style.display='none';
	}
    */
}


/***************************************************************************
	scroll to element within element
***************************************************************************/
function scrollToElement(container, element) {
	var offset = (document.all)?[0,85]:[0,0]; //x,y
    container = $(container);
    element = $(element);
    var x = element.x ? element.x : element.offsetLeft,
            y = element.y ? element.y : element.offsetTop;
    container.scrollLeft=x-(document.all?0:container.offsetLeft )+offset[0];
	
    container.scrollTop=y-(document.all?0:container.offsetTop)+offset[1];
    return element;
}


String.prototype.commafy = function() {
   return Number( this ).commafy();
};

/*
  Code from "Developing Featherweight Web Services with JavaScript"
      http://feather.elektrum.org/
  (c)An Elektrum Press, retain this notice
      License: http://feather.elektrum.org/appendix/licenses.html
*/

// decide whether commify() should really periodify() thousandths
var tmpNum = new Number(0.1);
// thousandth marker is opposite of decimal marker
Number.localeThousandth = tmpNum.toLocaleString().match(/,/) ? '.' : ',';

Number.prototype.commafy = function () {
   var numStr = this.toString();
   var num = numStr.split('');

  // simplify by only accepting integers longer than 3 digits
   if ( numStr.match(/\D/) || num.length < 3 ) return numStr;
   num.reverse();
   numStr = num.join('');

   numStr = numStr.replace(/(\d\d\d)/g, "$1_marker_");
   // if we did one too many, take it back
   numStr = numStr.replace(/_marker_$/g, '');
   // replace the thousandth _marker_ with ',' or '.'
   numStr = numStr.replace(/_marker_/g, Number.localeThousandth);

   num = numStr.split('');
   num.reverse();
   return num.join('');
}
