var _FFrv;
var _isFF=false;
var _isIE=false;
var _isOpera=false;
var _isKHTML=false;
var _isMacOS=false;
var old_target = null;
var previewHeight;
var previewWidth;
var verticalOffset = 5;
var horizontalOffset = 3;
var top = 0;
var left = 0;
var slideSpeed = 20;
var currentImage;
var currentMLS;
var scrolling = false;
var timeout;
var ajaxSearchController = '/utils/ajax_search_controller';
var ajaxSearchRentalsController = '/utils/ajax_search_rentals_controller';
var ajaxSearchProjectsController = '/utils/ajax_search_projects_controller';
var ajaxSearchAgentsController = '/utils/ajax_search_agents_controller';
var ajaxNewSearchController = '/utils/ajax_buid_search_controller';
var ajaxMLSController = '/utils/ajax_mls_controller';
var ajaxArchiveController = '/utils/ajax_archives_controller';
var ajaxDetailsController = '/utils/ajax_details_controller';
var ajaxAgentDetailsController = '/utils/ajax_agent_details_controller';
var ajaxRentalDetailsController = '/utils/ajax_details_rental_controller';
var ajaxInquireController = '/utils/ajax_inquire_controller';
var ajaxGlossaryController = '/utils/ajax_glossary_controller';
var ajaxUpdateProfileController = '/utils/ajax_profile_controller';
var ajaxSavePropController = '/utils/ajax_saved_properties_controller';
var ajaxHPSSController = '/utils/ajax_hpss_controller';
var map;
var geocoder;
var bounds;
var initPhase = true;
var perpage = 10;
var mlsNo = '';
var dialogs_theme = 'alphacube';
var mapWin;
var firstImage;
var bigImages;
var smallImages;
var city;
var filter = {};
var dialogs_title = "Island Sotheby's International Realty";
var popupWin = null;
var thisCity;
var thisPoint;
var thisPointHash;
var icon;
var currItem = -1;
var markerCount = 0;
var prevMLS = 0;
var nextMLS = 0;
var propIcon = new Array();
var locationID;
var alone_city;
var ts_sort_dir = 'ASC';
var ts_sort_column = '';
var currentDetails = '';
var showFeaturedOnTop = true;
var backURL = '';
// slideshow variables
var currSSImage = 0;
var imgArrLength = 0;
var imgArr = [];
var titArr = [];
var urlArr = [];
var ssDelay = 0;
var curAjaxReques = null;
var totalBigLoaded = 0;
var totalSmallLoaded = 0;

function init() {
	if(navigator.userAgent.indexOf('Macintosh')!= -1)_isMacOS=true;
	if((navigator.userAgent.indexOf('Safari')!= -1)||(navigator.userAgent.indexOf('Konqueror')!= -1))
	_isKHTML=true;
	else if(navigator.userAgent.indexOf('Opera')!= -1){
	_isOpera=true;
	_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6,3));
	}
	else if(navigator.appName.indexOf("Microsoft")!=-1)
	_isIE=true;
	else{
	_isFF=true;
	_FFrv=parseFloat(navigator.userAgent.split("rv:")[1])
	}
}

function alertMsg(msg) {
	Dialog.alert(msg, {title:dialogs_title, className:dialogs_theme, width:400, height:80, showEffect: Element.show, hideEffect: Element.hide, buttonClass: 'button'});
}

function askAndDelete(func, mls) {
	Dialog.confirm('Delete?', {title:dialogs_title, className:dialogs_theme, width:400, height:80, showEffect: Element.show, hideEffect: Element.hide, okLabel:'Yes', cancelLabel:'No', buttonClass: 'button', onOk:function(win) {func(mls);return true;}, onCancel:function(win){return false;}});
}


function prepareHomepageImages() {

	if ($('slideShow')) {
		var bgimage = new Image();
		bgimage.src = "img/homepage_blurry_image.jpg";
		$('slideShow').style.background = "#FFFFFF url(img/homepage_blurry_image.jpg) repeat-x scroll center center"
	}

	prepareSlideshow();
}

var tmpTimer = null;
var photoTitles = [];
var photoLinks  = [];
function prepareSlideshow() {
	if (preloads.length<parseInt(imgArrLength)) {
		new Ajax.Request(ajaxHPSSController,
		{
			method: 'post',
			parameters: {
				action: 'getImage',
				img: currSSImage
			},
			onSuccess: function(transport){
				var responseJS = transport.responseText.evalJSON();
				if (responseJS.success) {
					var image = new Image();
					image.src = '/utils/phpThumb?src=/UserFiles/Image/' + responseJS.image + '&w=800&h=400&zc=1';
					image.id = 'img'+(currSSImage+1);
					preloads.push(image);
					photoTitles.push(responseJS.title);
					photoLinks.push(responseJS.link);
					if (!currSSImage) {
						$('photo').style.background = '#000 url(\''+  image.src  +'\') no-repeat center';
						showing = 'div';
					}
				}
				currSSImage++;
				tmpTimer = setTimeout('prepareSlideshow()', 100);
			},
			onFailure: function(){}
		});
	} else {
		clearTimeout(tmpTimer);
		runSlideShow();
	}
}

function checkAndAsk(theform,func) {
var found = false;
var re = new RegExp("^sel\\[(.*?)\\]");
if (typeof(theform.elements) == 'undefined')
	return false;
var elts = theform.elements;
if (typeof(elts)=='object' && typeof(elts.length) == 'undefined' && elts.name.match(re)) {
	if (elts.checked)
		found = true;
} else if (typeof(elts.length) != 'undefined') {
	for (var i = 0; i < elts.length; i++) {
		if (elts[i].checked && elts[i].name.match(re)) {
			found = true;
		}
	}
}
if (!found) {
	alertMsg("Nothing selected");
	return;
}
Dialog.confirm('Delete?', {title:dialogs_title, className:dialogs_theme, width:400, height:80, showEffect: Element.show, hideEffect: Element.hide, okLabel:'Yes', cancelLabel:'No', buttonClass: 'button', onOk:function(win) {func(theform);return true;}, onCancel:function(win){return false;}});
}

function deleteSelectedProps(theform) {
	theform.submit();
}

function deleteProp(mls) {
	$('mls').value = mls;
	$('savedProps').submit();
}

function deleteSelectedSearches(mls) {
	window.location.href='/account/delfltr?id='+mls;
}

function jumpMenu(selObj){
	setCookie("site",selObj.options[selObj.selectedIndex].value);
	var re = new RegExp("\\?cmd1=(\\d*)");
	var cmd = document.location.href.match(re) ? "?cmd1="+RegExp.$1 : "?cmd1=0";
	eval("location='"+cmd+"'");
}

function goIsland(selObj){
	var island = selObj.options[selObj.selectedIndex].value;
	buildNewSearchForm(island);
}

function jumpIsland(island){
	eval("location='/php/property_search.php?island="+island+"'");
}

function setCookie(name, value, expire) {
document.cookie = name + "=" + escape(value) + ((expire == null) ? "" : ("; expires=" + expire.toGMTString()));
}

function deleteCookie(Name)
{
expireDate = new Date;
expireDate.setDate(expireDate.getDate()-1);
document.cookie = Name + "=; expires=" + expireDate.toGMTString();
}

function isValidEmail(str) {
	return str.match(new RegExp("^([a-zA-Z0-9_]|\\-|\\.)+@(([a-zA-Z0-9_]|\\-)+\\.)+[a-zA-Z]{2,4}$"));
}

function checkFields() {
	var i, a=checkFields.arguments;
	for(i=0;i<a.length;i++) {
		obj = $(a[i]);
		if(!obj.value.length) {
			alert("Empty field '"+obj.name+"'");
			return false;
		}
		if (obj.name.match(/^Email(.*?)/i)) {
			if (!isValidEmail(obj.value)) {
				alert("Wrong email format");
				return false;
			}
		}
	}
	return true;
}

function ShowHideBlock(block_id) {

	if ($(block_id)) {
		if ($(block_id).style.display == 'none') {
			$(block_id).style.display = 'block';
			$('moreOptions').innerHTML = 'Less Options';
		} else {
			$(block_id).style.display = 'none';
			$('moreOptions').innerHTML = 'More Options';
		}
	}
	return false;
}


