var ds = 'ms_search_hasson';
var max_results = "250";
var open_div = "";

// animation
var a_dx = 0;
var a_dy = 0;
var c_dx = 0;
var c_dy = 0;
var direction = "";
var speed = 5;
var timer;

function recenter(elm)
{
	var left = elm.style.left.substring(0, elm.style.left.length-2);
	var top = elm.style.top.substring(0, elm.style.top.length-2)

	if (top > (mheight/2)) {
		// south
		if (left > (mwidth/2)) {
			// east
			a_dy = mheight - 16;
			a_dx = mwidth - 32;
			direction = "se";

		} else {
			// west
			a_dx = 16;
			a_dy = mheight - 32;
			direction = "sw";
		}		
	}
	else
	{
		// north
		if (left > (mwidth/2)) {
			// east
			a_dy = 16;
			a_dx = mwidth - 16;
			direction = "ne";
		} else {
			// west
			a_dy = 16;
			a_dx = 16;
			direction = "nw";
		}
	}
	c_dy = top;
	c_dx = left;
	s_layer = elm.title;
	timer = setInterval("doAnimation()", 10);
	
}

function doAnimation()
{
	var dx = 0;
	var dy = 0;
	
	if (direction == "se") 
	{

		if (c_dx < a_dx) {
			dx = speed;
			c_dx = parseInt(c_dx) + speed;
		}
		if (c_dy < a_dy) {
			dy = speed;
			c_dy = parseInt(c_dy) + speed;
		}	
	} 
	else if (direction == "sw") 
	{
		if (c_dx > a_dx) {
			dx = -speed;
			c_dx = parseInt(c_dx) - speed;
		}
		if (c_dy < a_dy) {
			dy = speed;
			c_dy = parseInt(c_dy) + speed;
		}	
	}
	else if (direction == "ne") 
	{
		if (c_dx < a_dx) {
			dx = speed;
			c_dx = parseInt(c_dx) + speed;
		}
		if (c_dy > a_dy) {
			dy = -speed;
			c_dy = parseInt(c_dy) - speed;
		}
	}
	else if (direction == "nw") 
	{
		if (c_dx > a_dx) {
			dx = -speed;
			c_dx = parseInt(c_dx) - speed;
		}
		if (c_dy > a_dy) {
			dy = -speed;
			c_dy = parseInt(c_dy) - speed;
		}
	}

	if (dx == 0 && dy == 0) {
		clearInterval(timer);
		getMap("");
		return;
	}
		
	dragObjects(dx, dy);
 	minx = parseFloat(minx) - parseFloat(dx * resolution);
        maxy = parseFloat(maxy) + parseFloat(dy * resolution);
}

function getMap(envelope) {

	if (okToSend) {
  	http = getHTTPObject();

  	if ((http != null) ) {
	okToSend = false;
    	var axl = getMapRequest(envelope);

    	http.open("POST", url, true);
    	http.onreadystatechange = printResponse;
    	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    	showLayer('loading');
    	http.send(axl);
	}
	} else {
		alert ("Waiting for previous response");
	}
}

function createQueryString()
{
	var retVal = "minx=" + minx + "&miny=" + miny + "&maxx=" + maxx + "&maxy=" + maxy;

	retVal += "&zoom=true&scale=" + scale;

	return escape(retVal);
}


function buildWhere()
{
          var lp_low = document.getElementById('lp_low').value;
        var lp_high = document.getElementById('lp_high').value;
        var beds_low = document.getElementById('beds_low').value;
        var baths_low = document.getElementById('baths_low').value;
        var size_min = document.getElementById('size_min').value;
        var size_max = document.getElementById('size_max').value;
        var p_type = document.getElementById('p_type').value;

        var w = ' AND lp_Listing_Price >= ' + lp_low + ' AND lp_Listing_Price <= ' + lp_high + ' AND lp_No_Bedrooms >= ' + beds_low + '  AND lp_No_Bathrooms >= ' + baths_low;

        if (p_type.length > 0) {
                w += " AND lp_tp_Improvement = '" + p_type + "'";
        }

        if (size_min.length > 0) {
                w += " AND lp_amt_Struct_SqFt_Act > " + size_min;
        }
        if (size_max.length > 0) {
                w += " AND lp_amt_Struct_SqFt_Act < " + size_max;
        }

        return w;
}

