$(document).ready(function () {

	function getUrlVars(url) {
		var vars = [];
		var hashes = url.slice(url.indexOf('?') + 1).split('&');
		for(var i = 0; i < hashes.length; i++) {
			vars[i]=[];
			hash = hashes[i].split('=');
			vars[i].push(hash[0]);
			vars[i][hash[0]] = hash[1];			
		}		
		return vars;		
	}
	
	$.extend({
		URLEncode: function (c) {
			var o = '';
			var x = 0;
			c = c.toString();
			var r = /(^[a-zA-Z0-9_.]*)/;
			while (x < c.length) {
				var m = r.exec(c.substr(x));
				if (m != null && m.length > 1 && m[1] != '') {
					o += m[1];
					x += m[1].length;
				} else {
					if (c[x] == ' ') o += '+';
					else {
						var d = c.charCodeAt(x);
						var h = d.toString(16);
						o += '%' + (h.length < 2 ? '0' : '') + h.toUpperCase();
					}
					x++;
				}
			}
			return o;
		},
		URLDecode: function (s) {
			var o = s;
			var binVal, t;
			var r = /(%[^%]{2})/;
			while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') {
				b = parseInt(m[1].substr(1), 16);
				t = String.fromCharCode(b);
				o = o.replace(m[1], t);
			}
			return o;
		}
	});

	function formPopulator(dataUrl){
		var url = $.URLDecode(dataUrl);        
		var urlArray =  getUrlVars(url);       
		$form = $('form#searchForm');
		
		$(urlArray).each(function(index,value){            
			$inputName = value[0].toLowerCase();		
			$inputValue = urlArray[index][value].replace('+',' ');            
			var $field = $form.find("[name=" + $inputName + "]");  
		
			if ($field.length) {
				switch ($field.get(0).tagName.toLowerCase()) {
					case "input":
						switch ($field.attr("type")) {
							case "text":
							case "password":
							case "hidden":
								if($field.attr('name') != 'savedname'){
									$field.val($inputValue.replace('+',' '));
								}
								break;
							case "radio":
							case "checkbox":   
							   if($field.attr('value') == $inputValue){
								   $field.attr('checked','checked');        
							   } 
								break;
						}
						break;
					case "textarea":
						$field.html($inputValue);
						break;
					case "select":                        					
						// Reset Select Box Selections
						$field.find(':option').each(function(key,data){
						   $(data).attr('selected','');
						});
						
						// Fresh Select Box Selections
						if($field.attr('name') == 'property_type_id'){
							$field.find(':option').each(function(key,data){
							   $pos = $inputValue.indexOf($(data).attr('value'));
							   if( $pos >= 0){
									$(data).attr('selected','selected');        
								}
							});						
						} else if($field.attr('name') == 'savesearch'){						
							// Don't Highlight Save this search field's Yes answer						
						} else {
							$field.find(':option').each(function(key,data){						   
							   if($(data).attr('value') == $inputValue){
									$(data).attr('selected','selected');        
								}
							});
						}
						break;
				}
			}
		});  
		return true;
	}
	 
	function initialize() {
      if (GBrowserIsCompatible()) {
      	var map = new GMap2(document.getElementById("map_canvas"));
		var mapObj = $("#map_canvas");
      	
      	map.enableScrollWheelZoom();
		
		if($.cookie('lastDataUrl') == null){
			// Set default Search :: Area - Santa Monica | Price - 1000 to 3000
			$.cookie('lastDataUrl', 'http://www.westsiderentals.com/mapsearch/reloadMarkersJSON.cfm?address=santa+monica&priceLow=1000&priceHigh=3000&showShared=OK&showShort=OK&bedrooms=0&bathrooms=0&pets=0&furnished=0', { expires: 60 });
			$.cookie('firstTimeUser', 1, { expires: 60 });
		}		
		var dataUrl = $.cookie('lastDataUrl');
		
		// Populate form with input values
		formPopulator(dataUrl);
      	
        var $loading = $("#loading");
        $loading.show();
        function clearMap() {
           map.clearOverlays();
        }
        
     
        function loadMarkers(dataUrl) {
			if(typeof dataUrl != 'undefined'){
				GDownloadUrl(dataUrl, function(data) {

					// Hide Loading Message
					$loading.hide();

					// Clear Old Markers
					clearMap();

					var xml = GXml.parse(data);
					var metaData = xml.documentElement.getElementsByTagName("metadata");
					var error = parseFloat(metaData[0].getAttribute("error"));
					if(error == 1) {
						map.setCenter(new GLatLng(33.982972,-118.383021), 10);
						map.addControl(new GLargeMapControl3D());
						map.addControl(new GScaleControl());
			   	 		map.addControl(new GMapTypeControl());

			   	 		var $address = $("#address");
						$address.css('background','#FF3');
						$address.val('Enter Valid Address');
					} else {
						var zoomLevel = parseFloat(metaData[0].getAttribute("zoomlevel"));
						var xmid = parseFloat(metaData[0].getAttribute("xmid"));
						var ymid = parseFloat(metaData[0].getAttribute("ymid"));
						var recordcount = parseFloat(metaData[0].getAttribute("recordcount"));

						if(recordcount > 0) {
							// Remember Last Search
							$.cookie('lastDataUrl', dataUrl, { expires: 60 });

							map.setCenter(new GLatLng(ymid,xmid), 14);
							map.addControl(new GLargeMapControl3D());
							map.addControl(new GScaleControl());
							map.addControl(new GMapTypeControl());

							var markers = xml.documentElement.getElementsByTagName("marker");
							for (var i = 0; i < markers.length; i++) {
								var lat = parseFloat(markers[i].getAttribute("lat"));
								var lng = parseFloat(markers[i].getAttribute("lng"));
								var id = parseFloat(markers[i].getAttribute("id"));
								var featured = parseFloat(markers[i].getAttribute("featured"));
								var llid = parseFloat(markers[i].getAttribute("llid"));
								var latlng = new GLatLng(lat,lng);
								map.addOverlay(createMarker(latlng, id, featured, llid));
							}

						} else {
							alert('No results found. Please try searching with different criterias.');
							map.setCenter(new GLatLng(33.982972,-118.383021), 10);
							map.addControl(new GLargeMapControl3D());
							map.addControl(new GScaleControl());
			    				map.addControl(new GMapTypeControl());
						}
					}
				});
			} else {
				$loading.hide();
				map.setCenter(new GLatLng(33.982972,-118.383021), 10);
			    map.addControl(new GLargeMapControl3D());
			    map.addControl(new GScaleControl());
			    map.addControl(new GMapTypeControl());

			}
		}

		if(dataUrl != null) {
			loadMarkers(dataUrl);
		} else {
		 	loadMarkers();
		}

		function createMarker(point, id, featured, llid) {
		    var baseIcon = new GIcon(G_DEFAULT_ICON);
			var wsr_icon = new GIcon(baseIcon);
			if(llid == 1356577) {
				wsr_icon.image = "/images/sign_markerBlue.png";
			} else if(featured == 1) {
				wsr_icon.image = "/images/sign_markerGold.png";
			} else {
				wsr_icon.image = "/images/sign_marker.png";
			}
			wsr_icon.shadow = "/images/sign_shadow.png";
			wsr_icon.iconSize = new GSize(39,30);
			wsr_icon.shadowSize = new GSize(50,30);
			wsr_icon.iconAnchor = new GPoint(25,30);
			wsr_icon.infoWindowAnchor = new GPoint(40,5);

		  // Set up our GMarkerOptions object
		  markerOptions = { icon:wsr_icon };
		  var marker = new GMarker(point, markerOptions);

		  GEvent.addListener(marker, "click", function() {
			$.ajax({
			   type: "POST",
			   url: "listingHTML.cfm",
			   data: "listing_id="+id,
			   dataType: "html",
			   success: function(msg){
				 marker.openInfoWindowHtml(msg);
			   }
			});

		  });
		  return marker;
		}

		$("#slide").click(function(){
			if($(this).text() == '- Hide'){
				$(this).text("+ Show");
				$("#filterTable").slideUp('slow');
			} else {
				$(this).text("- Hide");
				$("#filterTable").slideDown('slow');
			}

		});

		$("form").submit(function(){
			var $address = $("#address");
			var $addressVal = $address.val();

			if($addressVal.length && $addressVal != 'Enter Valid Address'){
			  var dataUrl = "reloadMarkersJSON.cfm?" + $(this).serialize();

			  $loading.show();
			  loadMarkers(dataUrl);

			} else {
				$address.css('background','#FF3');
				$address.val('Enter Valid Address');
			}
			return false;
		});
      }
    }

    initialize();

    });