function ShowBlock(block_id) {

	if ($(block_id))
		$(block_id).style.display = 'block';

	return false;
}


function checkAndSubmit(frm) {
	if(checkFields('YourName','YourEmail','FriendsName','FriendsEmail')) {
		doInquireRequest(frm, 'send_to_friend');
		return true;
	} else {
		return false;
	}
}

function checkAndSubmit2(frm) {
	if(checkFields('YourName','YourEmail')) {
		doInquireRequest(frm, 'request_info');
		return true;
	} else {
		return false;
	}
}

function checkAndSubmit3(frm) {
	if(checkFields('YourEmail')) {
		doInquireRequest2(frm, 'password_recover');
		return true;
	} else {
		return false;
	}
}

function checkAndSubmit4(frm) {
	if(checkFields('YourName','YourEmail')) {
		doInquireRequest(frm, 'rental_request_info');
		return true;
	} else {
		return false;
	}
}

function checkAndSubmit5(frm) {
	if(checkFields('YourName','YourEmail','FriendsName','FriendsEmail')) {
		doInquireRequest(frm, 'rental_send_to_friend');
		return true;
	} else {
		return false;
	}
}

function doInquireRequest(frm, act) {
	args = 'action='+act;
	for (i=0; i<$(frm).elements.length; i++) {
		var obj = $(frm).elements[i];
		if (!obj.id.length)
			continue;
		switch (obj.type) {
			case 'checkbox':
				args += "&"+escape(obj.name)+'='+obj.checked;
				break;
			default:
				args += "&"+escape(obj.id)+'='+escape(obj.value);
			break;
		}
	}
	inquireRequest(args);
}

function doInquireRequest2(frm, act) {
	args = 'action='+act;
	for (i=0; i<$(frm).elements.length; i++) {
		var obj = $(frm).elements[i];
		if (!obj.id.length)
			continue;
		switch (obj.type) {
			case 'checkbox':
				args += "&"+escape(obj.name)+'='+obj.checked;
				break;
			default:
				args += "&"+escape(obj.id)+'='+escape(obj.value);
			break;
		}
	}
	inquireRequest2(args);
}

function inquireRequest(request) {
	new Ajax.Request(ajaxInquireController,
	{
		method: 'post',
		parameters: request,
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			if (responseJS.action) {
		var pageTracker = _gat._getTracker("UA-200734-16");
		pageTracker._initData();
		pageTracker._trackPageview('/popups/'+responseJS.action);
			}
			if (toBoolean(responseJS.returnValue))
				MsgBox("Thank you for your request.");
			else
				MsgBox("Something went wrong...<br>"+responseJS.debug);
		}
	});
}

function inquireRequest2(request) {
	new Ajax.Request(ajaxInquireController,
	{
		method: 'post',
		parameters: request,
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			if (toBoolean(responseJS.returnValue))
				MsgBox("New password was sent to your email address.");
			else
				MsgBox("Something went wrong...<br>"+responseJS.debug);
		}
	});
}


function switchMapView() {
	$('propertyFullDetails').style.display = 'none';
	$('googleMap').style.display = '';
	var obj = $('map_view_button');
	obj.setAttribute('class','switch visit');
	obj.setAttribute('className','switch visit');
	obj = $('prop_view_button');
	obj.setAttribute('class','switch');
	obj.setAttribute('className','switch');
	return false;
}

function switchPhotoView() {
	$('propertyFullDetails').style.display = '';
	$('googleMap').style.display = 'none';
	var obj = $('map_view_button');
	obj.setAttribute('class','switch');
	obj.setAttribute('className','switch');
	obj = $('prop_view_button');
	obj.setAttribute('class','switch visit');
	obj.setAttribute('className','switch visit');
	return false;
}

function ensureNumeric(e) {
var k = (typeof e.charCode == "undefined" ? e.keyCode : e.charCode);
if (k < 32 || e.ctrlKey || e.altKey || e.metaKey)
	return true;
return (k >= 48 && k <= 57);
}

function ensureAlphaDigit(e) {
var k = (typeof e.charCode == "undefined" ? e.keyCode : e.charCode);
if (k < 32 || e.ctrlKey || e.altKey || e.metaKey)
	return true;
return ((k >= 48 && k <= 57) || (k >= 65 && k <= 90) || (k >= 97 && k <= 122));
}
/*
function showBigImage(key) {

	clearTimeout(t);

	var allPreviews = document.getElementsByClassName('preview');

	for (var i = 0; i < allPreviews.length; i++) {
		$('img'+i).removeClassName('event_current');
	}

	if (typeof bigImages[key]=='string') {
		$('photoimg').src = bigImages[key];
		$('photo').style.background = '#000 url(\''+  bigImages[key]  +'\') no-repeat center center';
	}

	$('img'+key).addClassName('event_current');

	currentSlide = key;
	showing = 'image';

	t = setTimeout('runSlideShow()', 8000);

}

function showBigImageID(key) {
	$('big_photo').src = '/img/progress2.gif'
	if (typeof bigImages[key]=='string')
		$('big_photo').src = '/utils/show_picture_from_db?id='+bigImages[key]+'&maxw=400&maxh=640';
	else
		$('big_photo').src = '/img/noimage.gif';
	if (old_target!=null) {
		var oldElem = document.getElementsByName('icon_'+old_target);
		if (oldElem && oldElem[0])
			oldElem[0].style.border = '2px Solid #F3F6E0';
	}
	old_target = key;
	var newElem = document.getElementsByName('icon_'+key);
	newElem[0].style.border = '2px Solid Red';
}

function getNextImage() {
	if (parseInt(old_target)+1<=bigImages.length-1) {
		showBigImage(parseInt(old_target)+1);
	} else
		showBigImage(0);
}

function getPrevImage() {
	if (parseInt(old_target)-1<0) {
		showBigImage(bigImages.length-1);
	} else
		showBigImage(parseInt(old_target)-1);
}

function scrollRight(speed,endPos) {
	var tbl = $('preview_layer');
	if (left>=0) {
		tbl.style.left = 0+'px';
		scrolling = false;
		return;
	}
	if (!left) {
		scrolling = false;
		return;
	}
	if (endPos!=0 && left>endPos) {
		shiftPreviewStop();
		return;
	}
	left += speed;
	tbl.style.left = left+'px';
	timeout = setTimeout('scrollRight('+speed+','+endPos+')',slideSpeed);
}

function scrollLeft(speed,endPos) {
	var tbl = $('preview_layer');
	if (tbl)
		previewWidth = $('preview_layer').clientWidth;
	else
		return;
	if (left<560-previewWidth) {
		scrolling = false;
		return;
	}
	if (endPos!=0 && left<endPos) {
		shiftPreviewStop();
		return;
	}
	left -= speed;
	tbl.style.left = left+'px';
	timeout = setTimeout('scrollLeft('+speed+','+endPos+')',slideSpeed);
}

function shiftPreviewStop() {
	scrolling = false;
	clearTimeout(timeout);
	return;
}

function shiftPreview(speed) {
	clearTimeout(t);
	if (scrolling)
		return false;
	else {
		scrolling = true;
		if (speed>0)
			scrollRight(Math.abs(speed),0);
		else
			scrollLeft(Math.abs(speed),0);
	}
}
*/
function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {
	var x = Math.round(num * Math.pow(10,dec));
	if (x >= 0) n1=n2='';
	var y = (''+Math.abs(x)).split('');
	var z = y.length - dec;
	y.splice(z, 0, pnt);
	while (z > 3) {
		z-=3;
		y.splice(z,0,thou);
	}
	var r = curr1+n1+y.join('')+n2+curr2;
	return r;
}

function formatPrice(num) {return formatNumber(num, 0, ',', '', '', '', '', '');}

function doFeaturedSearch() {
	// substitute form data
	var f = $('ajaxpropsearch');
	f['location'].value = 'featured';
	if (f['mls'])
		f['mls'].value = '';
	f.submit();
}