function getMapRequest(env)
{
	var w = buildWhere();

	var fl = "TO_DAYS(NOW()) - TO_DAYS(lp_Listing_Date) AS DOM, cd_MLS,lp_MLS_Number,FORMAT(lp_Listing_Price, 0) as lp_Listing_Price_Display,lp_Listing_Price,lp_ListingCity,lp_ListingState,lp_ListingZip,lp_ListingAddr1,lp_No_Bedrooms,lp_No_Bathrooms,lp_res_Lat,lp_res_Long,lp_Photo_URL,lp_PhotoDesc_1,lp_ind_OpenHouse,lp_ds_OpenHouseTime,cd_Company,lp_cd_Source,lc1_v9c";
	

	var axl = 'SITE=' + site + '&INC_OFFICES=&minx=' + minx + '&maxy=' + maxy + '&maxx=' + maxx + '&miny=' + miny + '&cache=' + cache + '&width=' + width + '&height=' + height + '&INC_LISTINGS=y&DS=' + ds + '&MAX_RESULTS=' + max_results + '&FL=' + fl + "&scale=" + scale + '&zoom=' + fixedzoom + "&CACHE_ORIGIN_X=" + cache_origin_x + "&CACHE_ORIGIN_Y=" + cache_origin_y + "&SRCH_WHERE=" + w + '&US_TILES=true';

	return axl;
}
	
function printResponse(){

if (http.readyState == 4) {
    if (http.status == 200) {

      isWorking = false;
      
      	var result = http.responseText;

	var xmlDoc;
	
      	if(document.implementation && document.implementation.createDocument) { 
      		// MOZILLA 
       	 	xmlDoc = document.implementation.createDocument("", "", null);
      	 	xmlDoc.async="false";
         	xmlDoc.loadXML(result);
      	} else if (window.ActiveXObject){
      	 	//IE
      	  	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	  	xmlDoc.async="false";
	  	xmlDoc.loadXML(result);
       	}
	
	var tiles = xmlDoc.getElementsByTagName("TILES")[0].getElementsByTagName("TILE");
	scale = xmlDoc.getElementsByTagName("TILES").item(0).getAttribute("scale");

	resolution = xmlDoc.getElementsByTagName("TILES").item(0).getAttribute("resolution");

	var env = xmlDoc.getElementsByTagName("ENVELOPE").item(0);

	minx = parseFloat(env.getAttribute("minx"));
	miny = parseFloat(env.getAttribute("miny"));
	maxx = parseFloat(env.getAttribute("maxx"));
	maxy = parseFloat(env.getAttribute("maxy"));

	clearImageMap();

	placeTiles(tiles);

	fixedzoom = "";
	
        var count = xmlDoc.getElementsByTagName("PROPERTIES").item(0).getAttribute("count");

        if (parseInt(count) > parseInt(min_count)) {
        document.getElementById('properties_found').innerHTML = 'Properties Found: ' + xmlDoc.getElementsByTagName("PROPERTIES").item(0).getAttribute("count") + '. Please refine your search.';
        } else {

		if (cookieid.length > 0) { 
        		document.getElementById('properties_found').innerHTML = 'Properties Found: ' + xmlDoc.getElementsByTagName("PROPERTIES").item(0).getAttribute("count") + ' <a href="javascript:document.form3.submit()">Click to view all </a>';
		} else {
        		document.getElementById('properties_found').innerHTML = 'Properties Found: ' + xmlDoc.getElementsByTagName("PROPERTIES").item(0).getAttribute("count") + ' <a href="javascript:document.form3.submit()">Click to view all </a>';
		}
        }


	var props = xmlDoc.getElementsByTagName("RESPONSE")[0].getElementsByTagName("PROPERTY");

	processPropertyRecs(props, xmlDoc.getElementsByTagName("PROPERTIES").item(0).getAttribute("count"));

	hideLayer('loading');
    }else alert("Error retreiving data");
 
   okToSend = true;
  } 
}


