	var userHeaderTextS = 'Sign up / Login now to search the most up-to-date MLS Listings available!';
	var userHeaderTextU = 'Modify Account Settings for';
	var userHeaderTextA = 'Account created: an activation message was sent to: ';
	var userHeaderTextAd = 'Activation completed. Click <a href="javascript:UserLogin();">here</a> to login';
	var userHeaderTextAe = 'Activation error';
	var userInfoTextS = '<font color="red">*</font> Your name and email address are required. A confirmation email will be sent to you with instructions for activating your account, so please	be sure your email address is entered accurately.	<br /><br />';
	var zeroHomesMessage = "Search criteria doesn't return any result.";

    var USER_MENU_HTML_LOADING          = "Loading menu...";
    var USER_MENU_HTML                  = '<a href="javascript: useraction(1)"><img src="images/organizer_account_info.gif" border="0" alt="Account Info" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(2)"><img src="images/organizer_snapshots.gif" border="0" alt="Search Snapshots" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(3)"><img src="images/organizer_properties.gif" border="0" alt="Saved Properties" style="padding-right: 5px; vertical-align: middle;" /></a>';	
    var USER_MENU_HTML_WO_ACCOUNT_INFO  = '<img src="images/organizer_account_info.gif" border="0" alt="Account Info" style="padding-right: 5px; vertical-align: middle;" /><a href="javascript: useraction(2)"><img src="images/organizer_snapshots.gif" border="0" alt="Search Snapshots" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(3)"><img src="images/organizer_properties.gif" border="0" alt="Saved Properties" style="padding-right: 5px; vertical-align: middle;" /></a>';	 
    var USER_MENU_HTML_WO_SEARCH        = '<a href="javascript: useraction(1)"><img src="images/organizer_account_info.gif" border="0" alt="Account Info" style="padding-right: 5px; vertical-align: middle;" /></a><img src="images/organizer_snapshots.gif" border="0" alt="Search Snapshots" style="padding-right: 5px; vertical-align: middle;" /><a href="javascript: useraction(3)"><img src="images/organizer_properties.gif" border="0" alt="Saved Properties" style="padding-right: 5px; vertical-align: middle;" /></a>';	
    var USER_MENU_HTML_WO_SAVED         = '<a href="javascript: useraction(1)"><img src="images/organizer_account_info.gif" border="0" alt="Account Info" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(2)"><img src="images/organizer_snapshots.gif" border="0" alt="Search Snapshots" style="padding-right: 5px; vertical-align: middle;" /></a><img src="images/organizer_properties.gif" border="0" alt="Saved Properties" style="padding-right: 5px; vertical-align: middle;" />';	
	var homeUser = 9;
	var homeNotUser = 9;
	var totalHomes = 0;
	var bShowSnapShotSection;
	
	var nVisibleHomes = 40;
	
    var numForm = new NumberFormat(1);
    var wherePOCalledFrom = 0;      //Where is Property Organized called from?
    var POC_FROM_SAVE_PROPERTY = 1; //Property Organized is called from Save Property link
    var POC_FROM_SHOW_SNAPSHOT = 2; //Property Organized is called from Show SnapShot link
    //var POC_FROM_EMAIL_TO_FRIEND_PROPERTY = 3; //Property Organized is called from Save and Sen to Friend link
    var postponed_ml_number = 0;
    
    numForm.setCurrency(true);
    numForm.setPlaces(0);
	
	function formatCurrency(num)
	{
	    numForm.setNumber(num);
        return numForm.toFormatted();
	}
	
	function setFormattedCurrency(oElement, num)
	{
	    if (oElement != null)
	    {
	        oElement.innerHTML = formatCurrency(num);
	    }
	}
    
	function anOtherItem(oid,name,moid, uid, lat, lng, homes,pg,min,max,v1,v2,v3,thumb)
	{
		this.name = name;
	    this.id = uid;
	    this.oid = oid;
	    this.moid = moid;
	    this.lat = lat;
	    this.lng = lng;
        this.max = parseInt(max);
        this.min = parseInt(min);
        this.page = pg;
        this.v1 = v1;
        this.v2 = v2;
        this.v3 = v3;
        this.thumb = thumb;
        this.homes = (homes == null || homes == "") ? 0 : homes;
	}
	
	function aVisOther(oindex, index, checked, mat, lat, lng) 
   	{
   		this.oindex = oindex;
	   	this.index = index;
	   	this.checked = checked;
        this.lat = lat;
        this.lng = lng;   	
	   	this.mat = mat;
	}
	
	function aHome(moid, ml_number, lp, longitude, latitude, lotsqft, street, city, st, zip, marker, detail,office,num_big)
	{
		this.moid = moid;
		this.ml_number = ml_number;
		this.lp = lp;
		this.longitude = longitude;
		this.latitude = latitude;
		this.lotsqft = lotsqft;
		this.street = street;
		this.city = city;
		this.st = st;
		this.zip = zip;
		this.marker = marker;
		this.detail = detail;
		this.office = office;
		this.num_big = num_big;
	}
	
	function anOthersElement(oid, title, singularTitle)
	{
	    this.oid = oid;
	    this.title = title;
	    this.singularTitle = singularTitle;
	    this.anItems = new Array();
	    
	    this.Add = function (name,moid, uid, lat, lng,homes,pg,min,max,v1,v2,v3,thumb)
	    {
	        this.anItems.push(new anOtherItem(this.oid, name,moid, uid, lat, lng, homes,pg,min,max,v1,v2,v3,thumb));
	    }
	}
	
	function aTab(idCtrl, idArrow, idBody, arrowShowClass, arrowHideClass)
	{
	    this.idCtrl = idCtrl;
	    this.idArrow = idArrow;
	    this.idBody = idBody;
	    this.arrowShowClass = arrowShowClass;
	    this.arrowHideClass = arrowHideClass;
	}
	
	function aPageCtrl()
	{
	    var arrayTabs = new Array();
	    var activeTab = null;
	    
	    this.Add = function (idCtrl, idArrow, idBody, arrowShowClass, arrowHideClass)
	    {
	        arrayTabs.push(new aTab(idCtrl, idArrow, idBody, arrowShowClass, arrowHideClass));
	    }
	    
	    this.ActiveTab = function (idCtrl)
	    {
	        for (var i = 0; i < arrayTabs.length; i++)
	        {
	            if (arrayTabs[i].idCtrl == idCtrl)
	            {
	                $get(arrayTabs[i].idArrow).className = ($get(arrayTabs[i].idArrow).className == arrayTabs[i].arrowShowClass) 
	                    ? arrayTabs[i].arrowHideClass : arrayTabs[i].arrowShowClass;
                    $get(arrayTabs[i].idBody).style.display = ($get(arrayTabs[i].idBody).style.display == "") ? "none" : "";
	            }
	            else
	            {
	                $get(arrayTabs[i].idArrow).className = arrayTabs[i].arrowHideClass;
	                $get(arrayTabs[i].idBody).style.display = "none";
	            }
	        }
	        HidePropertyOrganizer();
	    }
	}

    function aNewVisOther(qindex, oindex, index, checked, lat, lng, mat, outlines)
    {
        this.qindex = qindex;
        
   		this.oindex = oindex;
	   	this.index = index;
	   	this.checked = checked;
        this.lat = lat;
        this.lng = lng;   	
	   	this.mat = mat;
        
        this.outlines = outlines;
    }
    
    function aOrdVisOther(moid, oindex, index, checked, lat, lng, mat)
    {
        this.moid = moid;
        this.oindex = oindex;
        this.index = index;
        this.checked = checked;
        this.lat = lat;
        this.lng = lng;
        this.mat = mat;
    }
    
	function aVisOtherCache()
	{
	    this.VisItems = new Array();
	    
	    this.Add = function(qindex, oid, moid, mat)
	    {
	        var curZoomLevel = map.getZoom();
	        
            for (var i = 0; i < Others.length && Others[i].oid != oid; i++);
            var index = GetMOIDIndex(i, moid);
            var xing = $get("xing_" + Others[i].title + "_" + index);
            
            if (xing.checked)
            {
                if (typeof(this.VisItems[moid]) == "undefined")
                {
                    var otherOutlines = (typeof(Others[i].anItems[index].outline) == "undefined") ? null : Others[i].anItems[index].outline;
                    this.VisItems[moid] = new aNewVisOther(qindex, i, index, $get("xing_" + Others[i].title + "_" + index).checked,
                        Others[i].anItems[index].lat, Others[i].anItems[index].lng, mat, otherOutlines);
                        
                    if (this.VisItems[moid].outlines != null) map.addOverlay(this.VisItems[moid].outlines);
                }
                else
                { 
                    this.VisItems[moid].qindex = qindex;
                }
            }	            
	    }

        this.ShowVisItems = function()
        {
            var tableHTML = "";
            var moreOthers = "";
            
            var ordItems = new Array();
            for (moid in this.VisItems)
            {
                ordItems.push(new aOrdVisOther(moid, this.VisItems[moid].oindex, this.VisItems[moid].index,
                    this.VisItems[moid].checked, this.VisItems[moid].lat, 
                    this.VisItems[moid].lng, this.VisItems[moid].mat));
            }
            
            ordItems.sort(this.SortVisItemsByDistance);
            for (var i = 0; i < ordItems.length && i < 5; i++)
            {
                var oar = Others[ordItems[i].oindex];
                if (typeof(oar) != "undefined")
                {
                    var t = oar.title;
                    var singularTitle = oar.singularTitle;
                    var ot = oar.anItems[ordItems[i].index];
                    
                    tableHTML += "<tr>";
                    tableHTML += "<td><input type='checkbox' " + (ordItems[i].checked ? " checked='checked'" : "");
                    tableHTML += " name='vis_xing' id='vis_xing_" + t + "_" + ordItems[i].index + "' onclick='IncludeOther(true, " + ordItems[i].oindex + "," + ordItems[i].index + ")'/></td>";
                    tableHTML += "<td><a href='javascript: dc(0," + ordItems[i].oindex + ", " + ordItems[i].index + ")' title='Set map center to'>" + singularTitle + ": " + ot.name + "</a></td>";
                    tableHTML += "<td>" + ot.homes + "</td>";
                    tableHTML += "<td>" + ordItems[i].mat + "</td>";
                    tableHTML += "</tr>";
                }
            }
            
            if (ordItems.length > 5) moreOthers = "<div style='padding-left: 5px'>More than 5 courses visible</div>";
            
	        Hide($get("visibleCoursesList"), false);
	        tableHTML = "<table id='VisOther' class='sortable'><tr><th></th><th>Item</th><th>Tot</th><th>Mat</th></tr>" + tableHTML + "</table>" + moreOthers;
	        $get("visibleCoursesList").innerHTML = tableHTML;
        }
        
        this.SortVisItemsByDistance = function(a, b)
        {
            var center = map.getCenter();
            var aDist = center.distanceFrom(new GLatLng(a.lat, a.lng, true));
            var bDist = center.distanceFrom(new GLatLng(b.lat, b.lng, true));
            
            return aDist - bDist;
        }
        
	    this.Remove = function(qindex)
	    {
	        for (moid in this.VisItems)
	        {
	            if (this.VisItems[moid].qindex != qindex)
	            {
	                if (this.VisItems[moid].outlines != null)
	                {
	                    map.removeOverlay(this.VisItems[moid].outlines);
	                }
	                delete this.VisItems[moid];
	            }
	        }
	    }

	    this.RemoveByMoid = function(moid)
	    {
	        if (typeof(this.VisItems[moid]) != "undefined")
	        {
                if (this.VisItems[moid].outlines != null)
                {
                    map.removeOverlay(this.VisItems[moid].outlines);
                }
                delete this.VisItems[moid];
	        }
	    }
	    
	    this.GetInfoWindowHTML = function(moid)
	    {
	        var str = "";
	        var ot = Others[this.VisItems[moid].oindex].anItems[this.VisItems[moid].index];
	        var html = "<b>" + ot.name + "</b>";
	        
            if (ot.thumb == 1) html += "<br/><img height='100px' width='200px' src='Courses/" + ot.page + "/t.jpg' />";
	        
		    if (ot.min > 0) 
		    {
			    numForm.setNumber(ot.min);
			    html += "<br/>Homes range from " + numForm.toFormatted();
			    numForm.setNumber(ot.max);
			    html += " to " + numForm.toFormatted();
			    str = "Click here to see current listings";
		    } 
		    else str = "Homes and Condos for Sale";
		    
		    html += "<br/><a href='javascript:dc(1," + ot.oid + ", " + this.VisItems[moid].index + ");'><strong>" 
		        + str + "</strong></a>";
		        
		    if (ot.v1.length > 0) html += "<br/>" + ot.v1;
		    if (ot.v2.length > 0) html += "<br/>" + ot.v2;
		    if (ot.v3.length > 0) html += "<br/>" + ot.v3;
		    
		    if (ot.homes != 0) html += ", " + ot.homes + " homes for sale";
		    
		    html += "<br/><br/><div class=\"list\" style=\"display: inline;\">"
		        + "<a href='javascript:doZoom(" + ot.oid + "," + this.VisItems[moid].index + ");'>Zoom In to see homes</a></div>" 
		        + ((this.VisItems[moid].outlines != null) ? "<div class=\"list\" style=\"display: inline;\">"
		            + "<a href='javascript:clearThis(" + moid + ");'>Clear outline</a></div> " : " ");
		            
            if (ot.page != "" && ot.page != null) 
            {	
                html += "<div class=\"list\" style=\"display: inline;\">"
                    + "<a href='view.aspx?oid=" + ot.oid + "&id=" + ot.id + "'>Details</a></div>"; 
            }
	        return html;
	    }
	}
		
	function aNewHome(qindex, lp, longitude, latitude, street, city, st, zip, marker, detail, office)
	{
	    this.qindex = qindex;
	    
		this.lp = lp;
		this.longitude = longitude;
		this.latitude = latitude;
		this.street = street;
		this.city = city;
		this.st = st;
		this.zip = zip;
		this.marker = marker;
		this.detail = detail;
		this.office = office;
		
		this.bounds = new Array();
		this.moids = new Array();
	}
	
	function aHomeCache()
	{
	    this.HomeItems = new Object();

	    this.Add = function(qindex, ml_number, lp, longitude, latitude, lotsqft, street, city, st, zip, detail, officename)
	    {
	        if (typeof(this.HomeItems[ml_number]) == "undefined")
	        {
                this.HomeItems[ml_number] = new aNewHome(qindex, lp, longitude, latitude, lotsqft, street, city, st, zip, 
                    this.CreateHomeMarker(ml_number, lp, longitude, latitude, street, city, st, zip, detail, officename),
                    detail, officename);
	        }
	        else this.HomeItems[ml_number].qindex = qindex;
	    }
	    
	    this.CreateHomeMarker = function(ml_number, lp, longitude, latitude, street, city, st, zip, detail, officename)
	    {
	        var point = new GPoint(longitude, latitude);
	        var marker = new GMarker(point, {icon: propIcon, title: street.trim() + ", " + city + ", " + zip });
	        var markerHTML = this.CreateHTMLMarker(ml_number, lp, street, city, st, zip, detail, officename);
	        
	        GEvent.addListener(marker, 'click', function() {marker.openInfoWindowHtml(markerHTML);});
	        if (map == null) LoadMap(gZoomLevelToShowHomes);
	        map.addOverlay(marker);
	        
	        return marker;
	    }
	    
	    this.CreateHTMLMarker = function(ml_number, lp, street, city, st, zip, detail, officename)
	    {
		    var tableHTML = "<table id='hf" + ml_number + "' cellpadding=\"0\" cellspacing=\"0\" >" ;
		    tableHTML += 
		        "<tr><td nowrap colspan=\"2\" style=\"height: 20px; vertical-align: top;\">" 
		        + "<strong>" + street + ", " + " " + city + ", " + zip + "</strong></td></tr>" 
		        + "<tr><td  rowspan=\"4\" style=\"width:115px; vertical-align: top;\">" 
		            + "<a href=\"javascript:ShowHomeDetailsTab(" + ml_number 
		            + ")\"><img width=\"96px\" alt=\"Click for Details\" style=\"padding: 5px; border: solid 1px #a3a3a3;\" src=\"MLSImages/" + ImPrefix 
		            + ml_number + ".jpg\" onError=\"this.onerror=null;this.src='NoPhoto.gif';\"/></a></td>";
    			
		    tableHTML += "<td style=\"width:115px; height: 50px; vertical-align:top;\">" + detail + "</td></tr>";
    					
		    tableHTML += "<tr><td style=\"vertical-align: bottom; height: 20px; width:115px; text-align:right;\">" 
		        + "MLS#: " + ml_number + "</td></tr>" 
		        + "<tr><td style=\"vertical-align: bottom; height: 20px; width:115px; text-align:right;\">" 
		        + "<strong>" + formatCurrency(lp) + "</strong></td></tr>" 
		        + "<tr><td colspan=\"2\" style=\"vertical-align: bottom; height: 30px; text-align: left; \">";
    		
		    tableHTML += "<div class=\"list\"><a href=\"javascript:ShowHomeDetailsTab(" + ml_number + ")\">Show Details</a></div>" 
		        + "</td></tr><tr><td colspan=2><span style='font-size:xx-small; color: gray'><b>Office Name</b>: " + officename + "</span></table>";
		        
		    return tableHTML;
	    }
	    
	    this.Clear = function()
	    {
	        for (ml_number in this.HomeItems) 
	        {
	            map.removeOverlay(this.HomeItems[ml_number].marker);
	            for (var i in this.HomeItems[ml_number].bounds) map.removeOverlay(this.HomeItems[ml_number].bounds[i]);
	        }
	        this.HomeItems = new Object();
	    }
	    
	    this.Remove = function(qindex)
	    {
	        for (ml_number in this.HomeItems)
	        {
	            if (this.HomeItems[ml_number].qindex != qindex)
	            {
	                map.removeOverlay(this.HomeItems[ml_number].marker);
	                for (var i in this.HomeItems[ml_number].bounds) map.removeOverlay(this.HomeItems[ml_number].bounds[i]);
                    delete this.HomeItems[ml_number];	                
	            }
	        }
	    }
	    
	    this.RemoveByMoid = function(moid)
	    {
	        for (ml_number in this.HomeItems)
	        {
	            if (typeof(this.HomeItems[ml_number].moids[moid]) != "undefined")
	            {
	                map.removeOverlay(this.HomeItems[ml_number].marker);
	                delete this.HomeItems[ml_number];
	            }
	        }
	    }
	    
	    this.AddBounds = function(boundsTable)
	    {
	        var bounds_table_length = (boundsTable == null || boundsTable.rows == null) ? 0 : boundsTable.rows.length;
	        if (bounds_table_length > 0)
	        {
	            var arrPoints = null;
	            var inner_ml_number = 0;
	            for (var i = 0; i < boundsTable.rows.length; i++)
	            {
	                inner_ml_number = boundsTable.rows[i].ml_number;
	                if (boundsTable.rows[i].Orders == 0)
	                {
	                    if (arrPoints != null) 
	                    {
	                        if (arrPoints.length > 0)
	                        {
	                            var bounds = new GPolyline(arrPoints, "#FF0000", 2, 1);
	                            map.addOverlay(bounds);
	                            this.HomeItems[inner_ml_number].bounds.push(bounds);
	                        }
	                    }				        
	                    arrPoints = new Array();
	                }
                    arrPoints.push(new GLatLng(boundsTable.rows[i].Latitude, boundsTable.rows[i].Longitude, true));
	            }
                if (arrPoints.length > 0)
                {
                    var bounds = new GPolyline(arrPoints, "#FF0000", 2, 1);
                    map.addOverlay(bounds);
                    this.HomeItems[inner_ml_number].bounds.push(bounds);
                }
	        }
	    }
	    
	    this.AddMoid = function(moidTable)
	    {
	        var ml_number, moid;
            var t_length = (moidTable == null || moidTable.rows == null) ? 0 : moidTable.rows.length;
            
            for (var i = 0; i < t_length; i++)
            {
                ml_number = moidTable.rows[i].ml_number;
                moid = moidTable.rows[i].moid;
                this.HomeItems[ml_number].moids[moid] = moid;
            }    
	    }
	}
	
	var pageCtrl = new aPageCtrl();
	
	pageCtrl.Add("StandardCriteriaHeader", "StandardCriteriaHeaderArrow", "StandardCriteriaBody", "arrow_show", "arrow_hide");
	pageCtrl.Add("AdvCriteriaHeader", "AdvCriteriaHeaderArrow", "AdvCriteriaBody", "arrow_show", "arrow_hide");
	
	function Hide(object, hideIt)
	{
		if (object != null)
		{
			switch (hideIt)
			{
				case true:
					object.style.display = "none";
					break;
				default:
				case false:
					object.style.display = "";
					break;
			}
		}
	}
	
	function GetOthersIndex(oid)
	{
	    var result = -1;
	    for (var i = 0; i < Others.length; i++)
	    {
	        if (Others[i].oid == oid)
	        {
	            result = i;
	            break;
	        }
	    }
	    return result;
	}
	
	function GetOthersTitle(oid)
	{
	    var result = "";
	    for (var i = 0; i < Others.length; i++)
	    {
	        if (Others[i].oid == oid)
	        {
	            result = Others[i].title;
	            break;
	        }
	    }
	    return result;
	}
	
	function OthersCheckUncheckAll(oid)
	{
	    gCurrentHomesFindPage = 1;
	    
	    var action = true;
        var i = 0;
        var index = -1;
        var title = "";
        
        index = GetOthersIndex(oid);
        title = GetOthersTitle(oid);
	    
	    if (index != -1)
	    {
			action = $get(Others[index].title + "_xing").checked;
	        for (i = 0; i < Others[index].anItems.length; i++)
	        {
	            $get("xing_" + Others[index].title + "_" + i).checked = action;
	        }   
            HomesFilter();
	    }
	}

   function IncludeOther(vispanel, oind, index)
   {
		gCurrentHomesFindPage = 1; 
		
	    var xing = $get("xing_" + Others[oind].title + "_" + index);
	    var vis_xing = $get("vis_xing_" + Others[oind].title + "_" + index);
	
	    if (xing != null && vis_xing != null)
	    {
			if (vispanel) xing.checked = vis_xing.checked;
			else 
			{
			    vis_xing.checked = xing.checked;
			}    
			
            if (!vis_xing.checked)
            {
                VisOtherCache.RemoveByMoid(Others[oind].anItems[index].moid);
                VisOtherCache.ShowVisItems();
                HomeCache.RemoveByMoid(Others[oind].anItems[index].moid);
            }
            else HomesFilter();
		}
		else HomesFilter();
   }

   function LoadMap(startZoomLevel)
   {
        var mapdiv = $get("mapDiv");
        if (mapdiv == null) return;

        map = new GMap2(mapdiv);               
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(StartLat, StartLng, true), startZoomLevel);
        map.setMapType(G_HYBRID_MAP);

        propIcon = new GIcon();
        propIcon.image = "images/marker.png";
        propIcon.shadow = "images/shadow.png";
        propIcon.iconSize = new GSize(40,40);
        propIcon.shadowSize = new GSize(56,40);
        propIcon.iconAnchor = new GPoint(20,40);
        propIcon.shadowancor = new GPoint(20, 40) ;
        propIcon.infoWindowAnchor = new GPoint(20,10);
        
       GEvent.addListener(map, 'moveend', GetNearestObjects);
       gAddPointHandler = GEvent.addListener(map, 'click', ClickOnMap);
   }
   
   function ShowMapTab(zoomLevel)
   {
        gActiveTab = "mapTab";
		
        Hide($get("homefindDiv"), true);
        Hide($get("courseDetailsDiv"), true);
		Hide($get("homeDetailsDiv"), true);
		HidePropertyOrganizer();
        Hide($get("VisibleCourses"), false);        
        Hide($get("VisibleCoursesBody"), false);
        
		Hide($get("fastFacts"), true);        

        $get('VisibleCoursesHeaderArrow').className = 'arrow_show';
        $get('StandardCriteriaHeaderArrow').className = 'arrow_hide';
        $get('AdvCriteriaHeaderArrow').className = 'arrow_hide';

        Hide($get("mapInfoDiv"), false);
        Hide($get("mapDiv"), false);
		$get("mapDiv").style.cursor = "default";
       
        if(addHistory) dhtmlHistory.add("map", null);
        if (map == null) LoadMap(zoomLevel);
        map.checkResize();

        if (search_str != get_search_str()) 
        {
            HomesFilter();
        }
   }
   
   function get_search_str()
   {
        return "gsc=" + gSelectedCriteria + "MinPrice=" + getThouVal("MinCoursePrice",0) + "MaxPrice=" + getThouVal("MaxCoursePrice",100000000)
            + "MinRooms=" + $get("MinRooms").value + "MinBathRooms=" + $get("MinBathRooms").value + "MinSqFt=" + $get("MinSqFt").value
            + "OthersList=" + GetOthersList() + "minYearBuilt=" + $get("AdvYearBuilt").value + "minLotSize=" + $get("AdvLotSize").value
            + "maxLotSize=" + $get("AdvMaxLotSize").value + "fireplace=" + $get("AdvFirePlace").checked
            + "dopool=" + $get("pool").checked + "doreo=" + $get("reo").checked + "doshrt=" + $get("shrt").checked + "pub=" + $get("pub").checked + "doland=" + $get("land").checked + "dohomes=" + $get("homes").checked + "docommercial=" + $get("commercial").checked
            + "dowater=" + $get("waterfront").checked + "doowner=" + $get("siteowner").checked + "mls=" + $get("AdvMLSNumber").value + "h_number=" + $get("AdvHouseNumber").value
            + "street=" + $get("AdvStreetName").value + "advcity=" + $get("AdvCity").value;
   }
     
   function ShowTab(tabName)
   {
        gSelectedCriteria = "standard";
        
        pageCtrl.ActiveTab(tabName + "Header");
        
        ts_makeSortable($get(tabName + "Tbl"));
   }  
     
   function ShowVisibleCoursesTab()
   {	
        gActiveTab = "mapTab";
        
        Hide($get("courseDetailsDiv"), true);
		Hide($get("homeDetailsDiv"), true);
		HidePropertyOrganizer();
        Hide($get("homefindDiv"), true);        
		Hide($get("mapDiv"), false);

		Hide($get("VisibleCoursesBody"), false);
		Hide($get("fastFacts"), true);
		
        $get('VisibleCoursesHeaderArrow').className = 'arrow_show';
        $get('StandardCriteriaHeaderArrow').className = 'arrow_hide';
        $get('AdvCriteriaHeaderArrow').className = 'arrow_hide';
        
		HomesFilter();
   }

   function ShowStandardCriteria()
   {	
		gSelectedCriteria = "standard";
        pageCtrl.ActiveTab("StandardCriteriaHeader");        
   }
   
   function ShowAdvCriteria()
   {
        pageCtrl.ActiveTab("AdvCriteriaHeader");        
   }
      
   function ShowRequestDetailsForm(ml_number)
   {
		UserGet();
		
		$get("RequestDetailsFormError").innerHTML = "";
		
		$get("RequestDetailsFormEmailMessage").innerHTML = EmailToAgentMessage;
		$get("RequestDetailsFormSMSMessage").innerHTML = SMSToAgentMessage;
		$get("RequestDetailFormConfidentialMessage").innerHTML = ConfidentialMessage;
		Hide($get("homeDetailsDiv"), true);
		Hide($get("RequestDetailsForm"), false);
		HidePropertyOrganizer();
		
		$get("RequestDetailsFormMsg").value = "";
		
		$get("RequestDetailsFormHeaderCaption").innerHTML = "Request details for the property with MLS # " + ml_number;
		g_mls_number = ml_number;
   }
   
   function CloseRequestDetailsForm()
   {
        Hide($get("sortControl"), false);
        Hide($get("RequestDetailsForm"), true);
   }
     
   function RequestDetailsFormSend()
   {
        if(g_mls_number != "")
            RequestSend(g_mls_number);
   }

	function RequestSend(ml_number)
	{
		var from_name = $get("RequestDetailsFormName").value;
		var from_mail = $get("RequestDetailsFormMail").value;
		var from_phone = $get("RequestDetailsFormPhone").value;
        var msg = $get("RequestDetailsFormMsg").value;
        var sendSMS = $get("RequestToPhoneCheckBox").checked;

        if (from_name == null || from_name == "") 
        {
            Hide($get("RequestDetailsFormError"), false);
            $get("RequestDetailsFormError").innerHTML = "User name could not be empty";
            return;
        }
        if (from_mail == null || from_mail == "") 
        {
            Hide($get("RequestDetailsFormError"), false);
            $get("RequestDetailsFormError").innerHTML = "User email could not be empty";
            return;
        }
        if (sendSMS && (from_phone == null || from_phone == ""))  
        {
            Hide($get("RequestDetailsFormError"), false);
            $get("RequestDetailsFormError").innerHTML = "User phone could not be empty";
            return;
        }
        Hide($get("RequestDetailsFormError"), true);
        $get("RequestDetailsForm").style.cursor = "wait";
        
		// Call web service
		requestUsers = Users.RequestSend(
					SiteID, ml_number, from_name, from_mail, from_phone, sendSMS, msg,  //params
					OnRequestSend,     //Complete event
					OnTimeout,      //Timeout event
					OnError         //Error event
					);
	};
  
	function OnRequestSend(result)
	{
        $get("RequestDetailsForm").style.cursor = "default";
	
		if (result[0]) 
		{
			alert("Message successfully sent");
			CloseRequestDetailsForm();
		}
		else
		{
            Hide($get("RequestDetailsFormError"), false);
            $get("RequestDetailsFormError").innerHTML = result[1];
		}
	} 
         
   function ShowSearchEmailForm(is_search, ml_number)
   {
		UserGet();       		
		
		Hide($get("homeDetailsDiv"), true);
		Hide($get("SearchEmailForm"), false);
		HidePropertyOrganizer();
		
		$get("SearchEmailFormFriendsName").value = "";
		$get("SearchEmailFormMsg").value = "I found something great...";
		$get("SearchEmailFormError").innerHTML = "";
		
		if (is_search) 
		{
			$get("SearchEmailFormVar").innerHTML = "Total Homes: " + totalHomes;
			g_total_homes = totalHomes;
			$get("SearchEmailFormHeaderCaption").innerHTML = "Email current search to friend";
			$get("SearchEmailFormSubject").value = "Homes search results";
			g_mls_number = "";
		}
		else
		{
			$get("SearchEmailFormVar").innerHTML = "MLS #: " + ml_number;
			g_mls_number = ml_number;
			$get("SearchEmailFormHeaderCaption").innerHTML = "Email property to friend";
			$get("SearchEmailFormSubject").value = "Property";
			g_total_homes = "";
		};
		
        Hide($get("sortControl"), true);
   }
   
   function CloseSearchEmailForm()
   {
        Hide($get("sortControl"), false);
        Hide($get("SearchEmailForm"), true);
   }   
   
   function SearchEmailFormSend()
   {          
        if(g_mls_number != "")
            SendProperty(g_mls_number);
        if(g_total_homes != "")
            SendSearch(g_total_homes);    
   };
   
   function RefreshHomeList()
   {
        if ($get("homefindDiv").style.display == "") 
        {
            ShowHomesFindTab(true);
        }
   }
   
   function RunPostponedAction(whereFrom, userEmail)
   {
        //var justSignedID = null;
        switch (wherePOCalledFrom)
        {
            case POC_FROM_SAVE_PROPERTY : SaveProperty(postponed_ml_number, userEmail);
                break;
    //        case POC_FROM_SHOW_SNAPSHOT : if (whereFrom == "Login") ShowSnapShotSection(true);
    //           break;
        }
        wherePOCalledFrom = 0;
   }
      
   function ShowPropertyOrganizer(whereFrom)
   {
        wherePOCalledFrom = whereFrom;

		if (gActiveTab == "mapTab")
		{
			Hide($get("mapDiv"), false);
	        Hide($get("visibleCoursesList"), false);
		}
		if (gActiveTab == "homesFindTab")
		{
			Hide($get("homefindDiv"), false);
		}

        gActiveTab = "userTab";
		Hide($get("homeDetailsDiv"), true);
        Hide($get("courseDetailsDiv"), true); 
		Hide($get("fastFacts"), true);
	
        Hide($get("PropertyOrganizer"), false);
        Hide($get("PropertyOrganizerLauncher"), true);
                
        Hide($get("UserMenu"), true);
        useraction(1);
   }   

   function HidePropertyOrganizer()
   {
		Hide($get("PropertyOrganizer"), true);
		Hide($get("PropertyOrganizerLauncher"), false);
		wherePOCalledFrom = 0;
   }

	function useraction(action)
	{	
		switch(action) 
		{
			// Show saved searches tab
			case 2:
				if (userEmail == "") 
				{
					useraction(1);
				}
				else
				{
					GetSavedSearches();
					
					Hide($get("UserSavedSearches"), false);
					Hide($get("UserAccountManagement"), true);
					Hide($get("UserSavedProperties"), true);
					$get("UserMenu").innerHTML = USER_MENU_HTML_WO_SEARCH;
				}
		
				break;
			// Show saved properties tab
			case 3:
				if (userEmail == "") 
				{
					useraction(1);
				}
				else
				{
					GetSavedProperties();
					
					Hide($get("UserSavedSearches"), true);
					Hide($get("UserAccountManagement"), true);
					Hide($get("UserSavedProperties"), false);
					$get("UserMenu").innerHTML = USER_MENU_HTML_WO_SAVED;
				}
	
				break;	
			// Show account info tab
			case 1:
			default:
				Hide($get("UserSavedSearches"), true);
				Hide($get("UserAccountManagement"), false);
				Hide($get("UserSavedProperties"), true);
				
				if (userEmail == "") 
				{
					Hide($get("UserContent"), false);
					$get("UserHeader").innerHTML = userHeaderTextS;
					Hide($get("UserError"), true); 
					Hide($get("UserManagementLinks"), true);
					Hide($get("btnSignUp"), false);
					Hide($get("btnLogin"), false);
					Hide($get("btnUserUpdate"), true);
					Hide($get("EnableNotificationsDiv"), true);
					Hide($get("UserInfoText"), false);
					$get("UserInfoText").innerHTML = userInfoTextS;        
					$get("UserMenu").innerHTML = USER_MENU_HTML_WO_ACCOUNT_INFO;
				}
				else 
				{
                    Hide($get("UserMenu"), false);
                    $get("UserMenu").innerHTML = USER_MENU_HTML_LOADING;//"Loading menu..."
				
					UserGet();
				}
				break;
		}
	}
   
	function UserSignUp()
	{	
        // Get search criteria
        var Email = $get("UserEmail").value;
        var UserName = $get("UserName").value;
		userEmail = Email;
		
		// Call web service
		requestUsers = Users.AddUser(SiteID,
					UserName, Email,  //params
					OnUserSignUp,     //Complete event
					OnTimeout,      //Timeout event
					OnError         //Error event
					);
	}

	function OnUserSignUp(result)
	{
		if (result == userEmail)
		{
			Hide($get("UserInfoText"), true);
			Hide($get("UserContent"), true); 
			$get("UserHeader").innerHTML = userHeaderTextA + "<strong>" + result + "</strong>";
			ClearClientUserInfo();
			RunPostponedAction("Signup", result);
		}
		else
		{
			Hide($get("UserManagementLinks"), true);
			Hide($get("btnSignUp"), false);
			Hide($get("btnLogin"), false);
			Hide($get("btnUserUpdate"), true);
			Hide($get("EnableNotificationsDiv"), true);
	        Hide($get("UserInfoText"), false);
			
			$get("UserInfoText").innerHTML = userInfoTextS;
			Hide($get("UserError"), false); 
			$get("UserError").innerHTML = result;
			return;
		}
	} 	
	
	function UserLogin()
	{	
        // Get search criteria
        var Email = $get("UserEmail").value;
        var UserName = $get("UserName").value;   
		userEmail = Email;
		
		// Call web service
		requestUsers = Users.LoginUser(SiteID,
					UserName, Email,  //params
					OnLoginUser,     //Complete event
					OnTimeout,      //Timeout event
					OnError         //Error event
					);
	}

	function OnLoginUser(result)
	{	
		Hide($get("UserContent"), false);

		if (result[2] == "")
		{
			userID = result[0];
			userEmail = result[1];
			userActivated = "";
			gPageSize = homeUser;
			
			Hide($get("UserError"), true); 
			Hide($get("btnSignUp"), true);
			Hide($get("btnLogin"), true);
			Hide($get("btnUserUpdate"), false);
			Hide($get("EnableNotificationsDiv"), false);
	        Hide($get("UserInfoText"), false);
	        Hide($get("UserMenu"), false);
            
            $get("UserMenu").innerHTML = USER_MENU_HTML_WO_ACCOUNT_INFO;//'<a href="javascript: useraction(1)"><img src="images/organizer_account_info.gif" border="0" alt="Account Info" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(2)"><img src="images/organizer_snapshots.gif" border="0" alt="Search Snapshots" style="padding-right: 5px; vertical-align: middle;" /></a><a href="javascript: useraction(3)"><img src="images/organizer_properties.gif" border="0" alt="Saved Properties" style="padding-right: 5px; vertical-align: middle;" /></a>';
	        
	        Hide($get("UserManagementLinks"), false);
			$get("UserHeader").innerHTML = userHeaderTextU + ": <strong>" +  userEmail + "</strong>";
			$get("UserInfoText").innerHTML = "Successfully logged in";
			RefreshHomeList();
			RunPostponedAction("Login");
		}
		else
		{
			userEmail = "";
			userID = "";
			gPageSize = homeNotUser;
			Hide($get("btnSignUp"), false);
			Hide($get("btnLogin"), false);
			Hide($get("btnUserUpdate"), true);
			Hide($get("EnableNotificationsDiv"), true);
	        Hide($get("UserInfoText"), false);
	        Hide($get("UserMenu"), true);
	        			
			Hide($get("UserManagementLinks"), true);
			Hide($get("UserError"), false); 
			$get("UserError").innerHTML = result[2];
			return;
		}
	} 	
  
	function UserUpdate()
	{	
        // Get search criteria
        var Email = $get("UserEmail").value;
        var UserName = $get("UserName").value;
        var Notify = $get("EnableNotifications").checked;
		
		if (confirm("Following information will be updated:\r\nName:\t" + UserName + "\r\nMail:\t" + Email + "\r\nEmail notifications:\t" + ((Notify)? "Enabled":"Disabled") + "\r\n"))
		{
		    Hide($get("UserInfoText"), true);        
			// Call web service
			requestUsers = Users.UpdateUser(SiteID, 
						userID, UserName, Email, Notify, //params
						OnUserUpdate,     //Complete event
						OnTimeout,      //Timeout event
						OnError         //Error event
						);
		}
		else
		{
			Hide($get("UserInfoText"), false); 
			$get("UserInfoText").innerHTML = "Update canceled";
		};
	}

	function OnUserUpdate(result)
	{
	    /* result = parseDataTable(result); */
	    
		if (!isNaN(result)) // update completed
		{
			Hide($get("UserError"), true); 
	        Hide($get("UserInfoText"), false);

			if ($get("EnableNotifications").checked) 
			{
				$get("UserNotificationsstatus").innerHTML = "enabled";
			}
			else
			{
				$get("UserNotificationsstatus").innerHTML = "disabled";
			}
						
			$get("UserInfoText").innerHTML = "Successfully updated";
		}
		else
		{
			Hide($get("UserError"), false); 
	        $get("UserInfoText").innerHTML = "";
			
			$get("UserError").innerHTML = result;
			return;
		}
	} 	  

	function UserGet()
	{
		// Call web service
		requestUsers = Users.GetUser( SiteID, userEmail, OnUserGet);
	}

    function ClearClientUserInfo()
    {
        deleteCookie("UserEmail");
	    deleteCookie("UserID");	
	    userEmail = "";
	    userID = "";
        $get("SearchEmailFormFrom").value = "";
		$get("SearchEmailFormFromEmail").value = userEmail;
		$get("RequestDetailsFormName").value = "";
		$get("RequestDetailsFormMail").value = userEmail;
		$get("UserName").value = "";
		$get("UserEmail").value = userEmail;
    }
    
	function OnUserGet(result)
	{
		Hide($get("UserContent"), false);
		if (result[4] == "")
		{
			userID = result[0];
			$get("UserName").value = result[1];
			userEmail = result[2];
			$get("UserEmail").value = userEmail;
			$get("EnableNotifications").checked = result[3];

			$get("SearchEmailFormFrom").value = result[1];
			$get("SearchEmailFormFromEmail").value = userEmail;
			
			$get("RequestDetailsFormName").value = result[1];
			$get("RequestDetailsFormMail").value = userEmail;
			
			if ($get("EnableNotifications").checked) 
			{
				$get("UserNotificationsstatus").innerHTML = "enabled";
			}
			else
			{
				$get("UserNotificationsstatus").innerHTML = "disabled";
			};
			
			Hide($get("UserError"), true); 

			if (userActivated == "1") // Account just activated
			{
				$get("UserHeader").innerHTML = userHeaderTextAd;
				Hide($get("UserContent"), true);
				userActivated = "";
				return;
			}
			else if (userActivated == "0") // Account already activated
			{
				UserLogin();
				return;
			}
			else if (userActivated == "" && !isNaN(userID)) // Account activated and logged in
			{
				UserLogin();
				return;
			}
			else 
			{
				$get("UserHeader").innerHTML = userHeaderTextS;
				Hide($get("UserManagementLinks"), true);
				Hide($get("btnSignUp"), false);
				Hide($get("btnLogin"), false);
				Hide($get("btnUserUpdate"), true);
				Hide($get("EnableNotificationsDiv"), true);
				Hide($get("UserInfoText"), false);
				$get("UserInfoText").innerHTML = userInfoTextS;
				Hide($get("UserMenu"), true);
				
				ClearClientUserInfo();
				gPageSize = homeNotUser;
				Hide($get("UserError"), false); 
				$get("UserError").innerHTML = userActivated;	
			}
		}
		else
		{
			$get("UserHeader").innerHTML = userHeaderTextS;
			Hide($get("UserManagementLinks"), true);
			Hide($get("btnSignUp"), false);
			Hide($get("btnLogin"), false);
			Hide($get("btnUserUpdate"), true);
			Hide($get("EnableNotificationsDiv"), true);
			Hide($get("UserInfoText"), false);
			$get("UserInfoText").innerHTML = userInfoTextS;
			Hide($get("UserMenu"), true);
			
			Hide($get("UserError"), false); 
			$get("UserError").innerHTML = result[4];
			
			ClearClientUserInfo();
			gPageSize = homeNotUser;
		}
	} 	

	function UserLogout()
	{	
        ClearClientUserInfo();
	    Hide($get("UserInfoText"), false);
		$get("UserInfoText").innerHTML = "Successfully logged out";
		gPageSize = homeNotUser;
		
		$get("UserHeader").innerHTML = userHeaderTextS;
		Hide($get("UserManagementLinks"), true);
		Hide($get("btnSignUp"), false);
		Hide($get("btnLogin"), false);
		Hide($get("btnUserUpdate"), true);
		Hide($get("EnableNotificationsDiv"), true);
		Hide($get("UserInfoText"), false);
		Hide($get("UserMenu"), true);
		bShowSnapShotSection = null;
		RefreshHomeList();
	}
	
	function UserDelete()
	{	
		if (confirm("Are you sure to delete subscription?"))
		{
			Hide($get("UserInfoText"), true);

			// Call web service
			requestUsers = Users.DeleteUser(SiteID,
						userEmail,  //params
						OnUserDelete);
		}
		else
		{
			Hide($get("UserInfoText"), false); 
			$get("UserInfoText").innerHTML = "Delete canceled";
		};
	}

	function OnUserDelete(result)
	{
		if (!isNaN(result))
		{
			ClearClientUserInfo();
			Hide($get("UserMenu"), true);
			gPageSize = homeNotUser;
			
			$get("UserHeader").innerHTML = userHeaderTextS;
			Hide($get("UserManagementLinks"), true);
			Hide($get("btnSignUp"), false);
			Hide($get("btnLogin"), false);
			Hide($get("btnUserUpdate"), true);
			Hide($get("EnableNotificationsDiv"), true);
			Hide($get("UserInfoText"), false);
			
			$get("UserInfoText").innerHTML = "Subscription removed";
			
			bShowSnapShotSection = null;
		    RefreshHomeList();
		}
		else
		{
			gPageSize = homeUser;
			Hide($get("UserError"), false); 
	        Hide($get("UserInfoText"), true);
			
			$get("UserError").innerHTML = result;
			return;
		}
	} 	  
  
	function SaveProperty(ml_number, justSignedMail)
	{
	    if (userID == "" && (justSignedMail == null || justSignedMail == ""))
	    {
	        postponed_ml_number = ml_number;
	        ShowPropertyOrganizer(POC_FROM_SAVE_PROPERTY);
	        return;
	    }
		// Call web service
		requestUsers = Users.SaveProperty(SiteID,
					((userID != "") ? userID : justSignedMail), ml_number, (userID == ""), //params
					OnSaveProperty);
	};
  
	function OnSaveProperty(result)
	{
		if (result) 
		{
			alert("This property has been saved to your Property Organizer.");
		}
		else
		{
			alert("This property has not been saved to your Property Organizer.");
		}
	} 	    
    function OnServiceError(error)
    {
        if (error != null)
        {
            alert(error._message + "<br />" + error._stackTrace + "<br \>Timedout: " 
                + error.get_timedOut());
        }
    }

	function SendProperty(ml_number)
	{
		var subject = $get("SearchEmailFormSubject").value;
		var from_name = $get("SearchEmailFormFrom").value;
		var from_mail = $get("SearchEmailFormFromEmail").value;
		var to_name = $get("SearchEmailFormFriendsName").value;
		var to_mail = $get("SearchEmailFormFriendsEmail").value;
        var msg = $get("SearchEmailFormMsg").value;

        if (from_name == null || from_name == "")
        {
            InputUserDataError("User's name cannot not be empty");
            return;
        }

        if (from_mail == null || from_mail == "") 
        {
            InputUserDataError("User email cannot not be empty");
            return;
        }
        if (to_name == null || to_name == "") 
        {
            InputUserDataError("Friend's name cannot not be empty");
            return;
        }
        if (to_mail == null || to_mail == "") 
        {
            InputUserDataError("Friend's email cannot not be empty");
            return;
        }
        Hide($get("SearchEmailFormError"), true);
        $get("SearchEmailForm").style.cursor = "wait";
        
		// Call web service
		requestUsers = Users.SendProperty(
					SiteID, ml_number, subject, from_name, from_mail, to_name, to_mail, msg,  //params
					OnSendProperty,OnTimeout,OnServiceError);
	};
	
	function InputUserDataError(msg_text)
	{
        Hide($get("SearchEmailFormError"), false);
        $get("SearchEmailFormError").innerHTML = msg_text;
	}
  
	function OnSendProperty(result)
	{
        $get("SearchEmailForm").style.cursor = "default";
	
		if (result[0]) 
		{
		    Hide($get("SearchEmailFormError"), true);
			alert("Message successfully sent");
			CloseSearchEmailForm();		
		}
		else
		{
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = result[1];
		}
	} 

	function SendSearch(totalHomes)
	{
		var subject = $get("SearchEmailFormSubject").value;
		var from_name = $get("SearchEmailFormFrom").value;
		var from_mail = $get("SearchEmailFormFromEmail").value;
		var to_name = $get("SearchEmailFormFriendsName").value;
		var to_mail = $get("SearchEmailFormFriendsEmail").value;
        var msg = $get("SearchEmailFormMsg").value;

        if (from_name == null || from_name == "") 
        {
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = "Please provide your name";
            return;
        }
        if (from_mail == null || from_mail == "") 
        {
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = "Please provide your email";
            return;
        }
        if (to_name == null || to_name == "") 
        {
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = "Please provide your friend's name";
            return;
        }
        if (to_mail == null || to_mail == "") 
        {
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = "Please provide your friend's email";
            return;
        }
        Hide($get("SearchEmailFormError"), true);

        // Get search criteria
		var minRooms = parseInt($get("MinRooms").value);
		var minBathRooms = parseInt($get("MinBathRooms").value);
	    var minPrice = getThouVal("MinCoursePrice",0);
	    var maxPrice = getThouVal("MaxCoursePrice",100000000);
   	    var minSqFt = parseInt($get("MinSqFt").value);
   	    var sortOrder = $get("SortOrder").value;
   	    var emailUpdates = $get("EmailUpdates").checked;
   	    var SearchAlias = (($get("SearchAlias").value != "") ? $get("SearchAlias").value : "");
		
		if (isNaN(totalHomes)) 
		{
			totalHomes = 0;
		}

		var zipListStr = getZipListStr();
	
		var minYearBuilt = parseInt($get("AdvYearBuilt").value);
		var minLotSize = $get("AdvLotSize").value;
		var maxLotSize = $get("AdvMaxLotSize").value;
		var fireplace = $get("AdvFirePlace").checked;
		var doland = $get("land").checked;
		var dohomes = $get("homes").checked;
		var docommercial = $get("commercial").checked;
		var dowater = $get("waterfront").checked;
		var doowner = $get("siteowner").checked;
		var dopool = $get("pool").checked;
		var doreo = $get("reo").checked;
		var doshrt = $get("shrt").checked;
		var dopub = $get("pub").checked;
        
        // Street address search
		var h_number = $get("AdvHouseNumber").value;
		if (h_number == null) 
		{
		    h_number = "";
		}
		var street = $get("AdvStreetName").value;
		if (street == null) 
		{
		    street = "";
		}
		var city = $get("AdvCity").value;
		if (city == null) 
		{
		    city = "";
		}      

        $get("SearchEmailForm").style.cursor = "wait";
        ShowSnapShotSection(false);
        
		// Call web service
		requestUsers = Users.SaveAndSendSearch(SiteID, 
					gSelectedCriteria, userID, emailUpdates, SearchAlias, 
					GetOthersList(), minPrice, maxPrice, minRooms, minBathRooms, minSqFt, 
					zipListStr, minYearBuilt, minLotSize, maxLotSize, fireplace, dopool, doreo,doshrt,dopub,doland,dohomes,dowater,doowner,false,false,docommercial,false,false,false,
					h_number, street, city, 
					sortOrder, gCurrentHomesFindPage, totalHomes, 
					subject, from_name, from_mail, to_name, to_mail, msg, //params
					OnUserSendSearch);
	};
  
	function OnUserSendSearch(result)
	{	
        $get("SearchEmailForm").style.cursor = "default";
	
		if (result[0]) 
		{
		    Hide($get("SearchEmailFormError"), true);
			alert("Search saved.\r\nMessage successfully sent");
			CloseSearchEmailForm();
		}
		else
		{		
            Hide($get("SearchEmailFormError"), false);
            $get("SearchEmailFormError").innerHTML = result[1];
		}
	} 

	function	DeleteProperty(ml_number)
	{
		// Call web service
		requestUsers = Users.DeleteProperty(SiteID,
					userID, ml_number, //params
					OnDeleteProperty);
	};
  
	function OnDeleteProperty(result)
	{
		if (result) 
		{
			GetSavedProperties();
		}
	} 	      
  
	function	GetSavedProperties()
	{		
		$get("UserSavedProperties").innerHTML = "Loading...";
		// Call web service
		requestUsers = Users.GetSavedProperties(
					userID, //params
					OnGetSavedProperties);
	};
  
	function OnGetSavedProperties(result)
	{
		if (result != "") 
		{
			$get("UserSavedProperties").innerHTML = result;
			ts_makeSortable($get("SavedPropertiesList"));
		}
		else
		{
			$get("UserSavedProperties").innerHTML = "No properties saved";
		}
	}  

	function getZipListStr()
	{
		var zipList = new Array();
		var listCtrl = $get("AdvZipcodesList");
		var index = 0;
		
		if (listCtrl != null && listCtrl.options.length > 1) 
		{
			for (var i = 0; i < listCtrl.options.length; i++)
			{
				if ( listCtrl.options[i].selected )
				{
					zipList[index] = listCtrl.options[i].value;
					index++;
				}
			}
		}
		var zipListStr = zipList.join(",");
		return zipListStr;
	}

	function UserSaveSearch()
	{
		var coursesList = "";
        // Get search criteria
		var minRooms = parseInt($get("MinRooms").value);
		var minBathRooms = parseInt($get("MinBathRooms").value);
	    var minPrice = getThouVal("MinCoursePrice",0);
	    var maxPrice = getThouVal("MaxCoursePrice",100000000);
   	    var minSqFt = parseInt($get("MinSqFt").value);
   	    var sortOrder = $get("SortOrder").value;
   	    var emailUpdates = $get("EmailUpdates").checked;
   	    var SearchAlias = (($get("SearchAlias").value != "") ? $get("SearchAlias").value : "");
		
		/*
		if (isNaN(totalHomes)) 
		{
			totalHomes = 0;
		}
		*/
		
		var zipListStr = getZipListStr();
	
		var minYearBuilt = parseInt($get("AdvYearBuilt").value);
		var minLotSize = $get("AdvLotSize").value;
		var maxLotSize = $get("AdvMaxLotSize").value;
		var fireplace = $get("AdvFirePlace").checked;
		var dopool = $get("pool").checked;
		var doreo = $get("reo").checked;
		var doshrt = $get("shrt").checked;
		var dopub = $get("pub").checked;
		var doland = $get("land").checked;
		var dohomes = $get("homes").checked;
		var docommercial = $get("commercial").checked;
		var dowater = $get("waterfront").checked;
		var doowner = $get("siteowner").checked;
        
        // Street address search
		var h_number = $get("AdvHouseNumber").value;
		if (h_number == null) 
		{
		    h_number = "";
		}
		var street = $get("AdvStreetName").value;
		if (street == null) 
		{
		    street = "";
		}
		var city = $get("AdvCity").value;
		if (city == null) 
		{
		    city = "";
		}      
		
		// Call web service
		requestUsers = Users.SaveSearch(
					gSelectedCriteria, userID, emailUpdates, SearchAlias, 
					GetOthersList(), minPrice, maxPrice, minRooms, minBathRooms, minSqFt, 
					zipListStr, minYearBuilt, minLotSize, maxLotSize, fireplace, dopool, doreo, doshrt, dopub, doland,dohomes,dowater,doowner,false, false, docommercial, false, false, false,
					h_number, street, city, 
					sortOrder, gCurrentHomesFindPage, totalHomes, //params
					OnUserSaveSearch);
	};
  
	function OnUserSaveSearch(result)
	{
		if (result[0]) 
		{
		    alert("Snapshot has been succesfully saved to your Property Organizer.");
			ShowSnapShotSection(false);
			
			$get("reason").display = "none";
			$get("reason").innerHTML = "";
		}
		else
		{
			ShowSnapShotSection(true);
			
			$get("reason").display = "";
			$get("reason").innerHTML = "Not Saved. Reason: " + result[1];
		}
		
		$get("SearchAlias").value = "";
		$get("EmailUpdates").checked = true;
	} 

	function	UserRestoreSearch(search_id)
	{		
		// Call web service
		requestUsers = Users.RestoreSavedSearch(
					search_id,  //params
					OnUserRestoreSearch);
	};
  
	function OnUserRestoreSearch(result)
	{
		if (result.length > 1) 
		{
			try
			{
				// Restore search criteria

                gSelectedCriteria = result[0]; // SearchType

				var coursesList = result[1];

				// Restore selected courses
				RestoreCoursesList(coursesList);
				
				$get("MinCoursePrice").value = result[2] / 1000;
				$get("MaxCoursePrice").value = result[3] / 1000;
				$get("MinRooms").value = result[4];
				$get("MinBathRooms").value = parseInt(result[5]);

				$get("MinSqFt").value = result[6];
				
		        var zipList = result[7].split(",");
		        var listCtrl = $get("AdvZipcodesList");
		        if (zipList != null && zipList.length > 0) 
		        {
		            listCtrl.selectedIndex = -1;
				        		        
			        for (var i = 0; i < zipList.length; i++)
			        {
			            for (j = 0; j < listCtrl.options.length; j++)
				        {
				            if ( zipList[i] == listCtrl.options[j].value )
				            {
					            listCtrl.options[j].selected = true;
					            break;
				            }
				        }
			        }
		        }

		        $get("AdvYearBuilt").value = result[8];
		        $get("AdvLotSize").value = result[9];
		        $get("AdvFirePlace").checked = result[10];
		        $get("land").checked = result[11];
		        $get("homes").checked = result[12];
		        $get("commercial").checked = result[21];
		        $get("waterfront").checked = result[13];
        
                // Street address search
                if (result[14].length > 0)
			        $get("AdvHouseNumber").value = result[14];
                if (result[15].length > 0)
			        $get("AdvStreetName").value = result[15];
                if (result[16].length > 0)
			        $get("AdvCity").value = result[16];
				
				$get("SortOrder").value = result[17];
				$get("AdvMaxLotSize").value = result[18];
				$get("pool").checked = result[19];
		        $get("siteowner").checked = result[20];
		        $get("reo").checked = result[22];
		        $get("shrt").checked = result[23];
		        $get("pub").checked = result[24];
		        ShowHomesFindTab();

			}
			catch(v_e)
			{
				alert("Unable to restore search");
			}	
		}
		HideWaitDialog();
	} 

    function ShowFeatureListing()
	{
		$get("siteowner").checked = true;
		ShowHomesFindTab();
	}
    
	function	GetSavedSearches()
	{		
		$get("UserSavedSearches").innerHTML = "Loading...";
		// Call web service
		requestUsers = Users.GetSavedSearches(SiteID,
					userID, //params
					OnGetSavedSearches);
	};
  
	function OnGetSavedSearches(result)
	{
		if (result[0] != "") 
		{
			$get("UserSavedSearches").innerHTML = result[0];
			ts_makeSortable($get("SavedSearchesList"));
		}
		else
		{
			$get("UserSavedSearches").innerHTML = "No searches saved";
		}
	}  

	function	UserSwitchNotification(search_id)
	{
		// Call web service
		requestUsers = Users.SearchNotifyChange(
					userID, search_id, //params
					OnUserSwitchNotification);
	};
  
	function OnUserSwitchNotification(result)
	{
		if (result) 
		{
			GetSavedSearches();
		}
	} 	 

	function	UserDeleteSearch(search_id)
	{
		// Call web service
		requestUsers = Users.DeleteSearch(
					userID, search_id, //params
					OnUserDeleteSearch);
	};
  
	function OnUserDeleteSearch(result)
	{
		if (result) 
		{
			GetSavedSearches();
		}
	} 	      
  
   function ShowHomesFindTab(bNotClosePO)
   {
        gActiveTab = "homesFindTab";
        
        Hide($get("mapInfoDiv"), true);        
        Hide($get("mapDiv"), true);
        Hide($get("courseDetailsDiv"), true); 
		Hide($get("homeDetailsDiv"), true);       
		Hide($get("fastFacts"), true);
		if (bNotClosePO == null || !bNotClosePO)
		    HidePropertyOrganizer();
        Hide($get("VisibleCourses"), true);        
		
		Hide($get("OutlineDrawBody"), true);
		Hide($get("VisibleCoursesBody"), true);
		Hide($get("fastFacts"), true);

		Hide($get("mapDiv"), true);
        Hide($get("homefindDiv"), false);
		$get("SearchResults").style.cursor = "wait";
		
		if (isNaN(gCurrentHomesFindPage) || gCurrentHomesFindPage == null || gCurrentHomesFindPage == 0) 
			gCurrentHomesFindPage = 1;

        ReSearch(gCurrentHomesFindPage, OnHomesFindResults);
   }

   function ShowWaitDialog()
   {       
        window.status = 'Please wait, loading...';
         
        var _backgroundElement = $get("ModalBG");   
        var _foregroundElement = $get("ModalForm");
        var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        
        var clientWidth;
        if (window.innerWidth) 
        {
            clientWidth = (window.__safari ? window.innerWidth : Math.min(window.innerWidth, document.documentElement.clientWidth));
        } 
        else 
        {
            clientWidth = document.documentElement.clientWidth;
        }
        
        var clientHeight;
        if (window.innerHeight) 
        {
            clientHeight = (window.__safari ? window.innerHeight : Math.min(window.innerHeight, document.documentElement.clientHeight));
        } 
        else 
        {
            clientHeight = document.documentElement.clientHeight;
        }

        _backgroundElement.style.left = scrollLeft+'px';
        _backgroundElement.style.top = scrollTop+'px';
        _backgroundElement.style.width = clientWidth + scrollLeft +'px';
        _backgroundElement.style.height = clientHeight + scrollTop +'px';
        _foregroundElement.style.left = scrollLeft+((clientWidth - _foregroundElement.offsetWidth)/2 - 100) +'px';
        _foregroundElement.style.top = scrollTop+((clientHeight - _foregroundElement.offsetHeight)/2) +'px';

        Hide($get("ModalBG"), false); 	
		Hide($get("ModalForm"), false);
   }

   function HideWaitDialog()
   {
        window.status = 'Done';
        Hide($get("ModalBG"), true); 
		Hide($get("ModalForm"), true);
   }
       
   function ShowHomeDetailsTab(ml_number)
   {
        gActiveTab = "homeDetailsTab";
    
        
        Hide($get("courseDetailsDiv"), true); 
		Hide($get("sortControl"), true);
		Hide($get("fastFacts"), true);
		HidePropertyOrganizer();

		Hide($get("homeDetailsDiv"), false);
		$get("homeDetailsDiv").style.cursor = "wait";
		
        // Store the current home index in the current home finder results page array
        gCurrentHomeDetailsIndex = 0;
        for (var i=0; i<HomesArray.length; i++)
        {
			if (HomesArray[i].ml_number == ml_number)
			{
				gCurrentHomeDetailsIndex = i;
				$get("homeDetailsHomeName").innerHTML = HomesArray[i].street.trim() + ", " + HomesArray[i].city + ", " + HomesArray[i].zip;
			}
        }
        
        HomeDetails(ml_number);
        dhtmlHistory.add("hd_ml_number", ml_number);
   } 
   
   function CloseHomeDetailsTab()
   {
        Hide($get("sortControl"), false);
        Hide($get("homeDetailsDiv"), true);
   }
   
   function SetHomeDetailsNextPrev() 
   {
		$get("HomeDetailsPrev").style.display = "";
		$get("HomeDetailsNext").style.display = "";
		
		if (gCurrentHomesFindPage == 1 && gCurrentHomeDetailsIndex <= 0)
		{
			$get("HomeDetailsPrev").style.display = "none";
		}
		
		//	Next Listing show/hide button feature
		var absPos = (gTotalHomeFindPages == 0 || gTotalHomeFindPages == 1) ? (gCurrentHomeDetailsIndex + 1) 
			: (((gCurrentHomesFindPage - 1) * gPageSize) + (gCurrentHomeDetailsIndex + 1));
		
		if (absPos >= homes_tab_l) 
			$get("HomeDetailsNext").style.display = "none";
   }
             	