function doOceanfrontSearch(all_flag) {
	// substitute form data
	$('location').value = 'oceanfront';
	//$('type').value = 'oceanfront_listings';
	//$('oceanfront_listings').value = 'true';
	if ($('mls'))
		$('mls').value = '';
	/*
	var f = document.forms[0];
	if (all_flag)
		f.action = '/search?oceanfront';
	else
		f.action = document.location.href;
	*/
	var f = document.forms[0];
	if (f) {
		f.submit();
	}
	f.submit();
}

function doQuickRegionSearch(region, url) {
	// substitute form data
	$('location').value = region;
	$('type').value = 'region';
	$('url').value = url;
	if ($('mls'))
		$('mls').value = '';
	var f = document.forms[0];
	if (f) {
		f.submit();
	}
}

function doQuickCitySearch(city, region, url) {
	// substitute form data
	$('location').value = region;
	$('alone_city').value = city;
	$('type').value = 'city';
	$('url').value = url;
	if ($('mls'))
		$('mls').value = '';
	var f = document.forms[0];
	if (f) {
		f.submit();
	}
}

function changeSortType(val,direction) {
	$('sortType').value = val;
	$('sortDir').value = direction;
	showFeaturedOnTop = false;
	doAjaxRequest();
}

function changeAgentSortType(val,direction) {
	sortType = val;
	sortDir = direction;
	doAgentsSearch();
}

function doFormSearch() {
	$('location').value = $('locationID').value = 'all';
	if ($('mls'))
		$('mls').value = '';
	var els = document.getElementsByName('alone_city');
	if (els && els.length) {
		for(var i=0; i<els.length; i++) {
			els[i].value = "";
		}
	}
	alone_city = "";
	doAjaxRequest();
}

function doAllRegionSearch() {
	$('location').value = $('locationID').value = 'all';
	locationID = 'all';
	doAjaxRequest2();
//    closePopup();
}

function doMapRegionSearch(region) {
	locationID = $('location').value = $('locationID').value = region;
	if ($('mls'))
		$('mls').value = '';
//    $('type').value = 'region';
	doNewAjaxRequest();
//    closePopup();
}

function doMapCitySearch(city, region) {
	$('location').value = region;
	$('alone_city').value = city;
	if ($('mls'))
		$('mls').value = '';
	doAjaxRequest2();
//    closePopup();
}

function setSearchPage(page) {
	$('pageNumber').value = page;
	showFeaturedOnTop = false;
	doSearchRequest();
}

function setDevSearchPage(page) {
	pageNumber = page;
	doDevelopmentsSearch();
}

function setAgSearchPage(page) {
	pageNumber = page;
	doAgentsSearch();
}

function setPerPage(perpage) {
	$('perpage').value = perpage;
	doSearchRequest();
}

function setDevPerPage(perPage) {
	pageNumber = 1;
	perpage = perPage;
	doDevelopmentsSearch();
}

function setAgPerPage(perPage) {
	pageNumber = 1;
	perpage = perPage;
	doAgentsSearch();
}

function setDevLocation(location) {
	pageNumber = 1;
	locationID = location;
	doDevelopmentsSearch();
}

function setNarrowSearchPage(page) {
	pageNumber = page;
	getNarrowList();
}

function setSearchRentalPage(page) {
	pageNumber = page;
	doRentalSearchRequest();
}

function doMLSsearch() {
	var obj = $('island');
	var island = obj.options[obj.selectedIndex].value;
	var pl = new RegExp('(mrw|krw|hrw)');
	if (!island.match(pl))
		return false;
	if ($('searchMLS').value.length) {
		mlsNo = $('searchMLS').value;
		$('locationID').value = $('location').value = 'all';
		eval('doSearchRequest'+island.toUpperCase()+'()');
		return true;
	} else {
		$('mls').value = '';
		eval('doNewSearchRequest'+island.toUpperCase()+'()');
	}
	return false;
}

function doDevelopmentsSearch() {

	new Ajax.Request(ajaxSearchProjectsController,
		{
			method: 'post',
			parameters: 'location='+locationID+'&pageNumber='+pageNumber+'&perpage='+perpage,
			onSuccess: function(transport) {
				var responseJS = transport.responseText.evalJSON();

				$('photoGallery').innerHTML = responseJS.photoGallery;

				if (responseJS.pageTitle)
					$('page_title').innerHTML = responseJS.pageTitle;

				if ($('centerContent').innerHTML.length == 0) {
					$('centerContentContainer').style.display = 'none';
				}

				if ($('details').innerHTML.length == 0) {
					$('details').style.display = 'none';
				}

			}
		});
}

function doAgentsSearch() {

	new Ajax.Request(ajaxSearchAgentsController,
		{
			method: 'post',
			parameters: 'pageNumber='+pageNumber+'&perpage='+perpage+'&sortType='+sortType+'&sortDir='+sortDir+'&office='+officeID,
			onSuccess: function(transport) {
				var responseJS = transport.responseText.evalJSON();

				$('photoGallery').innerHTML = responseJS.photoGallery;

				if (responseJS.pageTitle)
					$('page_title').innerHTML = responseJS.pageTitle;

				if ($('centerContent') && $('centerContent').innerHTML.length == 0) {
					$('centerContentContainer').style.display = 'none';
				}

				if ($('propdetails') && $('propdetails').innerHTML.length == 0) {
					$('propdetails').style.display = 'none';
				}
				scroll(0,0);
				//new Effect.ScrollTo("#top");
			}
		});
}

function doNewSearchRequest() {
	if ($('mls').value.length) {
		mlsNo = $('mls').value;
	} else {
		mlsNo = '';
		initPhase = true;
		showFeaturedOnTop = true;
		if ($('area'))
			$('area').innerHTML = '<img src="img/progress2.gif" width="90" height="16" border="0">';
	}
	doSearchRequest();
	return false;
}

function doNewAjaxRequest() {
	$('mls').value = '';
//    $('searchMLS').value = '';
	pageNumber = 1;
	mlsNo = '';
	initPhase = true;
	doSearchRequest();
}

function doAjaxRequest() {
	if ($('mls').value.length) {
		mlsNo = $('mls').value;
	} else {
		mlsNo = '';
	}
//    $('searchMLS').value = '';
	pageNumber = 1;

	initPhase = false;
	doSearchRequest();
}

function doBackSearchRequest() {
	var el = $('search_area').down('.floatleft .narrow_map');
	if (el) {
		el.className = 'google_map';
		el.innerHTML = '';
	}
	doSearchRequest();
}
/*
function doAjaxRequest2() {
	$('mls').value = '';
//    $('searchMLS').value = '';
	$('pageNumber').value = '1';
	doNewSearchRequest();
}

function doAjaxRequest3() {
	mlsNo = '';
	$('pageNumber').value = '1';
	doNewRentalSearchRequest();
}
*/
function doSearchRequest() {
	currItem = -1;
	markerCount = 0;
	if ($('photoGallery'))
		$('photoGallery').innerHTML = '<img src="img/progress2.gif" width="90" height="16" border="0">';
	/*
	if (initPhase && $('area'))
		$('area').innerHTML = '<img src="img/progress2.gif" width="90" height="16" border="0">';
	var obj = $('map_view_button');
	if (obj) {
		obj.setAttribute('class','switch visit');
		obj.setAttribute('className','switch visit');
		obj.onclick = function() { return false; }
	}
	if (obj) {
		obj = $('prop_view_button');
		obj.setAttribute('class','switch inactive');
		obj.setAttribute('className','switch inactive');
		obj.onclick = function() { return false; }
	}
	if ($('public_remarks'))
		$('public_remarks').style.display = 'none';

	if ($('pages'))
	$('pages').innerHTML = '';
	if ($('counters'))
	$('counters').innerHTML = '';
	if ($('detail_tools'))
	$('detail_tools').innerHTML = '';
	if ($('currLocation'))
	$('currLocation').innerHTML = '';
	*/
	// init phase for ajax_search_controller
	args = initPhase ? '&init=true' : '';
	if (mlsNo.length)
		args += "&mls="+mlsNo;
	if (showFeaturedOnTop) {
		args += "&featured_on_top=1";
	}
	if (!filter.location) {
		for (i=0; i<$('ajaxpropsearch').elements.length; i++) {
			var obj = $('ajaxpropsearch').elements[i];
			if (!obj.id.length)
			continue;
			switch (obj.type) {
			case 'checkbox':
				args += "&"+escape(obj.name)+'='+obj.checked;
				break;
			default:
				if (obj.multiple) {
					for(var k = 0; k < obj.options.length; k++) {
						if (obj.options[k].selected)
							args += "&"+escape(obj.id)+'[]='+escape(obj.options[k].value);
					}
				} else {
					args += "&"+escape(obj.id)+'='+escape(obj.value);
				}
			break;
			}
		}
/*
		if (locationID.length)
			args += "&location="+locationID;
		if (alone_city.length)
			args += "&alone_city="+alone_city;
		else
			args += "&alone_city=";
*/
	} else {
		for (var i in filter) {
			args += "&"+i+"="+filter[i];
		}
		filter = {};
	}

	searchRequest(args);
}