function processPropertyRecs(props, numProps)
{


	var props_list = "";

	var queryString = createQueryString();
	

	for (var i = 0; i < props.length; i++) {
		var x = parseInt(props[i].getAttribute('x'));
		var y = parseInt(props[i].getAttribute('y'));
	
		if (props_list.length == 0) {
			props_list = props[i].getAttribute("cd_MLS");
		} else {
			props_list = props_list +  "," + props[i].getAttribute("cd_MLS");
		}
	
		var x1 = x;
		var y1 = y;

                var icon_type = "";

                if (x > (width / 2)) {
                        if (y > (height / 2)) {
                                icon_type = "BR";
                                x = x - icon_w;
                                y = y - icon_h;
                        } else {
                                icon_type = "TR";
                                x = x - icon_w + 6;
                                y = y + 4;
                        }
                } else {
                        if (y > (height / 2)) {
                                icon_type = "BL";
                                y = y - icon_h;
                                x = x + 5;
                        } else {
                                icon_type = "TL";
                                x = x + 5;
                                y = y + 3;
                        }
                }

		var myDiv = document.createElement('DIV');
		myDiv.id = "myLayer" + i;
		myDiv.style.position='absolute';
		myDiv.style.visibility='hidden';

		if (s_layer == props[i].getAttribute('cd_MLS')) {
                        myDiv.style.visibility = 'visible';
                        s_layer = '';
                }
		myDiv.style.left =x + 'px';
		myDiv.style.top = y + 'px';
		myDiv.style.width = icon_w + 'px';
		myDiv.style.height= icon_h + 'px';
		myDiv.style.zIndex=2;
		myDiv.title = props[i].getAttribute('cd_MLS');

		var photo_string = "";

		if (props[i].getAttribute('lp_Photo_URL').length > 0) {
    			photo_string = '<div class="instruction"><a href="' + root_url + '/vp/ListingServlet?cd_MLS=' + props[i].getAttribute('cd_MLS') + '&SITE=' + site + '&ScreenID=AGENT_LISTING_DETAIL&pres_agent=' + pres_agent + '&mapvars=' + queryString + '%26s_layer%3D' + props[i].getAttribute('cd_MLS') +'" target="_parent"><img src="http://' + cleanString(props[i].getAttribute('lp_Photo_URL')) + props[i].getAttribute('lp_MLS_Number') + 'at.jpg" width="150" height="117" border="0"></a></div>';
		}	

                var balloon = '<div class="balloon_' + icon_type + '">';
                balloon += '<div class="inner_balloon">';
		if (props[i].getAttribute('lp_ind_OpenHouse') == 'Y') {
	                balloon += '<div class="instruction"><a href="' + root_url + '/vp/ListingServlet?cd_MLS=' + props[i].getAttribute('cd_MLS') + '&SITE=' + site + '&ScreenID=AGENT_LISTING_DETAIL&pres_agent=' + pres_agent + '&mapvars=' + queryString + '%26s_layer%3D' + props[i].getAttribute('cd_MLS')  + '" target="_parent">Open:' + cleanString(props[i].getAttribute('lp_ds_OpenHouseDay')) + ' ' + cleanString(props[i].getAttribute('lp_ds_OpenHouseTime')) + '</a></div>';
		}	

        	balloon += '<div class="close_icon"><a href="#" onClick="document.getElementById(\'myLayer' + i + '\').style.visibility=\'hidden\';"><img border="0" src="images/close_icon.gif" style="width:17px;"></a></div>';
 
		balloon += photo_string;

		 if (props[i].getAttribute('cd_Company') != 'HASSON') {
                balloon += '<div class="address">' + cleanString(props[i].getAttribute('lp_ListingCity')) + ' ' + cleanString(props[i].getAttribute('lp_ListingState')) + ' ' + cleanString(props[i].getAttribute('lp_ListingZip')) + '</div>';

        } else {
                balloon += '<div class="address">' + (props[i].getAttribute('lc1_v9c') == 'Y' ? cleanString(props[i].getAttribute('lp_ListingAddr1')) : cleanString(props[i].getAttribute('lp_ListingCity')) + ' ' + cleanString(props[i].getAttribute('lp_ListingState')) + ' ' + cleanString(props[i].getAttribute('lp_ListingZip'))) + '</div>';
}

							

                balloon += '<div class="instruction">$' + cleanString(props[i].getAttribute('lp_Listing_Price_Display')) + '</div>';
		balloon += '<div class="instruction">' + props[i].getAttribute('lp_No_Bedrooms') + ' Beds ' + props[i].getAttribute('lp_No_Bathrooms') + ' Baths</div>';
		balloon += '<div class="instruction"><a href="' + root_url + '/vp/ListingServlet?cd_MLS=' + props[i].getAttribute('cd_MLS') + '&SITE=' + site + '&ScreenID=AGENT_LISTING_DETAIL&pres_agent=' + pres_agent + '&mapvars=' + queryString + '%26s_layer%3D' + props[i].getAttribute('cd_MLS') + '" target="_parent">More Details</a></div>';

                balloon += '</div>';
                balloon += '</div>';
                balloon += '</div>';


                // Don't display COAR listings on map (if not a hasson listing)
                if (props[i].getAttribute('lp_cd_Source') == 'COAR' && props[i].getAttribute('cd_Company') != 'HASSON') {
                        // for now do not add innerHTML
                } else {
                        myDiv.innerHTML = balloon;
                }

		mapContainer.appendChild(myDiv);
	
		var area = document.createElement('DIV');
		area.id = i;
	
                if (props[i].getAttribute("cd_Company") == 'HASSON') {                        
		   	if (props[i].getAttribute('lp_ind_OpenHouse') == 'Y') {
                                area.innerHTML = '<img src="http://mapping.redata.com/mapping_v2006/jsps/HASSON/view/images/house_icons/map-icon2.gif" border="0">';
                        } else {
                                area.innerHTML = '<img src="http://mapping.redata.com/mapping_v2006/jsps/HASSON/view/images/house_icons/map-icon1.gif" border="0">';
                        }
		} else if (props[i].getAttribute('lp_ind_OpenHouse') == 'Y') {                        
			area.innerHTML = '<img src="http://mapping.redata.com/mapping_v2006/jsps/HASSON/view/images/house_icons/map-icon5.gif" border="0">';
                } else if (parseInt(props[i].getAttribute('DOM')) < 15) {                        
			area.innerHTML = '<img src="http://mapping.redata.com/mapping_v2006/jsps/HASSON/view/images/house_icons/map-icon3.gif" border="0">';
                } else {
                        area.innerHTML = '<img src="http://mapping.redata.com/mapping_v2006/jsps/HASSON/view/images/house_icons/map-icon4.gif" border="0">';
                }

		area.style.left=x1 + 'px';
		area.style.top=y1 + 'px';
		area.style.position='absolute';
		area.style.zIndex=1;
		area.title = props[i].getAttribute('cd_MLS');

		area.onclick = function() {
		     for (var j = 0; j < min_count; j++) {
                        var elm = document.getElementById('myLayer' + j);
                        if (elm != null) {
                                elm.style.visibility = 'hidden';
                        } else {
                                break;
                        }
                        }

			document.getElementById('myLayer' + this.id).style.visibility = 'visible';
			recenter(document.getElementById(this.id));

		}

  		if (props[i].getAttribute('lp_cd_Source') == 'COAR' && props[i].getAttribute('cd_Company') != 'HASSON') {
                        // For now do not add the area div
                } else {
                        mapContainer.appendChild(area);
                }
	
	}


	if (props.length > 0) {

		var cd_MLS_sum = getElmById("cd_MLS_sum");
		var numPages = getElmById("numPages");
                var numFound = getElmById("numFound");

 		cd_MLS_sum.value = props_list;
                numFound.value = props.length;
                numPages.value = Math.ceil(parseFloat(props.length / 10));
					
	}

}

