var lastSavedSearch = '';
var searchParams = '';
var propertyDetails;
var propertyFeedId;
var ssParams = '';

/* Map variables */
var showAlertBox = true;
var smallMap;
var smallMapMarkers = [];
var bigMap;
var bigMapInitialized = false;
var bmBounds;
var bigMapOptions;
var infoBox;
var bigMapMgr = null;
var bigMapCurrentMarkers = [];
var bigMapMarkersRef;
var bigMapMarkers = [];
var detailsMap;
var bigDetailsMap;
var geocoder;

var currentView = 'map';
var mapSearchEnabled = false;
var savedPolygon = "";
var slideTicker = null;
var refPicList = [];
var currentPicIndex = 0;
var alertFormSubmitted = false;
var topOffset = parseInt($(window).height()/3);
var leftOffset = parseInt($(window).width()/3);
var lotSizeUnit = 'sqrft';

function submitSearch(){
	var params = gatherSearchValues();
	mapSearchEnabled = false;
	if(params != ""){
		var url = "index.cfm?event=idx.ajaxSearch&" + params;
		callSearch(url);
	    $("#result-message").show();
	    $("#toggle-view").show();
	    $("#results-section").slideDown('10000');
	    trackGAFormSubmit('Search','IDX',1);
    } else {
		displayStatusMsg("Please enter a main criteria for the search.");
	}
}

function checkAlertSubmit(fname, lname, email, phone, phonereq, rid){
	var msg = "";
	var emailFilter = /^[\w\.\-]{2,}@+[\w\.\-]{2,}\.+[a-zA-Z]{2,4}$/;
	if( $.trim(fname) == '')
		msg = "Please enter a first name.";
	else if( $.trim(email) == '' || !emailFilter.test($.trim(email)) )
		msg = "Please enter a valid email address.";
	else if( phonereq && $.trim(phone) == '' )
		msg = "Please enter a phone number.";
	if(msg == ''){
		lastSavedSearch = gatherSearchValues();
		if(lastSavedSearch != ""){
			alertFormSubmitted = true;
			createAccount(fname, lname, email, phone, rid);
			$("#email-alerts-form").hide(0);
		} else {
			displayStatusMsg("Please enter a main criteria for the search.");
		}
	} else {
		displayStatusMsg(msg);
	}
}

function gatherSearchValues(){
	var values = "";
	var params = getFancyValues($($(".ui-tabs-selected a").attr("href")).find('.current-loc').attr("href"));
	if(params.length > 0){
		values += params.join("&");
		ssParams = params;
	}
	var inputs1 = getValues($(':input.activeInput',$(".ui-tabs-selected a").attr("href")));
	if(inputs1.length > 0){
		values += '&' + inputs1.join("&");
		ssParams = params;
	}
	if(($(".ui-tabs-selected a").attr("href") == '#tab-address' && $("#STREETADDRESS").val() == '')|| values == '')
		return "";
	var inputs2 = getValues($(':input','#property-types'));
	if(inputs2.length > 0){
		values += '&' + inputs2.join("&");
	}
	var params2 = getFancyValues($("#bottom-options").find(".geo-loc"));
	if(params2.length > 0){
		values += '&' + params2.join("&");
	}
	var inputs3 = getValues($(':input','#options-shell'));
	if(inputs3.length > 0){
		values += '&' + inputs3.join("&");
	}
	return values;
}

function callSearch(url)
 {	
 	if ($("#show-search-link").html() == "hide criteria"){
        $("#show-search-link").trigger('click');
    }
    if ($("#show-options-link").html() == "hide criteria") {
        //.trigger('click') doesn't work for this button.  You know why?  Maybe the span wrapper? 
        //$("#show-options-link").trigger('click');
        $('#bottom-options').slideUp('fast');
        $("#show-options-link").html('more criteria').css('background', 'url(http://www.z57.com/creative/idx2/images/control-270-small.png) no-repeat right center');
    }
    if($("#tab-results-1").length == 0)
		addResultsTabs();
 	$('#mapMsg').hide(0);
 	$('.results-shell').tabs('select', '#tab-results-1');
 	$('.ajax-loader').show(0);
 	trackGAPageView("/mx/idx/searchresultspage.cfm");
	$.getJSON(url, function(json){
		$('.ajax-loader').hide(0);
        scrollTo($('#results-section').offset().left,$('#results-section').offset().top);
		$("#tab-results-1").html(json.LISTHTML);
		$("#tab-results-2").html(json.MAPHTML);
		initBigMap();
		if(currentView == 'list'){
			if($("#tab-results-2").length > 0 && $("#tab-results-2").html() != '')
				initSmallMap(true);
		} else {
			setupBigMap();
		}
	});
}