function doAdvSearchRequest() {
	// init phase for ajax_search_controller
	pageNumber = 1;
	args = '&init=true&pageNumber=1&advanced=true';
	for (i=0; i<$('advsearch').elements.length; i++) {
		var obj = $('advsearch').elements[i];
		if (!obj.id.length)
			continue;
		switch (obj.type) {
			case 'checkbox':
				args += "&"+escape(obj.name)+'='+obj.checked;
				break;
			case 'select-multiple':
				var sel = new Array();
				for (var j=0; j < obj.options.length; j++) {
					if (obj.options[j].selected)
						sel.push(obj.options[j].value);
				}
				for (var j=0; j<sel.length; j++)
					args += "&"+escape(obj.name)+'[]='+escape(sel[j]);
				break;
			default:
				args += "&"+escape(obj.id)+'='+escape(obj.value);
				break;
		}
	}
	$('propertyFullDetails').style.display = 'none';
	$('spanPrevNext').style.display = 'none';
	$('googleMap').style.display = '';
	$('googleMap').innerHTML = '<img src="img/progress2.gif" width="90" height="16" border="0">';
	$('googleMap').style.background = '#f5fbff';
	$('photoGallery').innerHTML = '<img src="img/progress2.gif" width="90" height="16" border="0">';
	$('pages').innerHTML = '';
	$('counters').innerHTML = '';
	$('detail_tools').innerHTML = '';
	closePopup();
	searchRequest(args);
}

function buildNewSearchForm(island) {
		new Ajax.Request(ajaxNewSearchController,
		{
			method: 'post',
			parameters: 'island='+island,
			onSuccess: function(transport){
				//var responseJS = transport.responseText.evalJSON();
				//closePopup();
				$('search_area').innerHTML = transport.responseText;
				switch (island) {
			case 'mrw':
				assignAjaxEvent();
				doNewSearchRequest();
				break;
				}
			}
		});
}

function searchRequest(request) {
		if (curAjaxReques) {
			curAjaxReques.abort();
		}
		curAjaxReques = new Ajax.Request(ajaxSearchController,
		{
			method: 'post',
			parameters: request,
			onSuccess: function(transport){
				var responseJS = transport.responseText.evalJSON();

				if (responseJS.pageTitle) {
					$('page_title').innerHTML = responseJS.pageTitle;
					$('totals').innerHTML = responseJS.searchTotals;
				}
				if (responseJS.priceFromIndex) {
					$('amount_from').selectedIndex = responseJS.priceFromIndex;
				}
				if (responseJS.priceToIndex) {
					$('amount_to').selectedIndex = responseJS.priceToIndex;
				}
				if (responseJS.bedsFromIndex) {
					$('bedrooms').selectedIndex = responseJS.bedsFromIndex;
				}
				if (responseJS.bathFromIndex) {
					$('baths').selectedIndex = responseJS.bathFromIndex;
				}
				$('Residential').checked = (responseJS.Residential && toBoolean(responseJS.Residential)) ? true : false;
				$('Condominium').checked = (responseJS.Condominium && toBoolean(responseJS.Condominium)) ? true : false;
				$('Vacant_Land').checked = (responseJS.Vacant_Land && toBoolean(responseJS.Vacant_Land)) ? true : false;
				$('Other_type').checked = (responseJS.Condominium && toBoolean(responseJS.Other_type)) ? true : false;
				$('ocean').checked = (responseJS.ocean && toBoolean(responseJS.ocean)) ? true : false;
				$('mountain').checked = (responseJS.mountain && toBoolean(responseJS.mountain)) ? true : false;
				$('other').checked = (responseJS.other && toBoolean(responseJS.other)) ? true : false;
				$('currLocation').innerHTML = responseJS.currLocation;
				$('area').innerHTML = responseJS.area;
				$('photoGallery').innerHTML = responseJS.photoGallery;
				$('alone_city').value = "";

				if (responseJS.featuredRandItem) {
					$('centerContent').innerHTML = responseJS.featuredRandItem;
				}

				if ($('centerContent').innerHTML.length == 0) {
					$('centerContentContainer').style.display = 'none';
				}

				if ($('propdetails').innerHTML.length == 0) {
					$('propdetails').style.display = 'none';
				}
				if ($('agentdetails').innerHTML.length == 0) {
					$('agentdetails').style.display = 'none';
				}

				if (responseJS.showAdvanced && $('adv_search')) {
					ShowBlock('adv_search');
					$('Oceanfront').checked = (responseJS.Oceanfront && toBoolean(responseJS.Oceanfront)) ? true : false;
					$('Beachfront').checked = (responseJS.Beachfront && toBoolean(responseJS.Beachfront)) ? true : false;
					$('Across_Street_from_Ocean').checked = (responseJS.Across_Street_from_Ocean && toBoolean(responseJS.Across_Street_from_Ocean)) ? true : false;
					$('Fee_Simple').checked = (responseJS.Fee_Simple && toBoolean(responseJS.Fee_Simple)) ? true : false;
					$('Leasehold').checked = (responseJS.Leasehold && toBoolean(responseJS.Leasehold)) ? true : false;
					$('Leasehold-FA').checked = (responseJS.Leasehold_FA && toBoolean(responseJS.Leasehold_FA)) ? true : false;
					$('Single_Family').checked = (responseJS.Single_Family && toBoolean(responseJS.Single_Family)) ? true : false;
					$('Attached_Ohana').checked = (responseJS.Attached_Ohana && toBoolean(responseJS.Attached_Ohana)) ? true : false;
					$('Detached_Ohana').checked = (responseJS.Detached_Ohana && toBoolean(responseJS.Detached_Ohana)) ? true : false;

				}
				// clear init phase
				initPhase = false;
				assignAjaxEvent();
				ts_sort_dir = 'ASC';
				ts_sort_column = 'DOM';
			}
		});
}

function getPrevProp() {
	if (parseInt(prevMLS))
		showDetails(prevMLS,true,'',false);
}

function getNextProp() {
	if (parseInt(nextMLS))
		showDetails(nextMLS,true,'',false);
}

function addHandler(element,type,func){
	if(element.addEventListener){
		element.addEventListener(type,func,false);
	}else if(element.attachEvent){
		element.attachEvent('on'+type,func);
	}
}

function removeHandler(element,type,func){
	if(element.removeEventListener){
		element.removeEventListener(type,func,false);
	}else if(element.attachEvent){
		element.detachEvent('on'+type,func);
	}
}

function assignAjaxEvent() {
//    var obj = $('location');
//    addHandler(obj,'change',doNewAjaxRequest);
	for (i=0; i<$('ajaxpropsearch').elements.length; i++) {
		var obj = $('ajaxpropsearch').elements[i];
		if (obj.id) {
			switch (obj.type) {
				case 'checkbox':
				case 'radio':
					removeHandler(obj,'click',doFormSearch);
					addHandler(obj,'click',doFormSearch);
					break;
				case 'button':
				case 'text':
					break;
				default:
					removeHandler(obj,'change',doFormSearch);
					addHandler(obj,'change',doFormSearch);
					break;
			}
		}
	}
}