function postSaveSearch()
{

        if (okToSend) {
                http = getHTTPObject();

                if ((http != null) ) {
                        okToSend = false;
                        var dat = getSaveData();

                        http.open("POST", save_url, true);
                        http.onreadystatechange = saveResponse;
                        http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                        showLayer('loading');
                        http.send(dat);
                        hideLayer('loading');
                }
        } else {
                alert ("Waiting for previous response");
        }

        okToSend = true;
}


function saveResponse() {

        if (http.readyState == 4) {
                if (http.status == 200) {
                        isWorking = false;

                        if (!isSafari)
                        {
                                var result = http.responseText;
                                var xmlDoc;
                                if(document.implementation && document.implementation.createDocument) {
                                        xmlDoc = document.implementation.createDocument("", "", null);
                                        xmlDoc.async="false";
                                        xmlDoc.loadXML(result);
                                } else if (window.ActiveXObject){
                                        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                                        xmlDoc.async="false";
                                        xmlDoc.loadXML(result);
                                }
                        } else {
                                var xmlDoc = http.responseXML;
                        }
        
                        var retVal = xmlDoc.getElementsByTagName("RESPONSE").item(0).getAttribute("returnCode");
        
                        var ss = getElmById("saveSearch");
                        if (retVal == 'true') {
                                ss.innerHTML = '<font color="red">Search Successfully Saved</font>';
                        } else {
                                ss.innerHTML = '<font color="red">There was a problem saving your search</font>';
                        }
                }
        }       
}               
                