/*
we should uncheck all oid = x where id != y, and we should check all oid != x
*/
	function RestoreCoursesList(coursesList, oid)
	{
	    var otherIndex = (oid == null) ? -1 : GetOthersIndex(oid);
	    
		var re = new RegExp("[,;]");
		var moidArray = coursesList.split(re);
		var cind = 0;
		// Uncheck all courses
        for (var j = 0; j < Others.length; j++) {
			var oar = Others[j];
			for (var i = 0; i < oar.anItems.length; i++) {
				var ot = oar.anItems[i];
				var b = otherIndex!= -1 && j != otherIndex;
				if (cind < moidArray.length && moidArray[cind] == ot.moid) {
					cind++;
					b = true;
				}
				$get("xing_" + oar.title + "_" + i).checked = b;
			}
		}
	}

	function HomesFind(pageNumber, func)
	{	
		var coursesList = "";
		$get("homeDetailsDiv").style.cursor = "wait";
		
		gCurrentHomesFindPage = pageNumber;
        // Get search criteria
		var minRooms = parseInt($get("MinRooms").value);
		var minBathRooms = parseInt($get("MinBathRooms").value);
	    var minPrice = getThouVal("MinCoursePrice",0);
	    var maxPrice = getThouVal("MaxCoursePrice",100000000);
   	    var minSqFt = parseInt($get("MinSqFt").value);
   	    var sortOrder = $get("SortOrder").value;
	     	     
		if (pageNumber == 0 || pageNumber == null) pageNumber = 1;
		gPageSize = (userID != "") ? homeUser : homeNotUser;
		
		var zipListStr = getZipListStr();
		var minYearBuilt = parseInt($get("AdvYearBuilt").value);
		
		var minLotSize = $get("AdvLotSize").value;
		var maxLotSize = $get("AdvMaxLotSize").value;
		
		var fireplace = $get("AdvFirePlace").checked;
		var dopool = $get("pool").checked;
		var doreo = $get("reo").checked;
		var doshrt = $get("shrt").checked;
		var dopub = $get("pub").checked;
		var doland = $get("land").checked;
		var dohomes = $get("homes").checked;
		var docommercial = $get("commercial").checked;
		var dowater = $get("waterfront").checked;
		var doowner = $get("siteowner").checked;
		
		if (func == undefined) func = OnHomesFindResults;
		
		paramsString = "func=0&minPrice=" + minPrice + "&maxPrice=" + maxPrice 
		    + "&minRooms=" + minRooms + "&minBathRooms=" + minBathRooms + "&minSqFt=" + minSqFt 
		    + "&othersList=" + GetOthersList() + "&sortOrder=" + sortOrder + "&minYearBuilt=" + minYearBuilt
		    + "&minLotSize=" + minLotSize + "&maxLotSize=" + maxLotSize + "&fireplace=" + fireplace
		    + "&pool=" + dopool + "&doreo=" + doreo  + "&doshrt=" + doshrt  + "&dopub=" + dopub + "&doland=" + doland + "&dohomes=" + dohomes + "&docommercial=" + docommercial + "&dowater=" + dowater + "&doowner=" + doowner;
        SaveSearchCriteria();
		
        // Call web service
        requestSearchRE = SearchRE.HomesFind(SiteID,
                    minPrice, maxPrice, minRooms, minBathRooms, minSqFt, GetOthersList(), sortOrder, gPageSize, pageNumber, 
					zipListStr, minYearBuilt, minLotSize, maxLotSize, fireplace, dopool, doreo, doshrt, dopub, doland, dohomes, dowater, doowner, false, false, docommercial, false, false, false,
                    func);
	}
	function ButtHomesFindByMLSNumber()
	{
	    $get("AdvMLSNumber").value = $get("AdvMLSNumberDisplayed").value;
	    if ($get("AdvMLSNumberDisplayed").value == '') {
	        return false;       
	    } else {
		    return HomesFindByMLSNumber(1,false,OnHomesFindResults);
		}
	}
	
	function HomesFindByMLSNumber(pageNumber, mapInfo, cb)
	{	
        Hide($get("mapInfoDiv"), !mapInfo);        
        Hide($get("VisibleCourses"), !mapInfo);        	    	        	

		gCurrentHomesFindPage = pageNumber;
		if (pageNumber == 0 || pageNumber == null) pageNumber = 1;
		
		$get("homeDetailsDiv").style.cursor = "wait";		

		var ml_number = $get("AdvMLSNumber").value;

		if (userID != "") 
		{
			gPageSize = homeUser;
		}
		else	
		{
			gPageSize = homeNotUser;
		}
   	    var sortOrder = $get("SortOrder").value;
		gSelectedCriteria = "ml_number";
		
		paramsString = "func=1&mls=" + ml_number;
        SaveSearchCriteria();

        requestSearchRE = SearchRE.HomesFindByMLSNumber(SiteID, ml_number,  gPageSize, pageNumber, sortOrder, mapInfo, cb);
	}

	function HomesFindByStreetAddressNA()
	{
		gSelectedCriteria = "address";
		SortControlOnchange();
	}
	
	function HomesFindByStreetAddress(pageNumber, mapInfo, cb)
	{	
        Hide($get("mapInfoDiv"), !mapInfo);        
        Hide($get("VisibleCourses"), !mapInfo);        	    	        	
	
		gCurrentHomesFindPage = pageNumber;
		if (pageNumber == 0 || pageNumber == null) pageNumber = 1;
	
	    $get("homeDetailsDiv").style.cursor = "wait";
	    
		var h_number = $get("AdvHouseNumber").value;
		if (h_number == null) 
		{
		    h_number = "";
		}
		var street = $get("AdvStreetName").value;
		if (street == null) 
		{
		    street = "";
		}
		var city = $get("AdvCity").value;
		if (city == null) 
		{
		    city = "";
		}
		if (userID != "") 
		{
			gPageSize = homeUser;
		}
		else	
		{
			gPageSize = homeNotUser;
		}
   	    var sortOrder = $get("SortOrder").value;
		
		gSelectedCriteria = "address";
		paramsString = "func=2&h_number=" + h_number + "&street=" + street + "&city=" + city + "&sortorder=" + sortOrder;
		
        // Call web service
        SaveSearchCriteria();
        requestSearchRE = SearchRE.HomesFindByStreetAddress(SiteID,
                    h_number, street, city, gPageSize, pageNumber, sortOrder, mapInfo, cb);
	}
	
    function SortControlOnchange()
    {
		ReSearch(1,OnHomesFindResults);
    }
    
    function PagerReSearch(pg) 
    {
		ReSearch(pg,OnHomesFindResults);
    }
    
    function ReSearch(pg,cb)
    {
        if (gSelectedCriteria == "ml_number") HomesFindByMLSNumber(pg,false,cb);
		else if (gSelectedCriteria == "address") HomesFindByStreetAddress(pg, false, cb);
		else HomesFind(pg,cb);
	}
	
	function ShowPrintWindow()
	{
	    window.open("PrintHomeList.aspx?" + paramsString);
	}
	function ShowBigView(mls)
	{
		window.open('BigView.aspx?id='+mls, 'KTCBigView', 'resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,width=1010,height=420');
	}
	function TrimDescr(str) {
		var ns = str.substring(0,280);
		if (ns.length == 280)
			ns += "...";
		return ns;
	}
	function OnHomesFindResults(result)
	{
		var tabTotal = result[0];
		var tab = result[1];
		cur_ml_number = 0;
		var TotalHomesText = "";
		
		if (tabTotal != null && tabTotal.rows != null && tabTotal.rows.length != 0)
		{
			totalHomes = parseInt(tabTotal.rows[0].total);
			homes_tab_l = totalHomes;
			
			$get("TotalHomes").innerHTML = TotalHomesText + 
			    (totalHomes == 0
			    ? "<br> <strong>" + zeroHomesMessage + "</strong>" :
			    "Returned <strong>" 
			    + totalHomes + "</strong> properties. <img src=\"images/Print.gif\" />&nbsp;&nbsp;<a href=\"javascript:ShowPrintWindow()\"><b>Print</b></a>&nbsp;");
			
			if (totalHomes > 1) 
			{
				Hide($get("sortControl"), false);
			}
			else
			{
				Hide($get("sortControl"), true);
			};
			
			if (totalHomes >= 0 && gSelectedCriteria != "ml_number" && gSelectedCriteria != "address") 
			{
				gPageSize = homeUser;
				Hide($get("SaveThisSearch"), false);
				if (userID == "") ShowSnapShotSection(false);
				else if (bShowSnapShotSection == null || bShowSnapShotSection) ShowSnapShotSection(true);
			}
			else
			{
				gPageSize = homeNotUser;
				Hide($get("SaveThisSearch"), true);
			}
			
			var row;
			
			if (tab.rows != null && tab.rows.length != 0)
     		{
			    var tabLength = tab.rows.length;
     		    if (totalHomes > 1) 
     		    {
				    var pagerControl = new PagerControl(gPageSize, 4);
				    Hide($get("topHomeFindPager"), false);
				    Hide($get("bottomHomeFindPager"), false);	
				    pagerControl.TopHostControlID = "topHomeFindPager";
				    pagerControl.BottomHostControlID = "bottomHomeFindPager";
    				
				    if (HomesArray.length > 0) HomesArray = new Array();
    								
				    pagerControl.CurrentPage = (parseInt(gCurrentHomesFindPage) > 0) ? parseInt(gCurrentHomesFindPage) : 1;

				    if (totalHomes != "")
				    {
					    pagerControl.PagesCount = (parseInt(totalHomes) > 0) ? Math.ceil(parseInt(totalHomes) / gPageSize) : 0;
				    }
				    else
				    {
					    pagerControl.PagesCount = 0;
				    } 		

				    gTotalHomeFindPages = pagerControl.PagesCount;
				    pagerControl.RenderPager("PagerReSearch");

     		    } 
     		    else 
     		    {
					Hide($get("sortControl"), true);
					Hide($get("topHomeFindPager"), true);
					Hide($get("bottomHomeFindPager"), true);
					gTotalHomeFindPages = 0;
				}     		    

				var tableHTML = "";
				for (var i = 0; i < tabLength; i++)
				{
				    OneHomeLat = tab.rows[i].latitude;
				    OneHomeLng = tab.rows[i].longitude;
				
					HomesArray[i] = new aHome(tab.rows[i].moid, tab.rows[i].ml_number, tab.rows[i].lp, tab.rows[i].longitude, tab.rows[i].latitude, tab.rows[i].lotsqft,
						tab.rows[i].street,	tab.rows[i].city, tab.rows[i].st, tab.rows[i].zip, "", tab.rows[i].html, tab.rows[i].officename,tab.rows[i].num_big);
											
					tableHTML += "<table id='hf" + tab.rows[i].ml_number + "' cellpadding='0' cellspacing='0' style='width: 650px;'>" ;
					var stl = "'padding: 5px; border: solid 1px #a3a3a3;'";
					var stlt = "";
					var stlh = "list";
					if (tab.rows[i].owners==1) {
						stl = "'border: solid 5px #000000;'";
						stlt = g_highlight;
						stlh = "listHigh";
					}
					tableHTML +=	"<tr>" +
										"<td rowspan=5 style='vertical-align: top; width: 158px'>" +
											"<a href=\"javascript:ShowHomeDetailsTab(" + tab.rows[i].ml_number +
											")\"><img width=144 alt=\"Click for Details\" style="+stl+" src='MLSImages/" + ImPrefix +
											tab.rows[i].ml_number + ".jpg' onError=\"this.onerror=null;this.src='NoPhoto.gif';\"/></a>";
										"</td>" ;

					tableHTML +=    	"<td style='width: 330px; "+stlt+"'>" +	"<strong>" + tab.rows[i].street + ", " + tab.rows[i].city + ", " + tab.rows[i].zip + "</strong>" +
										"</td>";
					tableHTML += "<td colspan=2><div class='"+stlh+"'><a href=\"javascript:ShowHomeDetailsTab(" + HomesArray[i].ml_number +	")\">Details</a></div>";
					if (HomesArray[i].num_big > 0) tableHTML += "<div class='"+stlh+"'><a href=\"javascript:ShowBigView(" + HomesArray[i].ml_number +	")\">Big Pictures</a></div>";
					if (typeof(tab.rows[i].latitude) != "object" && typeof(tab.rows[i].longitude) != "object"
					    && (tab.rows[i].latitude != 0) && (tab.rows[i].longitude != 0))
					{
						tableHTML += "<div class='"+stlh+"'><a href='javascript: LocateHomeOnMap(" + tab.rows[i].ml_number
										+ ", " + tab.rows[i].latitude + ", " + tab.rows[i].longitude + ", " + tab.rows[i].lotsqft +
						                ");'>Map It</a></div>";
					}
					tableHTML += "</td></tr>";
                    tableHTML += "<tr><td rowspan=2 style='vertical-align:top;"+stlt+"'>" + tab.rows[i].html + "</td>";

                    var listedPrice = formatCurrency(tab.rows[i].lp);
					tableHTML +=	"<td style='"+stlt+"'>MLS#: " + tab.rows[i].ml_number +
									    "</td><td style='text-align:right;"+stlt+"'><strong>" +	listedPrice + "</strong></td></tr>";
					tableHTML += "<tr><td colspan=2 style='text-align:right;'><a style='"+stlt+"' href=\"javascript:ShowRequestDetailsForm(" + HomesArray[i].ml_number + ")\">Request details for this property</a></td></tr>";
					var descr = TrimDescr(tab.rows[i].descr);
					tableHTML += "<tr><td colspan=3>" + descr + "</td></tr>";

					tableHTML += "<tr><td>" +
										"<a href=\"javascript:SaveProperty(" + HomesArray[i].ml_number + ")\">Save this property</a>,&nbsp;<a href=\"javascript:ShowSearchEmailForm(false, " + HomesArray[i].ml_number +
										")\">Email this property to a friend</a>" + 
										"</td>";
					tableHTML += "<td colspan=2 style='text-align:right;'><span style='font-size:xx-small; color: gray'>" + tab.rows[i].officename + "</span></td></tr></table>";
                    tableHTML += "<div style='width: 650px; text-align:right;'><hr size=\"1\" color=\"#000000\"></div>";
				}
				Hide($get("mapDiv"), true);
				Hide($get("homefindDiv"), false);
				$get("homefindRes").innerHTML = tableHTML;
				$get("SearchResults").style.cursor = "default";
			}
			else
			{
				$get("SearchResults").style.cursor = "default";

				Hide($get("sortControl"), true);
				Hide($get("topHomeFindPager"), true);
				Hide($get("bottomHomeFindPager"), true);
				
				$get("homefindRes").innerHTML = "";
				Hide($get("mapDiv"), true);
				Hide($get("homefindDiv"), false);	
			}
		}
		else
		{
			$get("TotalHomes").innerHTML = TotalHomesText + "<br> <strong>" + zeroHomesMessage + "</strong><div></div>";
			Hide($get("sortControl"), true);
			Hide($get("topHomeFindPager"), true);
			Hide($get("bottomHomeFindPager"), true);
			Hide($get("SaveThisSearch"), true);
			ShowSnapShotSection(false);
			
			$get("SearchResults").style.cursor = "default";
			
			$get("homefindRes").innerHTML = "";
			Hide($get("mapDiv"), true);
			Hide($get("mapInfoDiv"), true);
			Hide($get("homefindDiv"), false);
		}
		AddFeaturedListingBoundaries(result);
        HideWaitDialog();
	}
	
	function AddFeaturedListingBoundaries(result) 
	{
	    if (result.length < 3) return;
	    var table = result[2];
	    var homes_tab = result[1];
	    HomeCache.Clear();
	    var homes_tab_length = (homes_tab != null && homes_tab.rows != null) ? homes_tab.rows.length : 0;
	    for (var i = 0; i < homes_tab_length; i++)
        {
            HomeCache.Add(cntDoSearchHomes, homes_tab.rows[i].ml_number, homes_tab.rows[i].lp,
                homes_tab.rows[i].longitude,  homes_tab.rows[i].latitude, homes_tab.rows[i].lotsqft, homes_tab.rows[i].street, homes_tab.rows[i].city,
                homes_tab.rows[i].st, homes_tab.rows[i].zip, homes_tab.rows[i].html, homes_tab.rows[i].officename);
        }
        
	    HomeCache.AddBounds(table);
	    
	}

	function OnHomesFindResultsForDetails(result)
	{
		var tabTotal = result[0];
		var tab = result[1];
		cur_ml_number = 0;
		
		if (tabTotal.rows != null && tabTotal.rows.length != 0)
		{
			totalHomes = parseInt(tabTotal.rows[0].total);
			
			if (totalHomes != "")
			{
				gTotalHomeFindPages = (parseInt(totalHomes) > 0) ? Math.ceil(parseInt(totalHomes) / gPageSize) : 0;
			}
			else
			{
				gTotalHomeFindPages = 0;
			} 		
	
			HomesArray = new Array();
			
			var row;
			var tabLength = tab.rows == null? 0 : tab.rows.length;

			for (var i = 0; i < tabLength; i++)
			{
				HomesArray[i] = new aHome(tab.rows[i].moid, tab.rows[i].ml_number, tab.rows[i].lp, tab.rows[i].longitude, tab.rows[i].latitude, tab.rows[i].lotsqft,
				    tab.rows[i].street, tab.rows[i].city, tab.rows[i].st, tab.rows[i].zip, tab.rows[i].html, tab.rows[i].officename,tab.rows[i].num_big);
			}

			// Call home details method
			if (gCurrentHomeDetailsIndex >= gPageSize)
			{
				gCurrentHomeDetailsIndex = 0;
				HomeDetails(HomesArray[0].ml_number);
			}
			else if (gCurrentHomeDetailsIndex < 0)
			{
 				gCurrentHomeDetailsIndex = gPageSize - 1;
				HomeDetails(HomesArray[gPageSize - 1].ml_number);
			}
		}
	}

	function NextHomeDetails(direction)
	{
		if (direction)
		{
			gCurrentHomeDetailsIndex ++;

			if (gCurrentHomeDetailsIndex < gPageSize && HomesArray[gCurrentHomeDetailsIndex] != null)
			{
				HomeDetails(HomesArray[gCurrentHomeDetailsIndex].ml_number);
			}
			else if (gCurrentHomeDetailsIndex >= gPageSize) 
			{
				ReSearch(gCurrentHomesFindPage + 1,OnHomesFindResultsForDetails);
			}
		}
		else
		{
			gCurrentHomeDetailsIndex --;

			if (gCurrentHomeDetailsIndex >= 0 && HomesArray[gCurrentHomeDetailsIndex] != null)
			{
				HomeDetails(HomesArray[gCurrentHomeDetailsIndex].ml_number);
			}
			else if (gCurrentHomeDetailsIndex < 0) 
			{
				if (gCurrentHomesFindPage > 1) 
				{
					ReSearch(gCurrentHomesFindPage - 1,OnHomesFindResultsForDetails);
				}
				else
				{
					gCurrentHomeDetailsIndex = 0;
				}
			}
		}
	}

	function HomeDetails(ml_number)
	{
        // Call web service
        SaveSearchCriteria();
        requestSearchRE = SearchRE.HomesFindGetHomeDetails(
					SiteID, ml_number, false,//params
                    OnHomeDetailsResults);
	}
	
	function PrintDetails(ml_number)
	{
	    window.open("PrintHomeDetails.aspx?SiteId=" + SiteID + "&mls=" + ml_number);
	}
	
	function OnHomeDetailsResults(result)
	{
		if ((result[2] != "" && result[2] != null) || (result[4] != "" && result[4] != null))
 		{
			var tableHTML = result[4];
			UpdateHomesFlashViewer(result[0]);

			var co = GetAnItemByMoid(result[1]);
			if (co.id != 0) {
				var oind = GetOthersIndex(co.oid);
				tableHTML = "<br/><b>" + Others[oind].title + "</b>: " +
							"<a href='view.aspx?id=" + co.id + "&oid=" + co.oid
					+ "' title='Read about " + co.name + "'>" + co.name + "</a><br/>" + tableHTML;
			} else {
				var oind = GetOthersIndex(co.oid);
				tableHTML = "<br/><b>" + Others[oind].title + "</b>: " + co.name + "<br/>" + tableHTML;
			}
			$get("homeDetailsHomeName").innerHTML = result[3];	
			Hide($get("homeDetailsText"), false);
			Hide($get("homeDetailsTextConstant"), false);
			$get("homeDetailsText").innerHTML = result[2];
			$get("homeDetailsDiv").style.cursor = "default";
			$get("homeDetailsTextConstant").innerHTML = tableHTML;
		}
		else
		{
			Hide($get("homeDetailsText"), false);
			Hide($get("homeDetailsTextConstant"), false);
			$get("homeDetailsText").innerHTML = "";
			$get("homeDetailsDiv").style.cursor = "default";
			$get("homeDetailsTextConstant").innerHTML = "";
		}
		SetHomeDetailsNextPrev();
	}

	function UpdateHomesFlashViewer(ml_number)
	{
		Hide($get("HomeFlashViewer"), false);
		Hide($get("HomeNoImages"), true);

        var flashTag = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="470" height="440" id="flashviewer" align="middle">' +
			'<param name="allowScriptAccess" value="sameDomain" />' + 
			'<param name="movie" value="rotatorHome.swf?imagesxml=xml.aspx&var1=sid&var1data=' + SiteID + '&var2=id&var2data=' + ml_number +'&var3=oid&var3data=0" />' +
			'<param name="quality" value="high" />' +
			'<param name="vmode" value="opaque" />' +
			'<param name="bgcolor" value="#ffffff" />' +
			'<embed src="rotatorHome.swf?imagesxml=xml.aspx&var1=sid&var1data=' + SiteID + '&var2=id&var2data=' + ml_number +'&var3=oid&var3data=0" quality="high" bgcolor="#ffffff" width="470" height="440" name="flashviewer" align="middle" vmode="opaque"  allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>';
		$get("HomeFlashViewer").innerHTML = flashTag;

	}

    function HomesFilter() 
    {
		var roomsText = $get("MinRooms");
		var bathRoomsText = $get("MinBathRooms");
		var minSqFtText = $get("MinSqFt");
		var min=0,max=0,rooms=0,bathrooms=0;
		min = getThouVal("MinCoursePrice",0);
		max = getThouVal("MaxCoursePrice",100000000);
		rooms = parseInt(roomsText.value);
		bathrooms = parseInt(bathRoomsText.value);
		sqft = parseInt(minSqFtText.value);

		var year = parseInt($get("AdvYearBuilt").value);
		
		if (isNaN(min)) {
			//alert('Min is not a number');
			return false;
		}
		if (isNaN(max)) {
			//alert('Max is not a number');
			return false;
		}  
		if (isNaN(rooms)) {
			//alert('Bedrooms is not a number');
			return false;
		}
		if (isNaN(bathrooms)) {
			//alert('Bathrooms is not a number');
			return false;
		}
		if (isNaN(sqft)) {
			//alert('Minimum Size is not a number');
			return false;
		}
		if (min < 0 || max < 0 || rooms < 0 || bathrooms < 0)
			return false;

		if (isNaN(year)) {
			//alert('Year built is not a number');
			return false;
		}	

        if (gActiveTab == "mapTab")
        {
            if (gSelectedCriteria == "standard") 
            {
                //map.setCenter(new GLatLng(StartLat, StartLng, true), gZoomLevelToShowCourses);
                DoSearchHomes();
            }
            else if (gSelectedCriteria == "ml_number")
            {
                if (OneHomeLat != null && 
                    OneHomeLng != null && 
                    OneHomeLat != 0 && 
                    OneHomeLng != 0) { 
                
                    map.setCenter(new GLatLng(OneHomeLat, OneHomeLng, true), gZoomLevelToShowHomes); 
                
                }
                HomesFindByMLSNumber(1, true, OnCompleteSearchHomes);
            }
            else if (gSelectedCriteria == "address") HomesFindByStreetAddress(1, true, OnCompleteSearchHomes);
        }
        else HomesFind(1, OnHomesFindResults);						
    }
    
    function stripNonNumeric(val) {
        var re = /[^0-9\.,]/g;
       
        return val.replace(re, "");
    }
    function parseIntWithCommas(val) 
    {
        var re = /,/g;
        
        return parseInt(val.replace(re, ""));
    }
    
    function CheckInt(doda,def)
    {
        
        var val = parseIntWithCommas(doda.value);
        if (isNaN(val) || val < 0)
            doda.value = def;
        else doda.value = val;
    }
    
    function CheckFloat(doda,def)
    {
        var re = /,/g;
        var val = parseFloat(doda.value.replace(re,""));
        if (isNaN(val) || val < 0)
            doda.value = def;
        else  doda.value = val;
        
    }
    
    function getThouVal(el,val) 
    {
			var minText = $get(el);
			var min = parseIntWithCommas(minText.value);
			if (isNaN(min)) {
				//alert(el + ' is not a number');
				return val;
			}
            min *= 1000;
            if (min > 1000000000) min = 100000000;
			return min;
    }
    
	function clearThis(moid)
	{
	    if (VisOtherCache.VisItems[moid].outlines != null) map.removeOverlay(VisOtherCache.VisItems[moid].outlines);
	    VisOtherCache.VisItems[moid].outlines = null;
	}
	
	function GetIndex(oind)
	{
	    for (var i = 0; i < Others.length; i++)
	    {
	        if (Others[i].oid == oind) break;
	    }
	    return i;
	}

    function dc(sel, oind,i) 
    {
        var ot = (sel == 0) ? Others[oind].anItems[i] : Others[GetOthersIndex(oind)].anItems[i];
		
		if (sel == 0) 
		{	
			$get("mapDiv").style.cursor = "wait";

		    curZoomLevel = map.getZoom();
			var point = new GLatLng(ot.lat, ot.lng, true);
			map.setCenter(point, curZoomLevel);
			
			$get("mapDiv").style.cursor = "default";

			var foo = document.createElement("div"); 
			foo.innerHTML = VisOtherCache.GetInfoWindowHTML(ot.moid);
			map.openInfoWindow(point, foo);
		} 
		else if (sel == 1) 
		{
		    gSelectedCriteria = "standard";
			RestoreCoursesList(ot.moid.toString(), oind);
			ShowHomesFindTab();
		} 
    }
    
    function doZoom(oind, i) 
    {
		var ot = Others[GetOthersIndex(oind)].anItems[i];
        map.setCenter(new GLatLng(ot.lat, ot.lng, true), gZoomLevelToShowHomes);
    }

	function SaveMapCenter()	
	{
		if (map != null) mapCenter1 = map.getCenter();
	}
	
	function GetNearestObjects()
	{
   		$get("mapDiv").style.cursor = "default";
   		
		mapCenter2 = map.getCenter();
		if (mapCenter1 != null)
			var distance = mapCenter2.distanceFrom(mapCenter1);
		else 
			var distance = 0;
		
        SaveMapCenter();
        
        if (gSelectedCriteria == "standard") DoSearchHomes();
        else if (gSelectedCriteria == "ml_number") {
			HomesFindByMLSNumber(1, true, OnCompleteSearchHomes);
		}
   }
   
	function GetOtherByID(oid, id)
	{
		var oind = GetOthersIndex(oid);
		if (oind < 0) return null;
		var oar = Others[oind].anItems;
		for (var i=0;i<oar.length;i++) {
			if (oar[i].id == id)
				return oar[i];
		}
		return null;
	}

    function historyChange(newLocation, historyData) 
    {
        addHistory = true;
        if (newLocation == "") ShowHomesFindTab();
        else if (newLocation == "map") ShowMapTab(gZoomLevelToShowCourses);
        else if (newLocation == "homemap")
        {
            var obj = historyStorage.get("homemap");
            LocateHomeOnMap(obj.ml_number, obj.latitude, obj.longitude, obj.lotsqft);
        }
        else if (newLocation == "hd_ml_number") ShowHomeDetailsTab(historyStorage.get("hd_ml_number"));
    }
   	
    function loadIt() 
    {
        if (ConfidentialMessage != null) userInfoTextS += ConfidentialMessage;
        
        RestoreSearchCriteria();
		GetAdvCriteriaData();

		switch (gActiveTab) {
		    case 'userTab':
		        ShowPropertyOrganizer();
		        ShowHomesFindTab();
		        break;
		    case 'mapTab':
		        addHistory = false;
		        var ot = BackToDefaultPage();
		        if (ot != null) {
		            ShowMapTab(gZoomLevelToShowHomes);
		            map.setCenter(new GLatLng(ot.lat, ot.lng, true), gZoomLevelToShowHomes);
		        }
		        else if (g_mls_number != '') {
		            LocateHomeOnMap(g_mls_number,g_lat,g_long,47000);
		        } else ShowMapTab(gZoomLevelToShowCourses);
		        break;
		    default:
		    case 'homesFindTab':
		        if (g_mls_number != '') {
		            $get("AdvMLSNumber").value = g_mls_number;
		            $get("AdvMLSNumberDisplayed").value = g_mls_number;
		            HomesFindByMLSNumber(1, false, OnHomesFindResults);
		            ShowAdvCriteria();
		        }
		        else if (g_search_snapshot_id != '') {
		            UserRestoreSearch(g_search_snapshot_id);
		        }
		        else {
		            BackToDefaultPage();
		            ShowHomesFindTab();
		            ShowStandardCriteria();
		        }

		        sortables_init();
		        break;
		}
        requestSearchRE = SearchRE.GetCourseOutlines(SiteID, OnLoadCourseOutlinesResults);        
    }
    
    function BackToDefaultPage()
    {
        var ot = null;
        if (selectedCourse != '')
        {
            ot = GetOtherByID(parseInt(selectedOther), parseInt(selectedCourse));
            if (ot != null) RestoreCoursesList("" + ot.moid, parseInt(selectedOther));
        }
        return ot;
    }
    
    function GetOthersList()
    {
        var result = "";
        for (var i = 0; i < Others.length; i++) 
        {
			var added=false;
		    for (var j = 0; j < Others[i].anItems.length; j++)
		    {
			    if ($get("xing_" + Others[i].title + "_" + j).checked)
			    {
				    result += Others[i].anItems[j].moid + ",";
				    added=true;
			    }
		    }
		    if (added) result = result.substr(0,result.length-1);
		    if (i != Others.length-1)
				result += ";";
		}
        return result;
    }
    
	function DoSearchHomes()
	{
        if (map == null) return;
        
	    ShowWaitDialog();
	    $get("mapDiv").style.cursor = "wait";
	
        // Get search criteria
        var minRooms = parseInt($get("MinRooms").value);
        var minBathRooms = parseInt($get("MinBathRooms").value); 
        var minPrice = getThouVal("MinCoursePrice",0);
        var maxPrice = getThouVal("MaxCoursePrice",100000000);
        var minSqFt = parseInt($get("MinSqFt").value);
	    
        var zipListStr = getZipListStr();
        var minYearBuilt = parseInt($get("AdvYearBuilt").value);
        
        var minLotSize = $get("AdvLotSize").value;
        var maxLotSize = $get("AdvMaxLotSize").value;
        
        var fireplace = $get("AdvFirePlace").checked;
        var dopool = $get("pool").checked;
        var doreo = $get("reo").checked;
        var doshrt = $get("shrt").checked;
        var dopub = $get("pub").checked;
        var doland = $get("land").checked;
        var dohomes = $get("homes").checked;
        var docommercial = $get("commercial").checked;
        var dowater = $get("waterfront").checked;
        var doowner = $get("siteowner").checked;
	    
        cntDoSearchHomes++;

        requestSearchRE = SearchRE.DoSearchHomes(cntDoSearchHomes, SiteID,
            minPrice, maxPrice, minRooms, minBathRooms, minSqFt, map.getBounds().getSouthWest().lat(), map.getBounds().getSouthWest().lng(), 
            map.getBounds().getNorthEast().lat(), map.getBounds().getNorthEast().lng(), GetOthersList(),
            zipListStr, minYearBuilt, minLotSize, maxLotSize, fireplace, dopool, doreo, doshrt, dopub, doland, dohomes, dowater, doowner, false, false, docommercial, false, false, false,
            OnCompleteSearchHomes);
	}
	
    function DrawVisibleOther(table)
    {
        cntVisOthers++;
        var t_length = 0;
        if (table != null && table.rows != null) {
            t_length = table.rows.length;
        }
        
        for (var i = 0; i < t_length; i++)
        {
            VisOtherCache.Add(cntVisOthers, table.rows[i].oid, table.rows[i].moid, table.rows[i].count);
        }
        
        VisOtherCache.Remove(cntVisOthers);
        VisOtherCache.ShowVisItems();
    }

	function OnCompleteSearchHomes(result)
	{
	    if (gSelectedCriteria == "standard") if (result[0].rows[0].counter != cntDoSearchHomes) return;
	    
	    var homes_tab = result[1];
        var homes_tab_length = (homes_tab.rows == null) ? 0 : homes_tab.rows.length;
        
        if (homes_tab_length == 0 || gSelectedCriteria == "ml_number")
        {
			$get("mapInfoDiv").innerHTML = "<b>" + homes_tab_length + "</b> homes visible.";
			Hide($get("mapInfoDiv"), false);
            HomeCache.Clear();
        }
        if (homes_tab_length <= nVisibleHomes)
        {
	        $get("mapInfoDiv").innerHTML = "";
		    $get("mapInfoDiv").style.display = "none";
		    
            for (var i = 0; i < homes_tab_length; i++)
            {
                HomeCache.Add(cntDoSearchHomes, homes_tab.rows[i].ml_number, homes_tab.rows[i].lp,
                    homes_tab.rows[i].longitude,  homes_tab.rows[i].latitude, homes_tab.rows[i].lotsqft, homes_tab.rows[i].street, homes_tab.rows[i].city,
                    homes_tab.rows[i].st, homes_tab.rows[i].zip, homes_tab.rows[i].html, homes_tab.rows[i].officename);
            }
            
            if (gSelectedCriteria == "standard")
            {
                HomeCache.Remove(cntDoSearchHomes);
                HomeCache.AddMoid(result[4]);
            }
            HomeCache.AddBounds(result[3]);
        }
        else 
        {
		    $get("mapInfoDiv").innerHTML = "More than <b>40</b> homes visible";
            $get("mapInfoDiv").style.display = "";
            //HomeCache.Clear();
        }
        
        DrawVisibleOther(result[2]);

        $get("mapDiv").style.cursor = "default";
		HideWaitDialog();
		
		search_str = get_search_str();
	}
	
	function LocateHomeOnMap(ml_number, latitude, longitude, lotsqft)
	{
	    var zoomLevel = gZoomLevelToShowOneHome;
	    
	    if (lotsqft != null && lotsqft > 100) {
	        zoomLevel = gZoomLevelToShowHomes;
	    }
		cur_ml_number = ml_number;
		ShowMapTab(zoomLevel);
		map.setCenter(new GLatLng(latitude, longitude, true), zoomLevel);
		
		var homeMapObj = new Object();
		homeMapObj.ml_number = ml_number;
		homeMapObj.latitude = latitude;
		homeMapObj.longitude = longitude;
		homeMapObj.lotsqft = lotsqft;
		dhtmlHistory.add("homemap", homeMapObj);
		
		DoSearchHomes();
	}
		
    function OnTimeout(result) 
    {
        alert("Timed out");
    }

    function OnError(result) 
    {
        try
        {
			alert(result.get_message());
		}
		catch(v_e)
		{
			alert("Unable to retrieve data");
		}
    }

	function RestoreSearchCriteria()
	{
		var ctrlValue = "";
        if ($get("MinRooms")!= null)
        {
            ctrlValue = getCookie("MinRooms");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("MinRooms").value = ctrlValue;
            }
        }

        if ($get("MinBathRooms")!= null)
        {
            ctrlValue = getCookie("MinBathRooms");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("MinBathRooms").value = parseInt(ctrlValue);
            }
        }
               
        if ($get("MinCoursePrice")!= null)
        {
            ctrlValue = getCookie("MinPrice");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("MinCoursePrice").value = ctrlValue;
            }
        }
        
        if ($get("MaxCoursePrice")!= null)
        {
            ctrlValue = getCookie("MaxPrice");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("MaxCoursePrice").value = ctrlValue;
            }
        }
               
        if ($get("MinSqFt")!= null)
        {
            ctrlValue = getCookie("MinSqFt");
            if (ctrlValue != "")
            {
                is_new_user = false;            
                $get("MinSqFt").value = ctrlValue;
            }
        }

		// Get User's Email 
       ctrlValue = getCookie("UserEmail");
       if (ctrlValue != "")
       {
            userEmail = ctrlValue;
       }
		// Get User's ID 
       ctrlValue = getCookie("UserID");
       if (ctrlValue != "")
       {
            userID = parseInt(ctrlValue);
       }       
       
       //   Advanced search
       
        if ($get("AdvMLSNumber")!= null)
        {
            ctrlValue = getCookie("AdvMLSNumber");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("AdvMLSNumberDisplayed").value = ctrlValue;
                $get("AdvMLSNumber").value = ctrlValue;
            }
        }
        
        if ($get("AdvHouseNumber")!= null)
        {
            ctrlValue = getCookie("AdvHouseNumber");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("AdvHouseNumber").value = ctrlValue;
            }
        }

        if ($get("AdvStreetName")!= null)
        {
            ctrlValue = getCookie("AdvStreetName");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("AdvStreetName").value = ctrlValue;
            }
        }

        if ($get("AdvCity")!= null)
        {
            ctrlValue = getCookie("AdvCity");
            if (ctrlValue != "")
            {
                is_new_user = false;
                $get("AdvCity").value = ctrlValue;
            }
        }
       
       ctrlValue = getCookie("SelectedCriteria");
       if (ctrlValue != "")
            gSelectedCriteria = ctrlValue;
       else gSelectedCriteria = "standard";
	}
	
    function SaveSearchCriteria() 
    {
        if ($get("MinRooms") != null)
        {
            setCookie("MinRooms", $get("MinRooms").value, getExpDate(180, 0, 0));
        }   
        
        if ($get("MinBathRooms") != null)
        {
            setCookie("MinBathRooms", $get("MinBathRooms").value, getExpDate(180, 0, 0));
        }   
        
        if ($get("MinCoursePrice") != null)
        {
            setCookie("MinPrice", $get("MinCoursePrice").value, getExpDate(180, 0, 0));
        }
        
        if ($get("MaxCoursePrice") != null)
        {
            setCookie("MaxPrice", $get("MaxCoursePrice").value, getExpDate(180, 0, 0));
        }

        if ($get("MinSqFt") != null)
        {
            setCookie("MinSqFt", $get("MinSqFt").value, getExpDate(180, 0, 0));
        }
        
        if (userEmail != "")
        {
			setCookie("UserEmail", userEmail, getExpDate(180, 0, 0));
        }
        
        if (userID != "")
        {
			setCookie("UserID", userID, getExpDate(180, 0, 0));
        }
        
        //  Advanced search
        
        if ($get("AdvMLSNumber") != null)
        {
            setCookie("AdvMLSNumber", $get("AdvMLSNumber").value, getExpDate(180, 0, 0));
        }
        
        if ($get("AdvHouseNumber") != null)
        {
            setCookie("AdvHouseNumber", $get("AdvHouseNumber").value, getExpDate(180, 0, 0));
        }
        
        if ($get("AdvStreetName") != null)
        {
            setCookie("AdvStreetName", $get("AdvStreetName").value, getExpDate(180, 0, 0));
        }
        
        if ($get("AdvCity") != null)
        {
            setCookie("AdvCity", $get("AdvCity").value, getExpDate(180, 0, 0));
        }
        setCookie("SelectedCriteria", gSelectedCriteria, getExpDate(180, 0, 0));
    }
	
	function OnLoadCourseOutlinesResults(tab)
	{
	    if (tab == null || tab.rows == null)
	        return;
	    
		var tabLength = tab.rows.length;
		var courseOutIndex = 0;
		var tempArray = new Array();
		var firstPoint;
		
		if (tabLength == 0) return;
		
 		var currCourseId = tab.rows[0].importid;
 		var currOid = tab.rows[0].oid;
 		var index=0;

		for (var i = 0; i <= tabLength; i++)
		{
			var row, newCourseId, newOid;
			if (i < tabLength) 
			{
				row = tab.rows[i];
				newCourseId = row.importid;
				newOid = row.oid;
			} 
			else 
			{
				newCourseId = -1;
				newOid = -1;
			}

			if (newCourseId == currCourseId && newOid == currOid)
			{
				var pt = new GLatLng(row.lat, row.lng);
				if (tempArray.length == 0) firstPoint = pt;
				tempArray.push(pt);
			}
			else
			{
				tempArray.push(firstPoint);
				var oind = GetOthersIndex(currOid);
				var len = Others[oind].anItems.length;
				var oar = Others[oind].anItems;
				while (index < len && oar[index].id != currCourseId) index++;
				oar[index].outline = new GPolyline(tempArray, "#66cc33", 4, 0.8);
				currCourseId = newCourseId;
				if (currOid != newOid) index=0;
				currOid = newOid;
				tempArray = new Array();
				if (newCourseId == -1)
					break;
				i--;
			}
		}
	}	 

	// Determines if a point is inside a polyline
    function Inside(pt, pl) 
    {
        if (pl == null) return false;
    
		var j = pl.getVertexCount() - 1;
		var c = false;

	    for (var i=0; i < pl.getVertexCount(); j = i++) 
	    {
			if ((((pl.getVertex(i).lat() <= pt.lat()) && (pt.lat() < pl.getVertex(j).lat())) ||
             ((pl.getVertex(j).lat() <= pt.lat()) && (pt.lat() < pl.getVertex(i).lat()))) &&
            (pt.lng() < (pl.getVertex(j).lng() - pl.getVertex(i).lng()) * (pt.lat() - pl.getVertex(i).lat()) / (pl.getVertex(j).lat() - pl.getVertex(i).lat()) + pl.getVertex(i).lng()))
				c = !c;
	    }
	    return c;
	}
	
    function ClickOnMap(overlay, point) 
    {
        if (typeof(point) == "undefined") return;
        else
        {
            for (moid in VisOtherCache.VisItems)
            {
                if (typeof(VisOtherCache.VisItems[moid].outlines) != "undefined")
                {
                    if (Inside(point, VisOtherCache.VisItems[moid].outlines))
                    {
                        var foo = document.createElement("div");
					    foo.innerHTML = VisOtherCache.GetInfoWindowHTML(moid);
					    map.openInfoWindow(point, foo);
					    break;
                    }
                }
            }
        }
    }
    
	function GetAnItemByMoid(moid) 
	{
		for (var j=0; j<Others.length; j++) 
		{
			var ot = Others[j].anItems;
			for (var i=0; i<ot.length; i++) 
			{
				if (ot[i].moid == moid)	return ot[i];
			}
		}
		return null;
	}
	
	function GetMOIDIndex(oind, moid) 
	{
		for (var i=0; i<Others[oind].anItems.length; i++) 
		{
			if (Others[oind].anItems[i].moid == moid) return i;
		}
		return -1;
	}

	function getQueryString( param ) 
	{
		var re = new RegExp( param + "=([^\\&]*)", "i" );
		var arr = re.exec( document.location.search );
		if ( arr == null )
			return "";
		return arr[1];
	}
	
	// Drag'N'Drop
	var DragNDrop = 
    { 
		obj : null, 

		init : function(o) 
		{ 
			o.onmousedown = DragNDrop.start; 
			o.onDragEnd = new Function(); 
		}, 

		start : function(e) 
		{
			e = DragNDrop.fixE(e); 
			var o = DragNDrop.obj = this; 
			o.lastMouseX = e.clientX; 
			o.lastMouseY = e.clientY; 
			document.onmousemove = DragNDrop.drag; 
			document.onmouseup = DragNDrop.end; 
			return false; 
		}, 

		drag : function(e) 
		{ 	
			e = DragNDrop.fixE(e); 
			var o = DragNDrop.obj; 
			var parent = o.parentNode;
			var newX = parseInt(parent.style.left) + e.clientX - o.lastMouseX; 
			var newY = parseInt(parent.style.top) + e.clientY - o.lastMouseY; 
			if (!isNaN(newX)) 
			{
				//DragNDrop.obj.style.left = newX + "px";
				parent.style.left = newX + "px";
			}
			if (!isNaN(newY)) 
			{
    			//DragNDrop.obj.style.top = newY + "px"; 
    			parent.style.top = newY + "px";
			}
			DragNDrop.obj.lastMouseX = e.clientX; 
			DragNDrop.obj.lastMouseY = e.clientY; 
			return false; 
		}, 

		end : function(e) 
		{ 
			e = DragNDrop.fixE(e); 
			document.onmousemove = null; 
			document.onmouseup = null; 
			DragNDrop.obj.onDragEnd(e.clientX, e.clientY); 
			DragNDrop.obj = null; 
		}, 

		fixE : function(e) 
		{ 
			if (typeof e == 'undefined') e = window.event; 
			return e; 
		} 
	}
	
	function GetAdvCriteriaData()
	{	
		requestUsers = SearchRE.GetList(SiteID,	OnGetAdvCriteriaData);
	}
	
	function OnGetAdvCriteriaData(tab)
	{
		var tabLength = tab.rows == null ? 0 : tab.rows.length;
		var html = "";
		var	selectCtrl = $get("AdvZipcodesList");
		
		for (var i = 0; i < tabLength; i++)
		{
			var row = tab.rows[i];
			
			newElem = document.createElement("option");
			newElem.text = row.Zip;
			newElem.value = "'" + row.Zip + "'";
			
			selectCtrl.options[i] = newElem;
		}
	} 	  	
	    
    function ShowSnapShotSection(showSection)
    {
        if (userID == "" && (showSection == null || showSection))
	    {
	        bShowSnapShotSection = null;
	        ShowPropertyOrganizer(POC_FROM_SHOW_SNAPSHOT);
	        return;
	    }
        if (showSection == null)
        {
            if (bShowSnapShotSection == null)
                bShowSnapShotSection = true;
            else
                bShowSnapShotSection = !bShowSnapShotSection;
        }
        else
        {
            bShowSnapShotSection = showSection;
        }
        $get("HideSnapShotLink").innerText = !bShowSnapShotSection ? "Show" : "Hide";
        Hide($get("SaveThisSearchData"), !bShowSnapShotSection);
        
		if (userID == "" && !bShowSnapShotSection) bShowSnapShotSection = null;
    }

    function validateLandHome(sender) {
        var landCheckBox = $get("land");
        var homesCheckBox = $get("homes");
        var commercialCheckBox = $get("commercial");
        if (!(landCheckBox.checked || homesCheckBox.checked || commercialCheckBox.checked)) {
            if (sender == landCheckBox || sender == commercialCheckBox) {
                homesCheckBox.checked = true;
            } else {
                landCheckBox.checked = true;
            }
        }
    }
    