function makeCustomIcons() {
	try {
		icon = new GIcon();
		icon.image = "/img/marker.png";
		icon.shadow = "/img/shadow.png";
		icon.iconSize = new GSize(18, 40);
		icon.shadowSize = new GSize(25, 40);
		icon.iconAnchor = new GPoint(6, 40);
		icon.infoWindowAnchor = new GPoint(5, 1);
		for (var i=1; i<=12; i++) {
			propIcon[i] = new GIcon(icon);
			propIcon[i].image = "/img/numbers/"+i+".png";
			propIcon[i].pdHover = "/img/numbers/"+i+"_on.png";
			propIcon[i].iconSize = new GSize(22, 38);
			propIcon[i].shadowSize = new GSize(25, 40);
			propIcon[i].iconAnchor = new GPoint(6, 38);
			propIcon[i].infoWindowAnchor = new GPoint(5, 1);
		}
	} catch (e) {}
}

function showPointOnMap() {
//    GUnload();
	var mapDiv = $("gmap") ? "gmap" : "googleMap";
	if (!$(mapDiv))
	return;
	if (!thisCity.length) {
		$(mapDiv).innerHTML = '<h5>No info</h5>';
		return;
	}
	bounds = new GLatLngBounds();
	if (GBrowserIsCompatible()) {
		map = new GMap2($(mapDiv));
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
		geocoder.reset();
		geocoder.getLatLng(thisPoint, function(point){ addThisProperty(mapDiv, point, thisPointHash)});
		map.zoomToMarkers();
	}
	else {
		$(mapDiv).innerHTML = '<h5>Error</h5>';
	}
}

function addThisProperty(mapDiv, point, prop) {
	if (point == null) {
		$(mapDiv).innerHTML = '<h5>No info</h5>';
		return;
	}
	bounds.extend(point);
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	map.setZoom(15); // set new zoom level
	var img = new Image();
	if (prop.Icon)
		img.src = prop.Icon;
	else
		img.src = '/img/noimage.gif';
	info = '<img class="googleimg" src="'+img.src+'" /><br />';
	info += '<b>MLS:</b> '+prop.MLS+'<br />';
	info += '<b>Price:</b> '+prop.Price+'<br />'+prop.LT+'<br />';
	info += '<b>City:</b> '+prop.City+'<br />';
	info += '<b>Address:</b> '+prop.AddressNumber+' '+prop.AddressStreet+'<br />';
	try {
		var icon = new GIcon();
		icon.image = "/img/marker.png";
		icon.shadow = "/img/shadow.png";
		icon.iconSize = new GSize(18, 40);
		icon.shadowSize = new GSize(25, 40);
		icon.iconAnchor = new GPoint(6, 40);
		icon.infoWindowAnchor = new GPoint(5, 1);
	} catch(e) {}
	var marker = new PdMarker(new GLatLng(point.y,point.x),icon);
	map.addOverlay(marker);
	marker.setOpacity(100);
	marker.pdImage = icon.image;
	marker.setTooltip(info);
	marker.setTooltipHiding(false);
	marker.display(true);
	marker.showTooltip();
}

function showSimplePointOnMap() {
//    GUnload();
	//var mapDiv = $("gmap") ? "gmap" : "googleMap";

	var mapDiv = $('rightColumn').down('.google_map2');
	if (!mapDiv && $("gmap")) {
		mapDiv =  $("gmap");
	} else if (!mapDiv) {
		return;
	}

	if (!thisPoint) {
		mapDiv.innerHTML = '<h5>No info</h5>';
		return;
	}
	bounds = new GLatLngBounds();
	if (GBrowserIsCompatible()) {
		map = new GMap2(mapDiv);
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
		geocoder.getLatLng(thisPoint, function(point){ addThisPropertySimple(mapDiv, point, thisPoint)});
		map.zoomToMarkers();
	}
	else {
		mapDiv.innerHTML = '<h5>Error</h5>';
	}
}

function addThisPropertySimple(mapDiv, point, prop) {
	if (point == null) {
		mapDiv.innerHTML = '<h5>No info</h5>';
		return;
	}
	bounds.extend(point);
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	map.setZoom(15); // set new zoom level
	try {
		var icon = new GIcon();
		icon.image = "/img/marker.png";
		icon.shadow = "/img/shadow.png";
		icon.iconSize = new GSize(18, 40);
		icon.shadowSize = new GSize(25, 40);
		icon.iconAnchor = new GPoint(6, 40);
		icon.infoWindowAnchor = new GPoint(5, 1);
	} catch(e) {}
	var marker = new PdMarker(new GLatLng(point.y,point.x),icon);
	map.addOverlay(marker);
	marker.setOpacity(100);
	marker.pdImage = icon.image;
	marker.display(true);
}
function drawGMap(prop) {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("googleMap"));
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
		geocoder.getLatLng(prop.Address, function(point){ addSingleMLSProperty(point, prop)});;
		map.zoomToMarkers();
	} else {
			$("googleMap").innerHTML = '<h5>Error</h5>';
	}
}

function addSingleMLSProperty(point, prop)
{
var bounds2 = new GLatLngBounds();
	if (point == null) {
			$("googleMap").innerHTML = '<h5>No Info</h5>';
			return;
	}
	bounds2.extend(point);
	map.setCenter(bounds2.getCenter(), map.getBoundsZoomLevel(bounds2));
	var info = prop.Address;
	try {
		var icon = new GIcon();
		icon.image = "/img/marker.png";
		icon.shadow = "/img/shadow.png";
		icon.iconSize = new GSize(18, 40);
		icon.shadowSize = new GSize(25, 40);
		icon.iconAnchor = new GPoint(6, 40);
		icon.infoWindowAnchor = new GPoint(5, 1);
	} catch(e) {}
	var marker = new PdMarker(new GLatLng(point.y,point.x),icon);
	map.addOverlay(marker);
	marker.pdImage = icon.image;

	marker.setTooltip(info);
	marker.allowLeftTooltips(false);
	marker.setTooltipHiding(true);
	marker.display(true);
	marker.showTooltip();

}

function drawGoogleMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("googleMap"));
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
		var part = [];
		parts = points.split('|');
		for (var i=0; i<parts.length; i++) {
			var items = parts[i].split('&amp;');
			for (var j=0; j<items.length; j++) {
				var tmp = items[j].split(':');
				part[tmp[0]] = tmp[1];
			}
			addPoint(part);
		}
		map.zoomToMarkers();
	} else {
			$("googleMap").innerHTML = '<h5>Error</h5>';
	}
}

function drawGoogleMap2() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("googleMap"));
		map.addControl(new GLargeMapControl());
		geocoder = new GClientGeocoder();
		var part = [];
		parts = points.split('|');
		for (var i=0; i<parts.length; i++) {
			var items = parts[i].split('&amp;');
			for (var j=0; j<items.length; j++) {
				var tmp = items[j].split(':');
				part[tmp[0]] = tmp[1];
			}
			addPoint2(part);
		}
		map.zoomToMarkers();
	} else {
			$("googleMap").innerHTML = '<h5>Error</h5>';
	}
}

function addPoint(data) {
	var tmp = {'NUM':data['NUM'], 'MLS':data['MLS'], 'Class':data['Class'], 'SF':data['SF'], 'Living':data['Living'], 'Beds':data['Beds'], 'Price':data['Price'], 'Baths':data['Baths'], 'Icon':data['Icon']};
	if (data['City'].length)
		geocoder.getLatLng(data['AddressNumber']+' '+data['AddressStreet']+', '+data['City']+', '+data['State']+', '+data['Zip'],
	function(point){ addProperty(point, tmp)});
}

function addPoint2(data) {
	var tmp = {'NUM':data['NUM'], 'MLS':data['MLS'], 'Type':data['Type'], 'SF':data['SF'], 'Beds':data['Beds'], 'Price':data['Price'], 'Baths':data['Baths'], 'Icon':data['Icon']};
	if (data['City'].length)
		geocoder.getLatLng(data['Address']+', '+data['District']+', '+data['Zip'], function(point){ addProperty2(point, tmp)});
}