function getSaveData()
{
        var dat = 'SITE=' + site + '&cd_Contact=' + cookieid + '&sql=';

        var sql = "SELECT Listing.cd_MLS FROM ListingPublic,Listing WHERE ListingPublic.cd_MLS = Listing.cd_MLS AND " + buildWhere() + ' AND lp_res_Lat > ' + miny + ' AND lp_res_Lat < ' + maxy + ' AND lp_res_Long > ' + minx + ' AND lp_res_Long < ' + maxx;;

        dat += sql + '&criteria=' + buildCriteria() + '&fg_1=Y';

        return dat;
}


function buildCriteria()
{
        var lp_low = document.getElementById('lp_low').value;
        var lp_high = document.getElementById('lp_high').value;
        var beds_low = document.getElementById('beds_low').value;
        var baths_low = document.getElementById('baths_low').value;
        var size_min = document.getElementById('size_min').value;
        var size_max = document.getElementById('size_max').value;
        var p_type = document.getElementById('p_type').value;

        var c = "Map Coords Saved<br>";

        if (lp_low.length > 0) {
                c += "Listing Price greater than " + lp_low + "<BR>";
        }

        if (lp_high.length > 0) {
                c += "Listing Price less than " + lp_high + "<BR>";
        }
          if (beds_low.length > 0) {
                c += "Bedrooms greater than " + beds_low + "<BR>";
        }

        if (baths_low.length > 0) {
                c += "Bathrooms greater than " + baths_low + "<BR>";
        }

        if (p_type.length > 0) {
                c += "Property Type equals " + p_type + "<BR>";
        }
        if (size_min.length > 0) {
                c += "Size greater than " + size_min + "<BR>";
        }
        if (size_max.length > 0) {
                c += "Size less than " + size_max + "<BR>";
        }
        return c;
}


