var scrollH = 0;

var street_view;

var property_details_arr = new Array();

var send_email_html =  '<table cellpadding="2" cellspacing="0" border="0" width="95%" style="margin-top:10px;" align="center" style="text-align:left;">' +
							'<tr><td colspan="3" style="background:url(' + imageURL + 'black_line.gif) repeat-x">&nbsp;</td></tr>' +
							'<tr>' +
								'<td valign="top" class="highlightLabelText">Name</td>' +
								'<td valign="top" colspan="2"><input type="text" id="txtname" name="txtname" class="input_element" size="30" /></td>' +
							'</tr>' +
							'<tr>' +
								'<td valign="top" class="highlightLabelText">Comments</td>' +
								'<td valign="top" colspan="2"><textarea id="txtcomments" name="txtcomments" class="input_element" rows="4" cols="47"></textarea></td>' +
							'</tr>' +
							'<tr><td colspan="3">&nbsp;</td></tr>' +
							'<tr><td colspan="3" width="95%" style="background:url(' + imageURL + 'black_line.gif) repeat-x">&nbsp;</td></tr>' +
							'<tr>' +
								'<td valign="top" class="highlightLabelText">Email</td>' +
								'<td valign="top"><input type="text" id="txtemail" name="txtemail" class="input_element" size="30"/></td>' +
								'<td valign="top"><input type="image" id="btnSend" name="btnSend" src="' + imageURL + 'send_mail.jpg' + '" onclick="sendEmailToProperty(); return false;"/></td>' +
							'</tr>' +
						'</table>';

function scrollingDetector()
{
	// detect scroll browser event and change position of loading banner

	if (navigator.userAgent.indexOf('Firefox') > -1)
	{
		currentDocHeight=window.pageYOffset;
		currentDocWidth=window.pageXOffset;
		scrollH= currentDocHeight;
	}
	else
	{
		currentDocHeight=document.documentElement.scrollTop;
		currentDocWidth=document.documentElement.scrollLeft;
		scrollH= currentDocHeight;
	}
}

setInterval('scrollingDetector()', 1000);

function trim(str) 
{
	return str.replace(/^\s+|\s+$/g, '');
}