function addProperty(point, prop) {
	if (point == null) {
		return;
	}
	bounds.extend(point);
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

	var img = new Image();
	if (prop.Icon)
		img.src = unescape(prop.Icon);
	else
		img.src = '/img/noimage.gif';

	var tooltip = '<img class="googleimg" src="'+img.src+'" /><br />';
	tooltip += prop.SF+' sf land<br />';
	tooltip += prop.Living+' living<br />';
	tooltip += prop.Beds+' br / '+prop.Baths+' ba<br />';
	tooltip += '<strong>'+prop.Price+'</strong>';

	icon = propIcon[prop.NUM];
	var marker = map.getMarkerById(prop.MLS);
	if (marker == null) {
		var marker = new PdMarker(new GLatLng(point.y,point.x),icon);
		marker.pdImage = icon.image;
		marker.pdHover = icon.pdHover;
		map.addOverlay(marker);

		GEvent.addListener(marker, 'mouseover', function() {
			highlightMarker(marker);
		});

		GEvent.addListener(marker, 'mouseout', function() {
			highlightItem(-1);
		});

		GEvent.addListener(marker, 'click', function() {
			showDetails(marker.mlsNo,true,'',true);
		});

	} else {
		// re-use marker
		marker.display(true);
		marker.setPoint(new GLatLng(point.y,point.x));
		marker.setImage(icon.image);
		marker.pdImage = icon.image;
		marker.pdHover = icon.pdHover;
		marker.oldImagePath = "";
	}
	marker.setOpacity(100);
	marker.hovering = false;
	marker.mlsNo = prop.MLS;
	marker.setTooltip(tooltip);
	marker.setId(prop.MLS);

	markerCount++;
}

function addProperty2(point, prop) {
	if (point == null) {
		return;
	}
	bounds.extend(point);
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

	var img = new Image();
	if (prop.Icon)
		img.src = unescape(prop.Icon);
	else
		img.src = '/img/noimage.gif';

	var tooltip = '<img class="googleimg" src="'+img.src+'" /><br />';
	tooltip += prop.Type+'<br />';
	tooltip += prop.SF+' sf land<br />';
	tooltip += prop.Beds+' br / '+prop.Baths+' ba<br />';
	tooltip += '<strong>'+prop.Price+'</strong>';

	icon = propIcon[prop.NUM];
	var marker = map.getMarkerById(prop.MLS);
	if (marker == null) {
		var marker = new PdMarker(new GLatLng(point.y,point.x),icon);
		marker.pdImage = icon.image;
		marker.pdHover = icon.pdHover;
		map.addOverlay(marker);

		GEvent.addListener(marker, 'mouseover', function() {
			highlightMarker(marker);
		});

		GEvent.addListener(marker, 'mouseout', function() {
			highlightItem(-1);
		});

		GEvent.addListener(marker, 'click', function() {
			showRentalDetails(marker.mlsNo);
		});

	} else {
		// re-use marker
		marker.display(true);
		marker.setPoint(new GLatLng(point.y,point.x));
		marker.setImage(icon.image);
		marker.pdImage = icon.image;
		marker.pdHover = icon.pdHover;
		marker.oldImagePath = "";
	}
	marker.setOpacity(100);
	marker.hovering = false;
	marker.mlsNo = prop.MLS;
	marker.setTooltip(tooltip);
	marker.setId(prop.MLS);
	markerCount++;
}

function highlightMarker(marker) {
	propertyId = -1;
	if (marker)
		propertyId = marker.getId();
	highlightItem(propertyId);
}

function highlightItem(propertyId) {
	if (currItem != -1) {
		marker = map.getMarkerById(currItem);
		if (marker) {
			marker.setImage(marker.pdImage);
			marker.hovering = false;
			marker.hideTooltip();
		}

		obj = $("mls" + currItem);
		objA = $("price" + currItem);
		if (obj)
			obj.style.backgroundColor = "white";
		if (objA)
			objA.style.color = "#a25729";

	}
	currItem = propertyId;

	if (currItem != -1) {
		marker = map.getMarkerById(currItem);
		if (marker) {
			marker.setImage(marker.pdHover);
			marker.hovering = true;
			marker.showTooltip();
		}
		obj = $("mls" + currItem);
		objA = $("price" + currItem);
		if (obj)
			obj.style.backgroundColor = "#DD6326";
		if (objA)
			objA.style.color = "white";

	}
}

function showBubble(mls) {
	if ($('bubble'+mls)) {
		$('bubble'+mls).setStyle({'display':'block'});
	}
}

function hideBubble(mls) {
	if ($('bubble'+mls))
		$('bubble'+mls).setStyle({'display':'none'});
}

function closePopup() {
	if (popupWin)
		popupWin.close();
	Dialog.closeInfo();
}

function MsgBox(msg) {
	Dialog.alert('<br>'+msg, {title:dialogs_title, className:dialogs_theme, width:500, height:120, showEffect: Element.show, hideEffect: Element.hide, okLabel:'OK', buttonClass: 'okButton', ok:function(win) {closePopup(); return true;} });
}

function alertMsg(msg) {
	Dialog.alert('<br>'+msg, {title:dialogs_title, className:dialogs_theme, width:500, height:120, showEffect: Element.show, hideEffect: Element.hide, okLabel:'OK', buttonClass: 'okButton'});
}

function showProgress() {
	Dialog.info("", {className:'alert', width:16, height:16, showProgress: true, showEffect: Element.show, hideEffect: Element.hide});
}

function hideProgress() {
	Dialog.closeInfo();
}

function showPrintVersionPopup(id) {
	//var a = window.open("/popups/detailsprintversion?id="+id,'printing','scrollbars=yes,width=900');
	popupWin = new Window({title:dialogs_title, className:dialogs_theme, width:900, height:600, showEffect: Element.show, hideEffect: Element.hide, resizable:false, closable:true, minimizable: false, maximizable:false, draggable: true, destroyOnClose: true, onClose: closePopup});
	popupWin.setAjaxContent("/popups/detailsprintversion?id="+id, {method:'get'}, true, true);
	popupWin.setZIndex(10000);
}

function showSendToFriendPopup(id) {
	popupWin = new Window({title:dialogs_title, className:dialogs_theme, width:600, height:450, showEffect: Element.show, hideEffect: Element.hide, resizable:false, closable:true, minimizable: false, maximizable:false, draggable: true, destroyOnClose: true, onClose: closePopup});
	popupWin.setAjaxContent("/popups/send_to_friend?id="+id, {method:'get'}, true, true);
	popupWin.setZIndex(10000);
}

function showRequestInfoPopup(id) {
	popupWin = new Window({title:dialogs_title, className:dialogs_theme, width:600, height:400, showEffect: Element.show, hideEffect: Element.hide, resizable:false, closable:true, minimizable: false, maximizable:false, draggable: true, destroyOnClose: true, onClose: closePopup});
	popupWin.setAjaxContent("/popups/request_info?id="+id, {method:'post'}, true, true);
	popupWin.setZIndex(10000);
}

function showVtourPopup(mls) {
	popupWin = new Window({title:dialogs_title, className:dialogs_theme, width:650, height:500, showEffect: Element.show, hideEffect: Element.hide, resizable:false, closable:true, minimizable: false, maximizable:false, draggable: true, destroyOnClose: true, onClose: closePopup});
	popupWin.setAjaxContent("/popups/vtour?mls="+mls, {method:'get'}, true, true);
	popupWin.setZIndex(10000);
}

function showDriveMapPopup(point) {
	popupWin = new Window({title:dialogs_title, className:dialogs_theme, width:635, height:400, showEffect: Element.show, hideEffect: Element.hide, resizable:false, closable:true, minimizable: false, maximizable:false, draggable: true, destroyOnClose: true, onClose: closePopup});
	popupWin.setAjaxContent("/popups/drivemap?point="+point, {method:'get'}, true, true);
	popupWin.setZIndex(10000);
}

