/****************************************************************************************************************
 * 
 * 											CLASS EDIT PINPOINT (uses edit_callout_class)
 * 
 ****************************************************************************************************************
 * STARTED as of 8.April 2009, 11:20
 * Instantiated by edit_callout_class in embed_pinpoint_in_callout() method.
 * 
 * 
 * 
 * @author Rhonda Kammer
 ****************************************************************************************************************
 * NOTES:
 *
 **/

function edit_pinpoint_class( ){
	
	/** ****************************************************************************************************** */
	/** ****************************************  private class variables ************************************ */
	
	var _script_uri 	= ec.get_script_uri();
	var _edit_object  	= ec.get_edit_object();
	var _tool_purpose 	= ec.get_tool_purpose();
	var _property_name	= ec.get_property_name();
	var _nav_id 		= ec.get_nav_id();
	var _tool_name 	  	= "edit_pinpoint";
	var _edit_callout_height	= ec.get_callout_height();
	var _edit_callout_width		= ec.get_callout_width();
	var _edit_pinpoint_height	= _edit_callout_height + 7; //size of callout not map
	var _pp_height		= ""; //size of map not callout
	var _pp_width		= "";
	var _pp_name 		= "ppbic";
	var _pp_gkey 		= "ABQIAAAAuSdiuC0IXzXGnBD7lySfjBTXczin-9bG-moAn-XAmHaF5KHz3xQCHg9wq5wZDQkx4zgotE8yyYfQOg";	
	var _pp_provider_google 	= "google";
	var _pp_provider_ms			= "msve";
	var _pp_user_language		= "en";
	var _pp_container			= "";
	var _pp_city_id  			= ec.get_object_id();
	//FOR TESTING 
	// var _pp_url					= "http://dev28.emporis.com/?";
  var _pp_url					= "http://widgets.emporis.com/?";
	//FOR LIVE: var _pp_url					= "http://widgets.emporis.com/?";
	//<!-- This page does not use main default therefore this is included here -->             
	///JS used: htmldata/js/emporis/maps/app/template.EmporisPinpointBuildingInCityWidget.GoogleMap.js
	var _pp_session_id 					= ec.get_session_id();
	var _pp_latitude   					= "";
	var _pp_longitude					= "";
	var _pp_nav 						= ec.get_nav_template();
	var _pp_building_id 				= '';
	var _ajax_test_url 					= '';
	var _clicked_non_existing			= false;
	var _clicked_existing				= false;
	var _number_of_found_objects       	= 0;
	var _selected_building_name 		= '';
	var _selected_building_id			= '';
	var _pp_find_address				= '';
	
	/** *************************************************
	 * 
	 *                  CONSTRUCTOR
	 * 
	 ************************************************** */
	build_opening_url();
		
	/** ***************************************************************************************************** */
	/** ****************************************** public class methods ************************************* */
	
	/**
	 * Method takes the number of objects found from edit_search process_search_result()
	 * and configures the message and buttons which will display depending on situation
	 * 
	 */
	edit_pinpoint_class.prototype.configure_pinpoint_callout = function( ){		
		_pp_find_address = $('#searchcontrol').val();	
		configure_pinpoint_callout();
		return true;
	};
	
	/**
	 * Method takes a city id, forms an ajax url and makes remote call
	 * to pinpoint which presents the city contained in the city id.
	 * 
	 * @return pinpoint map displayed 
	 */
	edit_pinpoint_class.prototype.run_pinpoint = function(){		
		run_pinpoint();
		return true;
	};//rpp
	
	
	edit_pinpoint_class.prototype.enlarge_map = function( height, width ){	
		enlarge_map( height, width );
		return true;
	};//em
	
	edit_pinpoint_class.prototype.get_find_address = function (){
		return _pp_find_address;
	};
	
	
	/**
	 * Method retrieves objects
	 * @param response data from ajax call
	 * @return 
	 */
    edit_pinpoint_class.prototype.get_pinpoint_objects = function ( response ){		 		 
		 
		//alert( "edit pinpoint get pp objs: " + _property_name );    	
		 
    	 //happens when user unclicks non existing object - this is correct as of 2.nov 2009
		 if( !is_set( response[0] )){
			 //alert('edit pinpoint: ne obj unclicked');
			 _clicked_non_existing = false; 
			 configure_pinpoint_callout();
			 return true;
		 }		 		 
		 
		 //go get the name of the found building
		 if( is_set(response[0]) && response[0] == 'building' && is_set(response[1]) && typeof es == 'object'){			 			
			 			 
			_pp_building_id = response[1];
			var search_url = _script_uri;
			search_url  += '?pub_task=edit_callout';
			search_url += '&session_id=' + encodeURIComponent(_pp_session_id);
			search_url += '&edit_object=building';
			
			//add pinpoint first looks up a building name
			if( _property_name == 'addPinpoint' ){
				search_url += '&property_name=searchBuildingPinpoint';
			}else{
				search_url += '&property_name=' + encodeURIComponent(_property_name);
			}
			search_url += '&tool_purpose=' + encodeURIComponent(_tool_purpose);					
			search_url += '&building_id=' + encodeURIComponent(_pp_building_id);
			
			//alert('edit pinpoint: es: ' + search_url );											
										
			//tell edit_search which objects to display 
			//NOTE: up to now we only look for building with pinpoint
		 	es.set_search_object( "building" );			 			 										
		 	//go get objects
			if( _tool_purpose == 'portfolio'){ //this case most likely deprecated as of 29.oct.2009 rlk
				ajax_launcher( search_url, '', 'edit_pinpoint', "portfolio.process_single_found_object" );
				return true;
			}else{					
				ajax_launcher( search_url, '', 'edit_pinpoint', "epp.process_clicked_map_object" );
				 _clicked_existing = true;
				 configure_pinpoint_callout( );
				return true;
			}								
						
		}else if( is_set(response[0]) && response[0] != 'building' ){
			
			_clicked_non_existing = true;	
			_pp_latitude = response[0];
			_pp_longitude = response[1];
			
			//get_buildings( _pp_latitude, _pp_longitude );
			
			if( _tool_purpose == 'pinpoint' && _property_name != 'editPinpoint'){				
				process_clicked_map_non_object();				
				return true;
			}
			if( _tool_purpose == 'pinpoint' && _property_name == 'editPinpoint'){
				display_update_pinpoint_button( response );
				return true;
			}
			if( _tool_purpose == 'portfolio' ){
				portfolio.process_no_found_objects();
				return true;
			}
		}		
		return true;
	};//gppo
	
	
	edit_pinpoint_class.prototype.get_building_data = function(){
		var coords = new Array();
		coords[0] = _pp_latitude;
		coords[1] = _pp_longitude;
		coords[2] = _pp_city_id;
		return coords;
	};//gbd
	
	edit_pinpoint_class.prototype.update_pinpoint = function( latitude, longitude ){		
		
		var url  = _script_uri + '?pub_task=edit_callout';
		url += '&session_id=' + encodeURIComponent(_pp_session_id);		
		url += '&property_name=' + encodeURIComponent(_property_name);
		url += '&tool_purpose=' + encodeURIComponent(_tool_purpose);
		url += '&latitude=' + encodeURIComponent(latitude);
		url += '&longitude=' + encodeURIComponent(longitude);
		var booid = $('#editCallout_buildingooid').text();
		url += '&object_id=' + encodeURIComponent(booid);
		
		//alert( "update pinpoint: " + url );
		
		_ajax_test_url = url;
		
		ajax_launcher( url, '', "edit_pinpoint", "epp.display_page" );	
		return true;
	};//upp
	
	edit_pinpoint_class.prototype.display_page = function( response ){				
		
		if( is_set(response) && _tool_purpose == 'pinpoint' && _property_name == 'editPinpoint' ){
			//alert( "edit pinpoint: displ page: " + response );
			ec.refresh_page();
		}
		return true;
	};//dp
	
	edit_pinpoint_class.prototype.get_buildings_by_coordinates = function(coords){
		var new_longitude = coords[0];
		var new_latitude  = coords[1];				
		get_buildings( new_latitude, new_longitude );		
	};
	
	edit_pinpoint_class.prototype.get_buildings_by_box = function( ne_lat, ne_lng, sw_lat, sw_lng ){
		get_buildings_by_box(ne_lat, ne_lng, sw_lat, sw_lng);
	};
	
	edit_pinpoint_class.prototype.process_clicked_map_object = function( response ){
		
		//alert('edit pinpoint: pro click: ' + response[0].building_id );
		
		_clicked_existing = true;		
		_selected_building_name = response[0].building_name;
		_selected_building_id   = response[0].building_id;
		configure_pinpoint_callout(response);		
		return true;
	};	
	
	edit_pinpoint_class.prototype.process_no_found_objects = function(){

		$("#editCallout_translation").html('');
		$('#editCallout_searchPinpoint_objectList').hide();
		$("#editCallout_searchPanel_saveButton").hide();
		
		if( _clicked_non_existing == true ){
			process_clicked_map_non_object();			
		}else{
			$("#editTool_Message").html( 'To add a building, click inside of map.' );
			$('#editTool_Message').css({'color':'blue'});			
		}
	};
	
	edit_pinpoint_class.prototype.set_found_objects = function( number_objects ){
		_number_of_found_objects = number_objects;
		return true;
	};
	
	edit_pinpoint_class.prototype.set_clicked_existing = function( condition ){
		_clicked_existing = condition;
		return true;
	};
	
	edit_pinpoint_class.prototype.display_select_button = function( response ){		
		_selected_building_name  = response[0];
		_selected_building_id    = response[1];
		display_select_button();
		return true;
	};
	
	/**
	 * @param response
	 * @return sets up pinpoint callout
	 */
	function configure_pinpoint_callout( ){
		
		//enlarge_map( _edit_pinpoint_height, _edit_callout_width );
		//alert( "edit pinpoint: ce: " + _clicked_existing + ' build: ' + _selected_building_name );
		
		$('#editTool_Message').html('');
		$("#editCallout_translation").hide();
		var message = '';				
		
		if( _property_name == 'editPinpoint' ){
			message = 'Drag and drop pinpoint to its new position.';
			$('#editTool_Message').html(message);
			$('#editTool_Message').css({'color':'blue'});
			//$('#editTool_Message').css({'font-weight':'bold'});
			return true;
		}		
				
		//alert('edit pinpoint: cne: ' + _clicked_non_existing + ' addr: ' + is_set( _pp_find_address ) + ' lat: ' + _pp_latitude );
		
		if( _number_of_found_objects > 0 ){
									
			if( is_set(_pp_find_address)){							
		
				if( _clicked_non_existing == false && _clicked_existing == false ){
					message = 'Select chosen building. <br>Add building at address or click into map to add a building.';				
					$('#editCallout_searchPinpoint_selectButton').hide();
					display_add_button();
					
				}else if( _clicked_non_existing == false && _clicked_existing == true ){
					message = 'Select chosen building. <br>Add building at address or click into map to add pinpointed building.';							
					display_select_and_add_buttons();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == true ){
					message = 'Select chosen building. <br>Add pinpointed building or uncklick pinpoint to add building at address.';
					display_select_and_add_buttons();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == false ){
					message = 'Chose a building. <br>Add pinpointed building or uncklick pinpoint to add building at address.';
					display_add_button();
				}
			}else if( !is_set(_pp_find_address)){							
				
				if( _clicked_non_existing == false && _clicked_existing == false ){
					message = 'Choose a building or<br> click into map or type address to add a building.';				
					$('#editCallout_searchPinpoint_selectButton').hide();
					
				}else if( _clicked_non_existing == false && _clicked_existing == true ){
					message = 'Select chosen building or <br> click into map or type address to add a building.';							
					display_select_button();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == true ){
					message = 'Select chosen building or add pinpointed building.';
					display_select_and_add_buttons();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == false ){
					message = 'Select a building, add pinpointed building or <br> uncklick pinpoint to add building at address.';
					display_add_button();					
				}
				
			}
	
		}else if( _number_of_found_objects == 0){
			
			$("#editCallout_searchPinpoint_objectList").hide();
			
			if( is_set(_pp_find_address)){
				
				if( _clicked_non_existing == false && _clicked_existing == false ){
					message = 'Click into map to add a building or add building at address.';				
					$('#editCallout_searchPinpoint_selectButton').hide();
					display_add_button();
					
				}else if( _clicked_non_existing == false && _clicked_existing == true ){
					message = 'Select chosen building or <br> click into map to add building';				
					display_select_and_add_buttons();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == false ){
					message = 'Add pinpointed building or <br> unclick pinpoint to add building at address.';
					display_add_button();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == true ){
					message = 'Select chosen building, add pinpointed building or <br> unclick pinpoint to add building at address.';					
					display_select_and_add_buttons();					
				}
				
			}else if( !is_set(_pp_find_address)){
				
				if( _clicked_non_existing == false && _clicked_existing == false ){
					message = 'Click into map or <br> type address to add a building.';				
					$('#editCallout_searchPinpoint_selectButton').hide();					
					
				}else if( _clicked_non_existing == false && _clicked_existing == true ){
					message = 'Select chosen building or <br> click into map or type address to add building';				
					display_select_button();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == false ){
					message = 'Add pinpointed building.';
					display_add_button();					
					
				}else if( _clicked_non_existing == true && _clicked_existing == true ){
					message = 'Select chosen building or add pinpointed building.';					
					display_select_and_add_buttons();					
				}				
			}
		}
		
		$('#editTool_Message').html(message);
		$('#editTool_Message').css({'color':'blue'});
		//$('#editTool_Message').css({'font-weight':'bold'});		
		return true;
	}
	
	function display_add_button(){
		
		_pp_find_address = $('#searchcontrol').val();
		var button_text = '';				
		
		if( _clicked_non_existing == true ){					
			button_text += '<input type="button" onclick="citypage.add_new_building(' + "'pinpoint'" + ')" value="add building">';
			button_text += '&nbsp; at pinpoint &nbsp;&nbsp;';
			
		}else if( _clicked_non_existing == false && is_set( _pp_find_address ) ){	
			button_text += '<input type="button" onclick="citypage.add_new_building(' + "'address'" + ')" value="add building">';
			button_text += '&nbsp; at address: &nbsp;' + _pp_find_address;	
		}
		$('#editCallout_searchPinpoint_selectButton').html( button_text );
		$('#editCallout_searchPinpoint_selectButton').css({'color':'blue'});
		$('#editCallout_searchPinpoint_selectButton').css({'font-weight':'bold'});
		$("#search_object_menu").height(80);
		$('#editCallout_searchPinpoint_selectButton').show();
		return true;
	}
	
	function display_select_button( ){				
				
		var obj_label     = '';
		var button_text   = '';
		var obj_id        = '';
		var object_to_add = '';		
		
		var button_text  = '<font color="blue"><b>' + _selected_building_name + '</b></font>&nbsp;&nbsp;&nbsp;&nbsp;';
		var fun_input = "'" + _selected_building_name + "', '" + _selected_building_id + "'";
		button_text += '<input id="editCallout_pinpoint_sendToBuildingButton" type="button" onclick="citypage.send_to_building(' + fun_input + ');" value="select building">';				
		$('#editCallout_searchPinpoint_selectButton').html( button_text );
		$("#search_object_menu").height(80);
		$('#editCallout_searchPinpoint_selectButton').show();
		return true;
	}
	
	function display_select_and_add_buttons(){
		
		//alert('display s+a: addr: ' + _pp_find_address + ' is set: ' + is_set( _pp_find_address ));
		
		_pp_find_address = $('#searchcontrol').val();
		
		var bname = '';
		var bid = '';	
		
		var fun_input = "'" + _selected_building_name + "', '" + _selected_building_id + "'";
		var select_button = '<input id="editCallout_pinpoint_sendToBuildingButton" type="button" onclick="citypage.send_to_building(' + fun_input + ');" value="select building">';
		
		if( _clicked_non_existing == true ){
			var add_button = '<input type="button" onclick="citypage.add_new_building(' + "'pinpoint'" + ')" value="add building">';
		}else if( _clicked_non_existing == false && is_set( _pp_find_address ) ){
			var add_button = '<input type="button" onclick="citypage.add_new_building(' + "'address'" + ')" value="add building">';
		}		
		var display_table   = '<table border="0"><tr>';
		display_table += '<td><font color="blue"><b>' + _selected_building_name + '</td>';
		
		if( _clicked_non_existing == true ){
			display_table += '<td>&nbsp;</td><td align="right"><font color="blue"><b>at pinpoint</td></tr>';
		}else if( _clicked_non_existing == false && is_set( _pp_find_address ) ){
			display_table += '<td>&nbsp;</td><td align="right"><font color="blue"><b>at address: ' + _pp_find_address + ' </td></tr>';
		}		
		display_table += '<tr><td>' + select_button + '</td>';
		display_table += '<td width="10"><font color="blue"><b>or</td><td align="right">' + add_button + '</td></tr></table>';
		$("#search_object_menu").height(48);
		$('#editCallout_searchPinpoint_selectButton').html( display_table );		
		$('#editCallout_searchPinpoint_selectButton').show();
		return true;
	}
	
	function process_clicked_map_non_object(){		
		_clicked_non_existing = true;
		//display_add_button();
		configure_pinpoint_callout();
		return true;
	}
	
	/**
	 * Called by template.EmporisPinpointBuildingInCityWidget.GoogleMap.js load_existing().
	 * Updates building pulldown list.
	 * 
	 * @param ne_lat
	 * @param ne_lng
	 * @param sw_lat
	 * @param sw_lng
	 * @return
	 */
	function get_buildings_by_box( ne_lat, ne_lng, sw_lat, sw_lng ){
		
		if( is_set(ne_lat) && is_set(ne_lng) && is_set(sw_lat) && is_set(sw_lng) ){
			var url  = _script_uri + '?pub_task=edit_callout';
			url += '&session_id=' + encodeURIComponent(_pp_session_id);			
			url += '&tool_purpose=' + encodeURIComponent(_tool_purpose);			
			url += '&ne_lat=' + encodeURIComponent(ne_lat);
			url += '&ne_lng=' + encodeURIComponent(ne_lng);
			url += '&sw_lat=' + encodeURIComponent(sw_lat);
			url += '&sw_lng=' + encodeURIComponent(sw_lng);			
			
			//alert( "getting buildings by box: " + url );		
			
			_ajax_test_url = url;			
			
			es.set_object_menu_div("#editCallout_searchPinpoint_objectList");
			es.set_search_object('building');
			es.set_test_url(url);
			ajax_launcher( url, '', "edit_pinpoint", "es.process_search_result" );
			return true;
		}
		return true;
	}
	
	function enlarge_map( height, width ){
		if( height == "" || height == undefined ){ 
			_pp_height = 300; 
		}else{
			_pp_height = height;
		}
		if( width == "" || width == undefined ){ 
			_pp_width = 332; 
		}else{
			_pp_width = width;
		}		
		run_pinpoint();
		return true;
	}
	

	function run_pinpoint(){			
		
		$("#editCallout_searchPinpoint").html("");
		$("#editTool_Message").html("");		
		$("#editCallout_searchPinpoint").show();		
    
		//alert('edit pinpoint RUN pp: ' + _pp_url );
		$.getScript( _pp_url, function(){ 
			emporisInitLoader();
			$('#editCallout_translation').html('');			
		});		
		return true;		
	}//rpp
	
	
	/**
	 * Used to get buildings when user pinpoints
	 * @return call to edit_search process_search_result()
	 */
	function get_buildings( lat, long ){
		
		if( is_set(_pp_city_id)){
			
			if( is_set(lat) && is_set(long) ){
				_pp_latitude  = lat;
				_pp_longitude = long;
				
			}else{
				_pp_latitude  = $('#editCallout_tbuildinglatitude').text();
				_pp_longitude = $('#editCallout_tbuildinglongitude').text();
			}
		}
		
		if( is_set(_pp_longitude) && is_set(_pp_latitude) && is_set(_pp_city_id)){
			var url  = _script_uri + '?pub_task=edit_callout';
			url += '&session_id=' + encodeURIComponent(_pp_session_id);		
			url += '&property_name=' + encodeURIComponent(_property_name);
			url += '&tool_purpose=' + encodeURIComponent(_tool_purpose);
			url += '&tool_task=fill';
			url += '&latitude=' + encodeURIComponent(_pp_latitude);
			url += '&longitude=' + encodeURIComponent(_pp_longitude);
			url += '&city_code=' + encodeURIComponent(_pp_city_id);
			
			var input_address = $('#searchcontrol').val();
			if(is_set(input_address)){
				url += '&address_text=' + encodeURIComponent(input_address);
			}
			
			//alert( "getting buildings by coordinates: " + url );
			
			_ajax_test_url = url;
			
			es.set_object_menu_div("#editCallout_searchPinpoint_objectList");
			es.set_search_object('building');
			es.set_test_url(url);
			
			ajax_launcher( url, '', "edit_pinpoint", "es.process_search_result" );
		}
		return true;
	}//gb
	
	function build_opening_url(){
		
		_pp_url += 'widget=' +    _pp_name;
		_pp_url += '&gkey=' +     _pp_gkey;	
	 	//_pp_url += '&provider=' +  _pp_provider_ms;
	 	_pp_url += '&provider=' +  _pp_provider_google;
	 	_pp_url += '&language=' + _pp_user_language;
	 	
	 	//set default size of map
	 	if( _pp_height == "" || _pp_height == undefined ){ _pp_height = 300; }
		if(  _pp_width == "" || _pp_width == undefined ){ _pp_width = 332; }		
		_pp_url += '&width=' +    _pp_width + "px";
	 	_pp_url += '&height=' +   _pp_height + "px";			 	 	
	 	
		//for city page we will need to add another parameter
		if( _pp_nav == 'city' || _property_name == 'addPinpoint' || _pp_nav == 'rel_object_details' ){
			_pp_url += '&click_existing=yes';
		}else{
			_pp_url += '&click_existing=no';
		}
		
		if( _property_name == 'editPinpoint' || _property_name == 'addPinpoint' || _pp_nav == 'rel_object_details' ){
			var lat  = $('#editCallout_tbuildinglatitude').text();
			var long = $('#editCallout_tbuildinglongitude').text();
			_pp_url += '&building_lat=' + encodeURIComponent(lat);
			_pp_url += '&building_long=' + encodeURIComponent(long);
		}
		
		if( _property_name == 'editPinpoint'){
			_pp_url += '&edit_existing=yes';
		}
		if( _property_name == 'addPinpoint' || _pp_nav == 'rel_object_details' ){
			_pp_url += '&add_nearby=yes';
		}
		
		_pp_url += '&callback=epp.get_pinpoint_objects';
		_pp_url += '&container=editCallout_searchPinpoint';
		_pp_url += '&id=' + encodeURIComponent(_pp_city_id);
		 
		//alert( "edit pinpoint build url: " + _pp_url );
		return true;
	}//bou
	
	function display_update_pinpoint_button( response ){
		if( response != undefined ){
			var button_text = '<table border="0"><tr>';
			button_text += '<td><font color="blue"><b>longitude: &nbsp;' + response[0] + '</b></font></td>';
			button_text += '<td width="35" valign="top" rowspan="2"><input type="button" onclick="epp.update_pinpoint(' + response[0] + ', ' + response[1] + ')" value="update pinpoint"></td></tr>';		
			button_text += '<tr><td><font color="blue">&nbsp;&nbsp;<b> latitude: ' + response[1] + '</b></font></td></tr></table>';
			button_text += '';
		}else{
			var button_text = 'Pinpoint not registered. Please refresh and click again.';
		}		
		$('#editCallout_searchPinpoint_selectButton').html( button_text ).show();
		return true;
	}
					
}//cl epp