// Code to add the from and to functionality start

	var side_bar_html = "";
	var gmarkers = [];
	var htmls = [];

	/* arrays to hold variants of the info window html with get direction forms open */
	var to_htmls = [];
	var from_htmls = [];
	var search_nearby =[];
	var gdir;
	var street_view; 

	function createMarker(lat, lng, name, html) 
	{
		var point  = new GLatLng(lat, lng);
		var marker = new GMarker(point, {draggable: true});

		var i = gmarkers.length;

		/* The info window version with the "to here" form open */
        to_htmls[i] = html + '<br/>' + '<form action="javascript:getDirections()">' + 
					  '<table cellpadding="0" celspacing="0" border="0" width="400">' +					
					  '<tr><td style="text-align:left">Directions:</td><td style="text-align:left"><b>To here<\/b> - <a href="javascript:fromhere(' + i + ')">From here<\/a> - <a href="javascript:searchnearby('+i+')">Search nearby<\/a></td></tr>' +
					  '<tr><td style="text-align:left">Start address:</td><td style="text-align:left"><input type="text" SIZE=40 MAXLENGTH=40 name="saddr" id="saddr" value="" /></td></tr>' +
					  '<tr><td style="text-align:left"></td><td style="text-align:left"><INPUT value="Get Directions" TYPE="SUBMIT"></td></tr>' +
					  '<tr><td style="text-align:left"></td><td style="text-align:left">Walk <input type="checkbox" name="walk" id="walk" /> &nbsp; Avoid Highways <input type="checkbox" name="highways" id="highways" /></td></tr>' +
					  '<tr><td style="text-align:left"></td><td style="text-align:left"><input type="hidden" id="daddr" value="'+ name + "@" + lat + ',' + lng + '"/></td></tr>' +
                      '</table></form>';

		/* The info window version with the "from here" form open */
        from_htmls[i] = html + '<br/>' + '<form action="javascript:getDirections()">' +
						'<table cellpadding="0" celspacing="0" border="0" width="400">' +					
						'<tr><td style="text-align:left">Directions:</td><td style="text-align:left"><a href="javascript:tohere(' + i + ')">To here<\/a> - <b>From here<\/b> - <a href="javascript:searchnearby('+i+')">Search nearby<\/a></td></tr>' +
						'<tr><td style="text-align:left">End address:</td><td style="text-align:left"><input type="text" SIZE=40 MAXLENGTH=40 name="daddr" id="daddr" value="" /></td></tr>' +
					    '<tr><td style="text-align:left"></td><td style="text-align:left"><INPUT value="Get Directions" TYPE="SUBMIT"></td></tr>' +
					    '<tr><td style="text-align:left"></td><td style="text-align:left">Walk <input type="checkbox" name="walk" id="walk" /> &nbsp; Avoid Highways <input type="checkbox" name="highways" id="highways" /></td></tr>' +
					    '<tr><td style="text-align:left"></td><td style="text-align:left"><input type="hidden" id="saddr" value="' + name + "@" + lat + ',' + lng + '"/></td></tr>' +
                        '</table></form>';

        //search_nearby[i] = html + '<br/>' + '<form name="searchForm" action="javascript:getSearch()">' +
        search_nearby[i] = html + '<br/>' + '<form name="searchForm" action="http://maps.google.com/maps" method="get" target="_blank">' +
						'<table cellpadding="0" celspacing="0" border="0" width="400">' +					
						'<tr><td style="text-align:left">Directions:</td><td style="text-align:left"><a href="javascript:tohere(' + i + ')">To here<\/a> - <a href="javascript:fromhere('+i+')">From here<\/a>  - <b>Search nearby<\/b></td></tr>' +
						'<tr><td style="text-align:left">Search</td><td style="text-align:left"><input type="text" SIZE=40 MAXLENGTH=40 name="q" id="q" value="" /></td></tr>' +
					    '<tr><td style="text-align:left"></td><td style="text-align:left"><INPUT value="Search" TYPE="SUBMIT"></td></tr>' +
					    '<tr><td style="text-align:left"></td><td style="text-align:left"><input type="hidden" id="q" value="' + name + "@" + lat + ',' + lng + '"/></td></tr>' +
                        '</table></form>';

		/* The inactive version of the direction info */
        html = html + '<br><table cellpadding="0" celspacing="0" border="0" width="400"><tr><td>Directions: <a href="javascript:tohere('+i+')">To here<\/a> - <a href="javascript:fromhere('+i+')">From here<\/a> - <a href="javascript:searchnearby('+i+')">Search nearby<\/a><\/td><\/tr><\/table>';

		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
		});

		/* save the info we need to use later for the side_bar */
		gmarkers.push(marker);
		htmls[i] = html;

		/* add a line to the side_bar html */
        side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '<\/a><br>';

        return marker;
	}


	/* request the directions */
	function getDirections() 
	{
	    document.getElementById("directions_box").style.display = 'block';

		/* Set up the walk and avoid highways options */
		var opts = {};
		if (document.getElementById("walk").checked) 
		{
			opts.travelMode = G_TRAVEL_MODE_WALKING;
        }

		if (document.getElementById("highways").checked) 
		{
			opts.avoidHighways = true;
        }

        /* set the start and end locations */
        var saddr = document.getElementById("saddr").value
        var daddr = document.getElementById("daddr").value
        gdir.load("from: "+saddr+" to: "+daddr, opts);
	}


      /* This function picks up the click and opens the corresponding info window */
	function myclick(i) 
	{
		gmarkers[i].openInfoWindowHtml(htmls[i]);
	}

	/* functions that open the directions forms */
	function tohere(i) 
	{
		gmarkers[i].openInfoWindowHtml(to_htmls[i]);
	}

	function fromhere(i) 
	{
		gmarkers[i].openInfoWindowHtml(from_htmls[i]);
	}

	function searchnearby(i) 
	{
		gmarkers[i].openInfoWindowHtml(search_nearby[i]);
	}