function backToSearchResults() {

	if (backURL.length) {
		window.location.href = unescape(backURL);
		return;
	}

	if (currentDetails == 'property') {
		clearTimeout(t);
		$('propdetails').innerHTML = '';
		$('propdetails').style.display = 'none';

		if ($('agentdetails') && $('agentdetails').innerHTML.length) {
			$('detailsPageNum').style.display = 'block';
			$('agentdetails').style.display = 'block';
			currentDetails = 'agent';
		} else {
			if ($('detailsPageNum'))
				$('detailsPageNum').innerHTML = '';

			if (typeof(oldPageTitle) != 'undefined')
				$('page_title').innerHTML = oldPageTitle;

			$('results').style.display = 'block';
		}
	} else if (currentDetails == 'agent') {
		$('propdetails').innerHTML = '';
		$('propdetails').style.display = 'none';
		$('agentdetails').innerHTML = '';
		$('agentdetails').style.display = 'none';
		$('results').style.display = 'block';
		$('detailsPageNum').innerHTML = '';
	} else {
		$('propdetails').innerHTML = '';
		$('propdetails').style.display = 'none';
		$('agentdetails').innerHTML = '';
		$('agentdetails').style.display = 'none';
		$('results').style.display = 'block';
	}
}


function showDetails(mls,clearCache) {
	// reset preview left position
	currentDetails = 'property';
	left = 0;
	var args = '';
	// collect areas if present
	if ($('ajaxpropsearch')) {
		for (i=0; i<$('ajaxpropsearch').elements.length; i++) {
			var obj = $('ajaxpropsearch').elements[i];
			if (!obj.id.length)
				continue;
			switch (obj.type) {
				case 'checkbox':
					args += "&"+escape(obj.name)+'='+obj.checked;
					break;
				break;
			}
		}
	}
	if (directMLS.length) {
		args += "&direct=1";
	} else {
		args += "&direct=0";
	}

	new Ajax.Request(ajaxDetailsController,
	{
		method: 'post',
		parameters: args+'&mls='+mls+'&backURL='+backURL,
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			/*
			bigImages = responseJS.bigImages;
			smallImages = responseJS.bigImages;
			if (currentSlide)
				clearTimeout(t);
			preloads = [];
			currentSlide = -1;
			showing = 'image';
			photoTitles = false;
			photoLinks = false;
			if (smallImages.length) {
				totalSmallLoaded = smallImages.length;
				totalBigLoaded = bigImages.length;
				for (var i = 0; i < smallImages.length; i++) {
					var image = new Image();
					image.onLoad = smallImageLoaded();
					image.src = smallImages[i];
					preloads.push(image);
				}
			}
			*/
			/*
			if (bigImages.length) {
				totalBigLoaded = bigImages.length;
				for (var i = 0; i < bigImages.length; i++) {
					var image = new Image();
					image.onLoad = bigImageLoaded();
					image.src = bigImages[i];
					image.id = 'img'+i;
					preloads.push(image);
				}
			}
			*/
			if ($('results'))
				$('results').style.display = 'none';
			if (responseJS.pageTitle) {
				$('page_title').innerHTML = responseJS.pageTitle;
			}

			if ($('detailsPageNum')) {
				if (!$('agentdetails').innerHTML.length)
					$('detailsPageNum').innerHTML = responseJS.prevnextLinks;
				else $('detailsPageNum').style.display = 'none';
			}

			if ($('agentdetails'))
				$('agentdetails').style.display = 'none';

			if ($('propdetails')) {
				$('propdetails').innerHTML = responseJS.details;
				$('propdetails').style.display = 'block';
				createSlideshowPlayer('slideshow_holder', mls, 600, 523);
			}

		}
	});
}
function getDetails(mls,clearCache) {
	// reset preview left position
	currentDetails = 'property';
	left = 0;
	var args = '';
	if (directMLS.length) {
		args += "&direct=1";
	} else {
		args += "&direct=0";
	}

	new Ajax.Request(ajaxDetailsController,
	{
		method: 'post',
		parameters: args+'&mls='+mls+'&backURL='+backURL,
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			if ($('results'))
				$('results').style.display = 'none';
			if (responseJS.pageTitle) {
				$('page_title').innerHTML = responseJS.pageTitle;
			}

			if ($('detailsPageNum')) {
				if (!$('agentdetails').innerHTML.length)
					$('detailsPageNum').innerHTML = responseJS.prevnextLinks;
				else $('detailsPageNum').style.display = 'none';
			}

			if ($('agentdetails'))
				$('agentdetails').style.display = 'none';

			if ($('propdetails')) {
				$('propdetails').innerHTML = responseJS.details;
				$('propdetails').style.display = 'block';
				createSlideshowPlayer('slideshow_holder', mls, 600, 523);
			}

		}
	});
}
/*
function smallImageLoaded() {
	if (--totalSmallLoaded<=0) {
			if (bigImages.length) {
				totalBigLoaded = bigImages.length;
				for (var i = 0; i < bigImages.length; i++) {
					var image = new Image();
					image.onLoad = bigImageLoaded();
					image.src = bigImages[i];
					image.id = 'img'+i;
					preloads.push(image);
				}
			}
	}
}

function bigImageLoaded() {
	if (--totalBigLoaded<=0) {
		t = setTimeout('runSlideShow()', 1000);
	}
}
*/
function showAgentDetails(id, page) {
	currentDetails = 'agent';

	new Ajax.Request(ajaxAgentDetailsController,
	{
		method: 'post',
		parameters: {
			id: id,
			pageNumber: page,
			perpage: perpage
		},
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();

			if ($('results'))
				$('results').style.display = 'none';

			if (responseJS.pageTitle) {
				$('page_title').innerHTML = responseJS.pageTitle;
			}

			if ($('detailsPageNum')) {
				$('detailsPageNum').innerHTML = responseJS.prevnextLinks;
			}

			if ($('propdetails'))
				$('propdetails').style.display = 'none';

			if ($('agentdetails')) {
				$('agentdetails').innerHTML = responseJS.details;
				$('agentdetails').style.display = 'block';
			}
		}
	});
}

function getNarrowList(){
	// make new request for left narrow lists table
	args = "narrowList=true";
	for (i=0; i<$('ajaxpropsearch').elements.length; i++) {
		var obj = $('ajaxpropsearch').elements[i];
		if (!obj.id.length)
		continue;
		switch (obj.type) {
		case 'checkbox':
			args += "&"+escape(obj.name)+'='+obj.checked;
			break;
		default:
			args += "&"+escape(obj.id)+'='+escape(obj.value);
		break;
		}
	}
	if (locationID.length)
		args += "&location="+locationID;
	if (alone_city.length)
		args += "&alone_city="+alone_city;
	else
		args += "&alone_city=";

		new Ajax.Request(ajaxSearchController,
		{
			method: 'post',
			parameters: args,
			onSuccess: function(transport){
				var responseJS = transport.responseText.evalJSON();
		if ($('area') && responseJS.area) {
			$('area').innerHTML = responseJS.area;
			assignAjaxEvent();
		}
				if (responseJS.narrowList) {
			var el = $('search_area').down('.floatleft .google_map');
			if (el) {
				el.style.background = '#f5fbff';
				el.className = 'narrow_map';
				el.innerHTML = responseJS.narrowList;
			} else {
				var el = $('search_area').down('.floatleft .narrow_map');
				if (el) {
					el.style.background = '#f5fbff';
					el.className = 'narrow_map';
					el.innerHTML = responseJS.narrowList;
				}
			}
		}
			}
		});
}

function toBoolean(inputString){
	if(typeof(inputString)=="string")
		inputString=inputString.toLowerCase();
	switch(inputString){
		case "1":
		case "true":
		case "yes":
		case "y":
		case "on":
		case 1:
		case true:
		return true;
		break;
	default: return false;
	}
}

function calculateRates(value) {
	var table = document.getElementById("calculatableRates");
	if (!table || !table.rows || table.rows.length < 1) {
		return;
	}
	var re = /calculate/i;
	// see all rows
	for (var j=0;j<table.rows.length;j++) {
		var row = table.rows[j];
		for (var i=0;i<row.cells.length;i++) {
			var cell = row.cells[i];
			var id = cell.getAttributeNode('id');
			var val = cell.getAttributeNode('val');
			if (id && id.value.match(re) && val) {
				if (parseFloat(val.value))
					cell.innerHTML = printf(parseFloat(val.value)/value,2);
			}
		}
	}
}