function mapIt(){
	var address = $.trim($('#STREETADDRESS').val().replace(/'/g,"\'"));
	if(address != ''){
		geocoder.geocode( { 'address': address }, function(results, status) {
	      if (status == google.maps.GeocoderStatus.OK){
			$('#cLat').val(results[0].geometry.location.lat());
			$('#cLon').val(results[0].geometry.location.lng());
			$('#addrGeocodingMsg').hide();
	      } else {
	      	$('#cLat').val('');
			$('#cLon').val('');
	      	$('#addrGeocodingMsg').fadeIn('200');
	      }
	    });
	}
}

function mapSearch(justValues){
	var values = "";
	if(!justValues){
		var c = bigMap.getBounds();
		var sw = c.getSouthWest();
		var ne = c.getNorthEast();
		var p = 	sw.lng() + ' ' + sw.lat() + ',' +
		 			ne.lng() + ' ' + sw.lat() + ',' +
					ne.lng() + ' ' + ne.lat() + ',' +
					sw.lng() + ' ' + ne.lat() + ',' +
					sw.lng() + ' ' + sw.lat();
		values = "polygon=" + p;
		savedPolygon = p;
	} else {
		values = "polygon=" + savedPolygon;
	}
	var params = getFancyValues($("#bottom-options").find(".geo-loc"));
	if(params.length > 0){
		values += params.join("&");
	}
	var inputs = getValues($(':input','#options-shell'));
	if(inputs.length > 0){
		values += '&' + inputs.join("&");
	}
	var inputs2 = getValues($(':input','#property-types'));
	if(inputs2.length > 0){
		values += '&' + inputs2.join("&");
	}
	if(justValues)
		return values;
	else
		callSearch("index.cfm?event=idx.ajaxSearch&" + values);
	mapSearchEnabled = true;
}

function getFancyValues(nodeRef){
	var params = [];
	$(nodeRef).each(function(){
		if($(this).find("ul li").size() > 0){
			var dataType = $(this).attr("dataType");
			var areaID = $(this).attr("areaID");
			var values = [];
			$(this).find("ul li").each(function(){
				if(areaID != null)
					values.push(areaID+'||'+escape($(this).attr("val")));
				else
					values.push(escape($(this).attr("val")));
			});
			params.push(dataType+"="+values.join(","));
		}
	});
	return params;
}

function getValues(inputs)
{
	var params = [];
	$(inputs).each(function() {
		if(this.value != '' && this.name != ''){
			if(this.type == 'text' || this.type == 'hidden'){
				if(this.id == 'price-input-high' || this.id == 'price-input-low')
					params.push(this.name + '=' + escape(this.value.replace(/[^0-9]/g,'')));
				else
					params.push(this.name + '=' + escape(this.value));
			} else if((this.type == 'checkbox' || this.type == 'radio') && this.checked){
				params.push(this.name + '=' + escape(this.value));
			} else if(this.type == 'select-one' && !$(this).hasClass("searchList")){
				params.push(this.name + '=' + escape(this.value));
			}
		}
	});
	return params;
}

function getDetails(propertyId,feedId,source)
{	
	if($("#tab-details-1").length == 0)
		addDetailsTabs();
	var url = "index.cfm?event=idx.ajaxDetails&PropertyID=" + propertyId + "&feedID=" + feedId + "&source=" + source;
	$('.ajax-loader').show(0);
	trackGAPageView("/mx/idx/listingdetails.cfm");
	$.getJSON(url, function(json){
		$('.ajax-loader').hide(0);
        scrollTo($('#results-section').offset().left,$('#results-section').offset().top);
		var html = json.HTML;
		$("#tab-details-1").html(html);
		$("#tab-details-2").html(html);
		if(json.PICS == 1.0)
			loadImages();
		initializeDetailsMap();
		$('.results-shell').tabs('select', '#tab-details-1');
		$('.map-shell').tabs('select', '#tab-details-2');
		if (window.addthis){
			window.addthis = null;
		}
		var addthis_config = {"data_track_clickback":true};
		$.getScript("http://s7.addthis.com/js/250/addthis_widget.js?domready=1&username=z57re",	function(){} );
	});
}


function loadList(listRef, dataType, areaID){
	if($(listRef).children("option").size() == 0){
		var params = "&dataType=" + dataType;
		if(areaID != null)
			params += "&areaID=" + areaID;
		$.getJSON(autocompleteURL + "&format=html"+params, function(json){
			var html = json.DATA;
			$(listRef).html(html);
		});
	}
}

function addItem(container, value, text){
	if(this.value != ''){
		var newValue = '<li val="'+value+'"><span>'+text+'</span><a href="#" class="removeItem">X</a></li>';
		if($(container).children('li[val="'+value+'"]').length == 0)
			$(container).append(newValue);
	}
}

function loadImages(){
	$("div.scrollable").scrollable({
			size: 4
	});
	$("div.scrollable div.items div img").unbind("click");
	$("div.scrollable div.items div img").click(function() {
		var picSrc = $(this).attr('src').replace(/thumbs/,'photos');
		$(".photolarge").attr({
	         src:picSrc,
	         height:"225",
	         width:"300"
	       });
	});
}

function loadSlideshow(pics, feedid){
	var picSrc = "http://images.obiwebservices.com/listings/" + feedid + "/photos/";
	var picArr = pics.split(",");
	refPicList = [];
	picIndex = 0;
	$("#slideshow p").html("Image <span>1</span> of " + picArr.length);
	$("#imgSource").html('<div class="activePic"><p>Your slideshow is loading...</p></div>');
	for(var i = 0; i< picArr.length; i++){
		refPicList.push("slideImg"+i);
		$("#imgSource").append('<img id="slideImg'+i+'" style="display: none;" src="' + picSrc + picArr[i] + '.jpg" width="400" height="300" alt="" \/>');
	}
	$("#slideshow").show(200);
	startStopSlideshow();
}

function startStopSlideshow(){
	if(slideTicker != null){
		clearTimeout(slideTicker);
		slideTicker = null;
	} else {
		changeSlideImage();
		slideTicker = setInterval("cycle()",5000);
	}
}

function browseSlideshow(goback){
	if(slideTicker != null){
		clearTimeout(slideTicker);
		slideTicker = null;
	}
	if(goback)
		if(picIndex < 1)
			picIndex = refPicList.length - 1;
		else
			picIndex -= 1;
	else
		if(picIndex < (refPicList.length - 1))
			picIndex += 1;
		else
			picIndex = 0;
	changeSlideImage();
}

function changeSlideImage(){
	var currImg = $("#imgSource .activePic");	
	currImg.removeClass("activePic");
	$("#slideImg"+picIndex).addClass("activePic");
	currImg.hide('fast', function(){ $("#slideImg"+picIndex).show(250); });
	$("#slideshow p span").html(picIndex+1);
}

function cycle(){
	if(picIndex < (refPicList.length - 1))
		picIndex += 1;
	else
		picIndex = 0;
	changeSlideImage();
}

function callFormTB(msg,height,width,form,params)
{
	var d = new Date();
	var url = "index.cfm?event=idx.thickbox&form=" + form + params + "&d="+d.getDate() + d.getHours() + d.getMinutes() + d.getMilliseconds();
	$.get(url, function(data){
		$("#formDiv").html(data);
		tb_show(msg,"#TB_inline?height="+height+"&width="+width+"&inlineId=formDiv",true);
	});
	trackGAPageView("/mx/idx/forms/"+form+".cfm");
}

function cancelTB()
{
	tb_remove();
}

function logout()
{
	var cookies = document.cookie.split(";");
	for (var i = 0; i < cookies.length; i++)
		SetCookie(cookies[i].split("=")[0],'x',true);
	window.location = 'index.cfm?event=idx.logout';
}

function checkEmailLogin(email,redirect)
{
	$.getJSON("index.cfm?event=idx.ajaxCheckEmailLogin&email="+email, function(json){
		var name = json.NAME;
		var id = json.ID;
		var mail = json.EMAIL;
		if(name!=''){
			SetCookie('name',name,false);
			SetCookie('id',id,false);
			SetCookie('email',mail,false);
			cancelTB();
			setupTabs();
			if(lastSavedSearch != ''){ 
				saveSearch();
				lastSavedSearch = '';
			}
            trackGAFormSubmit('Login','IDX',1);
		}else{
			$("#errorLogin").css("display","inline");
		}
	});
}

function createAccount(fname,lname,email,phone,rid)
{
	$.getJSON("index.cfm?event=idx.ajaxCreateAccount&fname="+fname+"&lname="+lname+"&email="+email+"&phone="+phone+"&rid="+rid, function(json){
		var name = json.NAME;
		var id = json.ID;
		var mail = json.EMAIL;
		if(id !='' && name != '' && GetCookie('id') == null){
			SetCookie('name',name,false);
			SetCookie('id',id,false);
			SetCookie('email',mail,false);
			cancelTB();
			setupTabs();
			if(lastSavedSearch != ''){
				callSearch("index.cfm?event=idx.ajaxSearch&" + lastSavedSearch);
				saveSearch();
				lastSavedSearch = '';
			}
		} else if(id == 'confirmation'){
			cancelTB();
			callFormTB('Confirmation Email',200,200,'confirmation','');
		}
	});
}

function updateAccount(fname,lname,email,phone,rid)
{
	$.getJSON("index.cfm?event=idx.ajaxUpdateProfile&fname="+fname+"&lname="+lname+"&email="+email+"&phone="+phone+"&rid="+rid, function(json){
		var result = $.trim(json.RESULT);
		if(result == 'T'){
			cancelTB();
		}
	});
}

function setupTabs()
{	
	var url = '';
	$("#result-message").show();
    $("#toggle-view").show();
    $("#results-section").slideDown('10000');
	$.get("index.cfm?event=idx.logged", function(data){
		$("#prop-organizer-btns").html(data);
	});
	addPropTabs();
}

function checkSmallMap(initMap){
	if($("#tab-results-2").length > 0 && $("#tab-results-2").html() != ''){
		initSmallMap(initMap);
	}
}

function addResultsTabs(){
	$('#list-results-tab').tabs("add","#tab-results-1","Results");
	$('#map-results-tab').tabs("add","#tab-results-2","Results");
	$('#tab-results-1, #tab-results-2').addClass('results-panel clearfix');
}

function addDetailsTabs(){
	$('#list-results-tab').tabs("add","#tab-details-1","Listing Details");
	$('#map-results-tab2').tabs("add","#tab-details-2","Listing Details");
	$('#tab-details-1, #tab-details-2').addClass('details-panel clearfix');
}

function addPropTabs(){
	$('#list-results-tab').tabs("add","#tab-saved-listings-1","Saved Listings");
	$('#list-results-tab').tabs("add","#tab-saved-searches-1","Saved Searches");
	$('#map-results-tab').tabs("add","#tab-saved-listings-2","Saved Listings");
	$('#map-results-tab2').tabs("add","#tab-saved-searches-2","Saved Searches");
	
	$('#tab-saved-listings-1, #tab-saved-listings-2').addClass('results-panel clearfix');
	$('#tab-saved-searches-1, #tab-saved-searches-2').addClass('saved-searches-panel clearfix');
	
	loadPropTabs();
}

function loadPropTabs(){
	getSavedProperties();
	getSavedSearches();
}

function getSavedProperties(){
	$('.ajax-loader').show(0);
	$.getJSON("index.cfm?event=idx.ajaxSavedProperties", function(JSON){
		$("#tab-saved-listings-1").html(JSON.HTMLLIST);
		$("#tab-saved-listings-2").html(JSON.HTMLMAP);
		$('.ajax-loader').hide(0);
	});
}

function getSavedSearches(){
	$('.ajax-loader').show(0);
	$.getJSON("index.cfm?event=idx.ajaxSavedSearches", function(JSON){
		$("#tab-saved-searches-1").html(JSON.HTML);
		$("#tab-saved-searches-2").html(JSON.HTML);
		$('.ajax-loader').hide(0);
		if(currentView == 'list'){
			$('.results-shell').tabs('select', "#tab-saved-searches-1");
		} else {
			$('.map-shell').tabs('select', "#tab-saved-searches-2");
		}
	});
}

function SetCookie (name, value, deleteCookie)
{
  var argv = SetCookie.arguments;  
  var argc = SetCookie.arguments.length;
  var date = new Date();
  if(deleteCookie){ date.setTime(date.getTime()-(24*60*60*1000)); }
  else { date.setTime(date.getTime()+(1000*24*60*60*1000)); }
  var path = (argc > 3) ? argv[3] : null;  
  var domain = (argc > 4) ? argv[4] : null;  
  var secure = (argc > 5) ? argv[5] : false;  
  document.cookie = name + "=" +escape( value ) + ";expires=" + date.toGMTString() +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
  
}

function GetCookie (name) {
    var arg = name + "=";  
    var alen = arg.length;  
    var clen = document.cookie.length;  
    var i = 0;  
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
        {
            return getCookieVal(j);    
        }
        i = document.cookie.indexOf(" ", i) + 1;    
        if (i == 0) break;   
    }  
    return null;
}

function getCookieVal (offset) {
    var endstr = document.cookie.indexOf (";", offset);  
    if (endstr == -1) { endstr = document.cookie.length; }
    return unescape(document.cookie.substring(offset, endstr));
}

function saveSearch()
{
	var params = "";
	if(mapSearchEnabled)
		params = mapSearch(true);
	else
		params = gatherSearchValues();
	if(GetCookie('id')==null){
		lastSavedSearch = params;
		callFormTB('Sign Up',250,478,'register','');
	} else {
		if(params != ""){
			var url = "index.cfm?event=idx.ajaxSaveSearch&"+params;
			$.getJSON(url, function(data){
				var result = $.trim(data.VALUE);
				if(result == 'T')
				{
					$("#statusMsg > p").html("Your search has been saved successfully! To receive new listing alerts click <br /><img src='http://www.z57.com/creative/idx2/images/mail-plus.png'>Subscribe to Email Alerts.");
					$("#statusMsg").fadeIn(250);
					setTimeout("$('#statusMsg').fadeOut(750)",5000);
					getSavedSearches();
				}
			});
		}else{
			displayStatusMsg("Please select a main search criteria to save.");
		}
	}
}

function deleteSearch(id)
{
	$("#confirmDeleteMsg").fadeOut(150);
	var url = "index.cfm?event=idx.ajaxDeleteSearch&id="+id;
	$.getJSON(url, function(json){
		var html = json.HTML;
  		$("#search"+id).remove();
		displayStatusMsg("This search has been deleted.");
	});
}

function saveProperty(mls,mlsid,obid,address)
{
  if(GetCookie('id') == null){
  	callFormTB('Register Page!',400,400,'register','');
  } else {
	  var url = "index.cfm?event=idx.ajaxSaveProperty&MLS="+mls+"&MLSID="+mlsid+"&OBID="+obid+"&ADDRESS="+address;
	  $.getJSON(url, function(data){
			var result = $.trim(data.VALUE);
			if(result == 'T'){
				displayStatusMsg("This Property has been saved successfully!");
				getSavedProperties();
			}
		});
	}
}

function confirmDeleteSearch(id){
	$("#confirmDeleteMsg > a.delete-link-confirm").removeClass("delete-listing-link-confirm");
	$("#confirmDeleteMsg > a.delete-link-confirm").addClass("delete-search-link-confirm");
	$("#confirmDeleteMsg > a.delete-link-confirm").attr("searchid",id);
	$("#confirmDeleteMsg > p").html("Are you sure you want to delete this saved search?");
	$("#confirmDeleteMsg").fadeIn(250);
}

function confirmDeleteProperty(id){
	$("#confirmDeleteMsg > a.delete-link-confirm").removeClass("delete-search-link-confirm");
	$("#confirmDeleteMsg > a.delete-link-confirm").addClass("delete-listing-link-confirm");
	$("#confirmDeleteMsg > a.delete-listing-link-confirm").attr("obid",id);
	$("#confirmDeleteMsg > p").html("Are you sure you want to delete this property?");
	$("#confirmDeleteMsg").fadeIn(250);
}

function deleteSavedProperty(id)
{
	$("#confirmDeleteMsg").fadeOut(150);
	var url = "index.cfm?event=idx.ajaxDeleteSavedProperty&id="+id;
	$.getJSON(url, function(json){
		var html = json.HTML;
  		$(".property"+id).remove();
		displayStatusMsg("This property has been deleted.");
	});
}

function loadMLSDisclaimer(mlsIDs) {
	$("#footer-legal").show();
	var url = "index.cfm?event=idx.ajaxMLSDisclaimer&mlsids="+mlsIDs;
	$.getJSON(url, function(json) {
		$("#footer-legal").html(json.HTML);
	});
}

function displayStatusMsg(msg){
	$("#statusMsg > p").html(msg);
	$("#statusMsg").fadeIn(250);
	setTimeout("$('#statusMsg').fadeOut(750)",1500);
}

function toggleAlerts(id, enable){
	var url = "index.cfm?event=idx.toggleAlerts&id=" + id + "&enable=" + enable;
	$.getJSON(url, function(json){
		if(json.SUCCESS == 'T'){
			if(json.VALUE){
				$('#search'+id+' a.email-alerts-link').html("Unsubscribe from Email Alerts");
				$('#search'+id+' a.email-alerts-link').attr("enable","false");
				displayStatusMsg("This Saved Search has been subscribed to Email Alerts.");
			} else {
				$('#search'+id+' a.email-alerts-link').html("Subscribe to Email Alerts");
				$('#search'+id+' a.email-alerts-link').attr("enable","true");
				displayStatusMsg("This Saved Search has been unsubscribed from Email Alerts.");
			}
		}
	});
}

function checkBigMap(){
	if($("#tab-results-2").length > 0 && $("#tab-results-2").html() != ''){
		if($("#tab-map2").length == 0){	
			$('#map-results-tab2').tabs("add","#tab-map2","Map");
			$('#tab-map2').addClass('map-panel clearfix');
			$('#tab-map2').append($('#bigMapHtml').detach());
			$('#bigMapHtml').show(0);
			$('#map-results-tab2').tabs("select","#tab-map2");
		} else {
			$('#map-results-tab2').tabs("select","#tab-map2");
		}
	}
}

function setupBigMap(){
	// Various checks to see if we need to create the tab / map
	if($("#tab-results-2 div.main-info").length > 0){
		if(!bigMapInitialized){
			checkBigMap();
			if(bigMap == null){
				bigMap = new google.maps.Map(document.getElementById("big_map_canvas"), bigMapOptions);
					google.maps.event.addListener(bigMap, 'dragend', function() {
			    		if(showAlertBox)
			    			$('#mapMsg').show(0);
				});
			}
			bigMapInitialized = true;
		}
		if(bigMapMgr == null){
			bigMapMgr = new MarkerClusterer(bigMap, bigMapMarkers, {gridSize: 40, maxZoom: 13});
		} else {
			bigMapMgr.clearMarkers();
			bigMapMgr.addMarkers(bigMapMarkers);
		}
		bigMap.fitBounds(bmBounds);
	}
	$('#map-results-tab').tabs("select","#tab-results-2");
}

function callSignUp(){
	cancelTB();
	setTimeout("callFormTB('Sign Up',250,478,'register','')",1000);
}