// Code to add the from and to functionality end




function loadPropertyMap() 
{
			
	if ((typeof(property_details_arr['property_latitude']) != 'undefined') && (typeof(property_details_arr['property_longitude']) != 'undefined') && property_details_arr['property_longitude'] !='' && property_details_arr['property_latitude']!='' )
	{
		if (GBrowserIsCompatible()) 
		{
		  	var map    = new GMap2(document.getElementById('map'));
            
			// define the crosshair tile layer and its required functions
			var crossLayer        = new GTileLayer(new GCopyrightCollection(""), 0, 15);
			crossLayer.getTileUrl =  function(tile, zoom) {return "";}
			crossLayer.isPng      = function() {return true;}

			// Create a new map type incorporating the tile layer
			var layerTerCross = [G_PHYSICAL_MAP.getTileLayers()[0], crossLayer];
			var mtTerCross    = new GMapType(layerTerCross, G_PHYSICAL_MAP.getProjection(), "Ter+");

			map.addMapType(G_PHYSICAL_MAP);
			map.addMapType(mtTerCross);			

			// Set up map type menu relationships
			var mapControl = new GHierarchicalMapTypeControl();			
			mapControl.clearRelationships();
			mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);
			mapControl.addRelationship(G_PHYSICAL_MAP, mtTerCross, "Crosshairs");

			mapControl.addRelationship(G_NORMAL_MAP, mtTerCross, "Crosshairs");
			mapControl.addRelationship(G_SATELLITE_MAP, mtTerCross, "Crosshairs");
			mapControl.addRelationship(G_HYBRID_MAP , mtTerCross, "Crosshairs");
			mapControl.addRelationship(G_PHYSICAL_MAP, mtTerCross, "Crosshairs");

			// Add control after you've specified the relationships
			map.addControl(mapControl);
			map.addControl(new GLargeMapControl());

            gdir=new GDirections(map, document.getElementById("directions"));

			var reasons=[];
			reasons[G_GEO_SUCCESS]            = "Success";
			reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
			reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
			reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
			reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
			reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
			reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
			reasons[G_GEO_BAD_REQUEST]        = "A directions request could not be successfully parsed.";
			reasons[G_GEO_MISSING_QUERY]      = "No query was specified in the input.";
			reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";


			/* catch Directions errors */
			GEvent.addListener(gdir, "error", function() {
				var code = gdir.getStatus().code;
				var reason="Code "+code;
				if (reasons[code]) 
				{
					reason = reasons[code]
				}
				alert("Failed to obtain directions, "+reason);
			});

			var center = new GLatLng(property_details_arr['property_latitude'], property_details_arr['property_longitude']);
			map.setCenter(center, 13);


			if ((typeof(property_details_arr['property_name']) != 'undefined')) 
			{

				var marker = new GMarker(center, {draggable: true});
				
				var property_img_tag = '';
				var img = '';

				if((property_details_arr['property_image'] != '') && (property_details_arr['is_active'] == 'Y'))
				{
					property_img_tag = '<img src="' + property_image_folder_path + 'thumb_' + property_details_arr['property_image'] + '" border="0" />';
				}
				else
				{
					property_img_tag = '<img src="' + property_image_folder_path + property_default_img + '" border="0" />';
				}

                var html = '<table cellpadding="0" cellspacing="0" border="0" width="400">' + 							
	                       '<tr><td colspan="2"><b>Address</b></td></tr>' + 	                
						   '<tr>' + 
						     '<td style="text-align:left">' +
						       '<table cellpadding="0" cellspacing="0" border="0" width="100%" align="left">' +
						         '<tr><td style="text-align:left">' + property_details_arr["property_name"] + '</td></tr>' + 
						         '<tr><td style="text-align:left">' + property_details_arr["property_address"] + '</td></tr>' + 
							     '<tr><td style="text-align:left">' + property_details_arr["property_city"] + '-' + property_details_arr["property_zip"] + '</td></tr>' + 
						       '</table>' +
						     '</td>' +							   
						     '<td style="text-align:right">' +
						       '<table cellpadding="0" cellspacing="0" border="0" width="100%" align="right">' +
								 '<tr><td style="text-align:center">' + property_img_tag + '</td></tr>' +
                                 '<tr><td style="text-align:center">' + '<a href="javascript:showStreetView(\'street_view_box\',\'street_view\',' + property_details_arr["property_latitude"] + ',' + property_details_arr["property_longitude"] + ')">Street View</a>' + '</td></tr>' +
						       '</table>' +
						     '</td>' +
						   '</tr>' + 
						   '</table>';
              
               var property_lat = + property_details_arr["property_latitude"] ;
               var property_long = + property_details_arr["property_longitude"] ; 
               var property_name = + property_details_arr["property_name"] ;
                   
              var marker = createMarker(property_lat,property_long, property_name, html);
   
               /*           
				GEvent.addListener(marker, "click", function() {
					showStreetView('street_view_box', 'street_view', property_details_arr['property_latitude'], property_details_arr['property_longitude']);
				});

				GEvent.addListener(marker, "dragstart", function() {
					map.closeInfoWindow();
				});
            
   
				GEvent.addListener(marker, 'mouseover', function() {
					marker.openInfoWindowHtml(property_details_arr['property_name'] + '<br/>' + property_details_arr['property_address'] + '<br/>' + property_details_arr['property_city'] + ', ' + property_details_arr['property_zip']);
				});
            */
				map.addOverlay(marker);
			}
		}
	}
}