function printf(v,d){
	var z='00000000';
	v=v*1;
	d=Math.min(z.length,Math.max(0,Math.floor(d*1)));
	var n=v<0;
	v=Math.abs(v);
	var f=''+(v-Math.floor(v))+z;
	v=''+Math.floor(v);
	n=n&&((v*1)||(f*1))?'-':'';
	var s=(d?('.'+f.substring(2,2+d)):'');
	for(var i=1;i<=v.length;i++){
		s=v.substring(v.length-i,v.length-i+1)+s;
		if(!(i%3)&&(i<v.length)){
			s=','+s}}
	return n+s;
}

// quick date/time chooser block adding
function add_new_date() {
	var mnths = new Array('','January','February','March','April','May','June','July','August','September','October','November','December');
	var oDiv = $('dates');
	var tm = new Date;
	var month=tm.getMonth()+1;
	var year=tm.getYear();
	year+=year<200?1900:0;
	var day=tm.getDate();
	var sel = '';
	var tmp =
'<label for="date" class="description">Date</label>'+
'<select name="post_d[]">';
	for (var i=1; i<=31; i++) {
		sel = day==i ? 'selected="selected"' : '';
		tmp += '<option value="'+i+'" '+sel+'>'+i+'</option>';
	}
	tmp += '</select>'+
'<select name="post_m[]">';
	for (var i=1; i<=12; i++) {
		sel = month==i ? 'selected="selected"' : '';
		tmp += '<option value="'+i+'" '+sel+'>'+mnths[i]+'</option>';
	}
	tmp += '</select>'+
'<select name="post_y[]">';
	for (var i=0; i<=1; i++)
		tmp += '<option value="'+(year+i)+'">'+(year+i)+'</option>';
	tmp += '</select>'+
'<input type="button" name="del_date" id="del_date" class="button" value="Delete This Date" onclick="delete_date(\'date_'+dates_counter+'\'); return false;" />'+
'<br><br>'+
'<label for="timehourfrom" class="description">Time of Open House</label>'+
'<select name="post_timehourfrom[]" id="timehourfrom[]" style="width: 4.5em;">';
	for (var i=1; i<=12; i++)
		tmp += '<option value="'+i+'">'+i+'</option>';
	tmp += '</select>'+
'<select name="post_timeminfrom[]" id="timeminfrom[]" style="width: 4.5em;">'+
'<option value="00" selected="selected">00</option>'+
'<option value="15">15</option>'+
'<option value="30">30</option>'+
'<option value="45">45</option>'+
'</select>'+
'&nbsp;-&nbsp;'+
'<select name="post_timehourto[]" id="timehourto[]" style="width: 4.5em;">';
	for (var i=1; i<=12; i++)
		tmp += '<option value="'+i+'">'+i+'</option>';
	tmp += '</select>'+
'<select name="post_timeminto[]" id="timeminto[]" style="width: 4.5em;">'+
'<option value="00" selected="selected">00</option>'+
'<option value="15">15</option>'+
'<option value="30">30</option>'+
'<option value="45">45</option>'+
'</select>'+
'<select name="post_timemerto[]" id="timemerto[]" style="width: 4.5em;">'+
'<option value="AM">AM</option>'+
'<option value="PM" selected="selected">PM</option>'+
'</select><br>'+
'<label class="description">&nbsp;</label><br><br>';
	var oSubDiv  = document.createElement("DIV");
	oSubDiv.setAttribute("id", 'date_'+dates_counter);
	oSubDiv.innerHTML = tmp;
	oDiv.appendChild(oSubDiv);
	dates_counter++;
	return;
}

function delete_date(elem) {
	var oDiv = $(elem);
	oDiv.parentNode.removeChild(oDiv);
}

function clientSideValidate(fname)
{
	var form = $(fname);

	var fields = document.getElementsByClassName('contucts req', form);
	var errors = 0;
	var msg = '';
	for (var i = 0; i < fields.length; i++) {
			var field = fields[i];
			var label = field.getElementsByTagName('label').item(0);
			var tmp = field.getElementsByTagName('input');
			if (!tmp.length) tmp = field.getElementsByTagName('select');
			if (!tmp.length) tmp = field.getElementsByTagName('textarea');
			for (var j = 0; j < tmp.length; j++) {
					var input = tmp.item(j);
					if (!$F(input)) {
							Element.addClassName(field, 'invalid');
							errors++;
					}
			}
	}
	var input = $('email');
	if ($F(input) && !$F(input).match(/^[a-zA-Z0-9_.]+@[a-zA-Z0-9_.]+\.[a-zA-Z]{2,4}$/)) {
			field = input.parentNode;
			Element.addClassName(field, 'invalid');
			msg += "- E-mail must be valid e-mail address\n";
	}
	if (errors)
			msg += "- Please fill in required fields\n";
	if (msg != '') {
			alert(msg);
			return false;
	}
	return true;
}

function makeValid(input) {
	var field = input.parentNode;
	Element.removeClassName(field, 'invalid');
}

function sm(s1,s2) {
	location.href='mailto:'+s1+'@'+s2;
}

function getGlossaryContent(letter) {
	if ($('glossary_content'))
		$('glossary_content').innerHTML = '<img src="/img/progress2.gif" width="90" height="16" border="0">';
	new Ajax.Request(ajaxGlossaryController,
	{
		method: 'post',
		parameters: 'letter='+letter,
		onSuccess: function(transport){
			var responseJS = transport.responseText.evalJSON();
			if ($('glossary_content'))
				$('glossary_content').innerHTML = responseJS.text;
		}
	});

}

function printThis() {
	window.print();
/*
	var a = window.open('','printing','scrollbars=yes,width=700');
	a.document.open("text/html");
	a.document.write('<html><head><base href="http://mk/root/" /><link href="../styles.css" rel="stylesheet" type="text/css" /><link rel="stylesheet" href="templates/form.css" /><link rel="stylesheet" href="templates/bookingforms.css" /></head><body>');
	a.document.write(document.getElementById('print_area').innerHTML);
	a.document.write('</body></html>');
	a.document.close();
	a.print();
	a.close();
*/
}

function getMap(id) {
	if (!id)
		return;
	$('big_map').innerHTML = '<img src="/img/progress2.gif" width="90" height="16" />';
	$('download_map').innerHTML = '';
	new Ajax.Request('/utils/ajax_resources_maps_controller', {
		method:'post',
		parameters: 'id='+id,
		onSuccess: function(transport){
			var response = transport.responseText.evalJSON();
			if (response.picture) {
				var img = new Image;
				img.src = '/utils/phpThumb?src='+response.picture;
				$('big_map').innerHTML = '<img src="/utils/phpThumb?src='+response.picture+'" border="0" />';
				if (response.pdffile && response.pdffile.length) {
					$('download_map').innerHTML = '<a href="'+response.pdffile+'">Dowload PDF Map</a>';
				}
			} else {
				$('big_map').innerHTML = '';
			}
		},
		onFailure: function(){
			$('big_map').innerHTML = '';
		}
	});
}

function createSlideshowPlayer(thePlaceholder, MLS, width, height) {

	var flashvars = {
		mls:MLS
	};
	var params = {
		wmode: "transparent",
		allowfullscreen:"true",
		allowscriptaccess:"always"
	};
	var attributes = {
	};
	swfobject.embedSWF("slideshow.swf", thePlaceholder, width, height, "9.0", false, flashvars, params, attributes);
}


Ajax.Request.prototype.abort = function() {
	// prevent and state change callbacks from being issued
	this.transport.onreadystatechange = Prototype.emptyFunction;
	// abort the XHR
	this.transport.abort();
	// update the request counter
	Ajax.activeRequestCount--;
	if (Ajax.activeRequestCount < 0) {
		Ajax.activeRequestCount = 0;
	}
};


init();