function showStreetView(street_view_box, street_view, lat, lng) 
{
	document.getElementById(street_view_box).style.display='block';
	var fenwayPark = new GLatLng(lat, lng);
	panoramaOptions = { latlng:fenwayPark };
	street_view = new GStreetviewPanorama(document.getElementById(street_view), panoramaOptions);	
	GEvent.addListener(street_view, "error", handleNoFlash);
}

function handleNoFlash(errorCode) {
	if (errorCode == '603') {
		alert("Error: Flash doesn't appear to be supported by your browser");
		return;
	}
}  


function showPropertyMap(property_id, event)
{
	document.getElementById('map_box').style.display = 'block';					
	document.getElementById('map').innerHTML = '<p style="margin:80px">Loading ...</p>';					
	document.getElementById('map_box').style.top = event.clientY + scrollH - 200 + 'px';

	if (property_id !='')
	{
		ajaxObj = creatAjaxObj();
		var url = baseURL + 'index.php/needspace/map/subaction/show_property_map/property_id/' + property_id;    
		ajaxObj.onreadystatechange = function () {
			if(ajaxObj.readyState == 4)
			{
				if(ajaxObj.status == 200)
				{
					var response     = ajaxObj.responseText;
					var property_arr = response.split('||');
					var i;
					for (i=0; i<property_arr.length; i++)
					{
						var key_val = property_arr[i].split('=>');
						property_details_arr[key_val[0]] = key_val[1];
					}							
					loadPropertyMap();												
				}
			}
		}; 
		ajaxObj.open("GET",url,true);
		ajaxObj.send(null);
	}
}

function toggleSendEmailToProperty(property_id, event)
{
	if (document.getElementById('send_email_box').style.display == 'block')
	{
		document.getElementById('send_email_box').style.display = 'none';
	}
	else 
	{
		document.getElementById('send_email_box').style.display = 'block';
		document.getElementById('send_email_box').style.top = event.clientY + scrollH - 200 + 'px';

		document.getElementById('emaildiv').innerHTML = send_email_html;
		document.getElementById('h_property_id').value = property_id;
	}

}

function sendEmailToProperty()
{
	var err_counter = 0;
	var emailRegEx = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/

	property_id = document.getElementById('h_property_id').value;

	if(trim(document.getElementById('txtname').value) == '')
	{
		document.getElementById('txtname').style.border = '1px solid red';
		err_counter += 1;
	}

	if(trim(document.getElementById('txtcomments').value) == '')
	{
		document.getElementById('txtcomments').style.border = '1px solid red';
		err_counter += 1;
	}

	if(trim(document.getElementById('txtemail').value) == '')
	{
		document.getElementById('txtemail').style.border = '1px solid red';
		err_counter += 1;
	}

	if(!emailRegEx.test(trim(document.getElementById('txtemail').value)))
	{
		document.getElementById('txtemail').style.border = '1px solid red';
		err_counter += 1;
	}


    if (err_counter > 0)
    {
		alert('Please enter valid data.');			
		return false;
    }

	if (property_id !='')
	{
		ajaxObj  = creatAjaxObj();
		var url  = baseURL + 'index.php/needspace/sendemail';
		var pars = 'property_id=' + escape(property_id) + '&name=' + escape(trim(document.getElementById('txtname').value)) + '&email=' + escape(trim(document.getElementById('txtemail').value)) + '&comments=' + escape(trim(document.getElementById('txtcomments').value));

		ajaxObj.onreadystatechange = function () {
			if(ajaxObj.readyState == 4)
			{
				if(ajaxObj.status == 200)
				{
					var response = ajaxObj.responseText;

					if(response == '1')
					{
						document.getElementById('emaildiv').innerHTML = '<br/><br/><br/><br/><br/><br/><br/>Email sent successfully !';
					}
					else
					{
						alert('Unable to send email.')
					}
				}
			}
		}; 
		ajaxObj.open('POST',url,true);
		ajaxObj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		ajaxObj.setRequestHeader('Content-length', pars.length);
		ajaxObj.setRequestHeader('Connection', 'close');
		ajaxObj.send(pars);
	}
}
/*
function tggleSaveSearchDiv(objDiv)
{
	if(objDiv.style.display == 'none')
	{
		objDiv.style.display = 'block';
	}
	else
	{
		objDiv.style.display = 'none';
	}
}

function saveSearchResult(frmObj, targetdiv)
{
	if(frmObj)
	{
		if(frmObj.txtSaveSearch.value == '')
		{
			alert('Please enter the label for your search result');
			return false;
		}

		ajaxObj = creatAjaxObj();

		var url = baseURL + 'index.php/savesearch/savesearchresult/save_search_label/' + frmObj.txtSaveSearch.value + '/search_result_property_id_str/' + frmObj.h_search_result_property_id_str.value;

		ajaxObj.onreadystatechange = function(){
													if(ajaxObj.readyState == 4)
													{
														if(ajaxObj.status == 200)
														{
															alert('Your search result is been saved.');
															frmObj.txtSaveSearch.value = '';
															document.getElementById(targetdiv).style.display = 'none';
														}
													}
											   };
		ajaxObj.open('POST', url, true);
		ajaxObj.send(null);	   
	}
}

*/

function deleteSaveSearchConfirmation(hrefval)
{
	var confirm_val = confirm('Are you sure want to delete the saved search.');

	if(confirm_val)
	{
		window.location = hrefval;		
	}
	else
	{
		return false;
	}
}

function saveSearchedProperty(property_id)
{
	if(property_id)
	{
		ajaxObj = creatAjaxObj();

		var url = baseURL + 'index.php/savesearch/savesearchedproperty/property_id/' + property_id;

		ajaxObj.onreadystatechange = function(){
													if(ajaxObj.readyState == 4)
													{
														if(ajaxObj.status == 200)
														{
															alert('Your searched property is been saved.');
														}
													}
											   };
		ajaxObj.open('GET', url, true);
		ajaxObj.send(null);
	}
}

function printNeedspacePropertyDetails(property_id)
{
	window.open(baseURL + 'index.php/needspace/getprintpreview/property_id/' + property_id);
}

function printSavesearchPropertyDetails(property_id)
{
	window.open(baseURL + 'index.php/savesearch/getprintpreview/property_id/' + property_id);
}
