var map = null;
var geocoder = null;
var address;
var gVacancyResponse = []; // Global vacancy response - array
var gCompanies = []; // Global companies array
var gCompaniesObj = []; // Global companies objects array
var gReqCompanies = 10;
var gRespCompanies;
var gFirstCompany = 1;
var gLastCompany = 0;
var gMarkers = []; // Global array of markers on the map.
	                // If value = 1 - marker should be shown
var gSessionHash = 5;
var gGMarkers = [];
var homeGMarker = null;
var show_home_addr = 0;
var companyHash = new Hash();
var exCompanyHash = new Hash();
var hm_path = "images/hm.png";
var wm_path = "images/wm.png";
var bt = 0; // 0 - ff, 1 - ie
var vac_id;
var visitor_lat = 0;
var visitor_lon = 0;
var service_phrase = "";
var visitors = "";
var comp_count = "";
var vac_count = "";
var cur_results;
var results_a = 1;
var vac_all;
var last_kn = 0;
var max_results = 1;

var enter_address = "Введите адрес!";
var addr_not_found = "\nТакой адрес не найден. Укажите на карте.";
var set_home_first = "Укажите своё местоположение";
var set_skills = "Укажите свои навыки";
var salary_txt = "Зарплата: ";
var date_txt = "Дата: ";
var address_txt = "Адрес: ";
var showfull_txt = "Показать";
var showfull_txt_0 = "Скрыть";
var nothing_found = "Ничего не найдено";
var marker_problem = "Повторите попытку!";
var ajax_problem = "Ваш браузер не поддерживает AJAX";
var http_problem = "Проблема с AJAX";

$(document).ready(function() {
	$("#logo_phrase").load('main.php', {action: "gl"});
	$.getJSON('main.php', {action: "start_session"}, function(data) { gSessionHash = data; });
/*
	$mission_dialog = $('#mission_form').dialog(
			  {autoOpen: false, title: 'О проекте', modal:true, resizable:false,
				closeOnEscape: true, width: 500,
				buttons: {
							"Закрыть": close_mission 
							},
				dialogClass:  "my-dialog"
			});
	$thanks_dialog = $('<div id="many_thanks_form"><br/><p><a href="http://maps.google.com">Google</a> - за Google Maps <br /><a href="http://www.maxmind.com">MaxMind</a> - за бесплатный GeoIP сервис</p></div>').dialog(
		  {autoOpen: false, title: 'Большое спасибо', modal:true, resizable:false,
			closeOnEscape: true, dialogClass:  "my-dialog"
		});
*/

});

function do_smth3( obj ) {
	var str = obj.parentNode.id;
	var id = (str.split("_", 3))[2]
	if( obj.value == "+" ) {
		obj.value = "-";
		$("#vacs_div_" + id).show();
	}
	else {
		obj.value = "+";
		$("#vacs_div_" + id).hide();
	}
}

function find_address() {
	find_home_by_address($('#home_addr').val());
}

function find_home_by_address(address) {
	clear_results1();
	if($.trim(address) == "" ) {
		alert(enter_address);
		return;
	}

	if( homeGMarker != null ) {
		map.removeOverlay(homeGMarker);
	}
	homeGMarker = null;


	if(geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if(!point) {
					alert(address + addr_not_found);
				} else {
					map.setCenter(point);
					var home_icon = new GIcon(G_DEFAULT_ICON, hm_path)
					var opt = new Object();
					opt.draggable = true;
					opt.icon = home_icon;
					var marker = new GMarker( point, opt );
					map.addOverlay(marker);
					homeGMarker = marker;
					$('#set_home_button').removeClass('my-back-color-warn').addClass('my-back-color');
					$('#map_hint').hide();
				}
			}
		);
	}
	else {
	}
}


function php_find_vacancy(q, lat, lon, d, kw, sh) {
	var par = { action:"find_vac", q:q, lat:lat, lon:lon, d:d, kw:kw.toLowerCase(), sh:sh };
	$.getJSON("main.php", $.param(par), handle_find_vacancy1);
}

function test_button(a) {
	if( a == 1 ) {
		clear_results1();
	}

	if( homeGMarker == null ) {
		alert(set_home_first);
	}
	else {
		if( (kws=$.trim($("#edit_keyword").val())) != "" ) {
			php_find_vacancy(a, homeGMarker.getLatLng().y, homeGMarker.getLatLng().x, 1000, kws, gSessionHash);
		}
		else {
			alert(set_skills);
		}
	}
}


function handle_find_vacancy1(str) {
	if( str.length > 0 ) {
		cur_results.style.display = "block";
		max_results = str[0].max_nbr;
		if( max_results > 1 ) {
			$('#next_panel').show();
		}
		if( ((cur_results.id).split("_", 2))[1] < max_results ) {
			document.getElementById("next_result").disabled = "";
		}
		else {
			document.getElementById("next_result").disabled = "disabled";
		}
		var i=0;
		var prev_keywords = "";
		var res_html = "";
		var cc = "";
		for( i; i < str.length; ++i ) {
			if( !companyHash.hasItem( (str[i].companyCode + "$" + str[i].vacCode) ) ) {
				lat = (str[i].distance == 0) ? homeGMarker.getLatLng().y : str[i].latitude;
				lon = (str[i].distance == 0) ? homeGMarker.getLatLng().x : str[i].longitude;
				append_company_to_map( str[i].companyTitle, str[i].companyCode + "$" + str[i].vacCode,
												lat, lon, str[i].companyAddress );
				exCompanyHash.setItem(str[i].companyCode + "$" + str[i].vacCode, 0);
				cc = str[i].companyCode + "$" + str[i].vacCode;
			}
			else {
				var ti = exCompanyHash.getItem(str[i].companyCode + "$" + str[i].vacCode) + 1;
				exCompanyHash.setItem(str[i].companyCode + "$" + str[i].vacCode, ti);
				cc = str[i].companyCode + "$" + str[i].vacCode + "_" + ti;
			}
			if( prev_keywords == str[i].keywords ) {
				res_html += '<div id="vac_div_' + str[i].vacCode + '" class="vac_div">';
				res_html += '<TABLE class="vac_view">';
				res_html += '<COL><COL width="300"><COL width="120"><COL width="70">';
				res_html += '<TR><TD colspan="3" class="vac_title" valign="middle"><div id="vac_company_"' + cc + '">' + '<input class="company_check"' + 'id="company_check_' + cc  + '"' + ' type="checkbox" checked> ' + str[i].vacTitle + '</div>';
				res_html += '<TD rowspan="2" align="center" valign="middle"><button class="view_full my-back-color" type="button" name="view_vac" value="' + showfull_txt + '" >' + showfull_txt + '</button>';
				res_html += '<TR><TD class="company_title">';
				res_html +=  '<b>' + str[i].companyTitle + '</b>';
				res_html += '<TD>' + '<b>' + salary_txt + '</b>' + str[i].salary;
				res_html += '<TD>' + '<b>' + date_txt + '</b>' + str[i].vac_date;
				res_html += '</TABLE>';
				res_html += '<div class="full_vac_div" id="full_vac_div_' + str[i].vacCode + '"></div></div>';
//				res_html += '<br><hr><br>';
			}
			if( prev_keywords != str[i].keywords ) {
				kn++;
				if( prev_keywords != "" ) {
					res_html += "\n</div></div>";
				}
				prev_keywords = str[i].keywords;

				res_html += '<div class="result_div" id="result_div_' + kn + '">';
				res_html += '<div class="keyword_div" id="keyword_div_' + kn + '">'; 
				res_html += '<div class="keyword_sign" id="keyword_sign_' + kn + '"> <input class="keyword_sign_button my-back-color" type="button" value="+"/><br> </div>';
				res_html += '<div class="keyword_box my-back-color" id="keyword_box_' + kn + '">' + str[i].keywords + '</div>';
				res_html += '</div>';
				res_html += '<div class="vacs_div" id="vacs_div_' + kn + '">';
				res_html += '<div id="vac_div_' + str[i].vacCode + '" class="vac_div">';
				res_html += '<TABLE class="vac_view">';
				res_html += '<COL><COL width="300"><COL width="120"><COL width="70">';
				res_html += '<TR><TD colspan="3" class="vac_title" valign="middle"><div id="vac_company_"' + cc + '">' + '<input class="company_check"' + 'id="company_check_' + cc  + '"' + ' type="checkbox" checked> ' + str[i].vacTitle + '</div>';
				res_html += '<TD rowspan="2" align="center" valign="middle"><button class="view_full my-back-color" type="button" name="view_vac" value="' + showfull_txt + '" >' + showfull_txt + '</button>';
				res_html += '<TR><TD class="company_title">';
				res_html +=  '<b>' + str[i].companyTitle + '</b>';
				res_html += '<TD>' + '<b>' + salary_txt + '</b>' + str[i].salary;
				res_html += '<TD>' + '<b>' + date_txt + '</b>' + str[i].vac_date;
			
				res_html += '</TABLE>';
				res_html += '<div class="full_vac_div" id="full_vac_div_' + str[i].vacCode + '"></div></div>';
//				res_html += '<hr>';

			}
		}
		res_html += "</div></div>";


		cur_results.innerHTML += res_html;
		cur_results.style.display = "block";
		$(".keyword_sign_button").click( function() {do_smth3($(this).get(0))} );
		$(".view_full").click( function() { view_full_clicked($(this).get(0))} );
		$(".company_check").click( function() { company_check($(this).get(0).id) } );
	}
	else {
		alert( nothing_found );
	}
}

function view_full_handle() {
	if(httpObject.readyState == 4){
		if (bt == 1 || bt == 0) {
			resp = httpObject.responseText;
			document.poppedLayer = document.getElementById("full_vac_div_" + vac_id);
			document.poppedLayer.innerHTML += resp;
			document.poppedLayer.style.display = "block";
		}
	}

}

function view_full_clicked(obj) {
	var str = ((((obj.parentNode).parentNode).parentNode).parentNode).parentNode.id;
	var vac_id = (str.split("_", 3))[2];
	
	if( obj.value == showfull_txt ) {
		obj.value = showfull_txt_0;
		$(obj).removeClass('my-back-color').addClass('my-back-color-warn');
		$("#full_vac_div_" + vac_id).load("main.php", $.param({action:"view_full", id:vac_id, sh:gSessionHash}), function(d) { $(this).show('slow')}); 
	}
	else {
		obj.value = showfull_txt;
		$(obj).removeClass('my-back-color-warn').addClass('my-back-color');
		$("#full_vac_div_" + vac_id).hide('slow');
	}
}

function home_was_set(x, y) {
	show_home_addr = 0;
	$('#set_home_button').removeClass('my-back-color-warn').addClass('my-back-color');
	$('#map_hint').hide();
	change_cursor_pointer(0);
}

function set_home_address() {
	if( homeGMarker != null ) {
		map.removeOverlay(homeGMarker);
		clear_results1();
	}
	homeGMarker = null;
	show_home_addr = 1;
	$('#set_home_button').removeClass('my-back-color').addClass('my-back-color-warn');
	$('#map_hint').show();
}

function add_home_marker(response) {
	if( homeGMarker == null && show_home_addr == 1) {
		if( !response || response.Status.code != 200 ) {
			alert( marker_problem );
		} else {
			place = response.Placemark[0];
			var point = new GLatLng( place.Point.coordinates[1],
									place.Point.coordinates[0] );
			var opt = new Object();
			opt.draggable = true;

			var home_icon = new GIcon(G_DEFAULT_ICON, hm_path);
			opt.icon = home_icon;


			var marker = new GMarker( point, opt );
			map.addOverlay( marker );
			homeGMarker = marker;
			home_was_set( place.Point.coordinates[0], place.Point.coordinates[1]);
		}
	}
}


function load(e) {
	visitor_lat = geoip_latitude();
	visitor_lon = geoip_longitude();
	visitor_lat = (visitor_lat == 0) ? 56.315924 : visitor_lat;
	visitor_lon = (visitor_lon == 0) ? 56.315924 : visitor_lon;
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		function createMarker(point, html) {
			var marker = new GMarker(point);
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
				}
			);
			
			return marker;
		}

		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		geocoder = new GClientGeocoder();


		map.setCenter(new GLatLng(visitor_lat, visitor_lon), 13);


		GEvent.addListener(map, "click", on_map_click);
				
	}
	cur_results = document.getElementById( "results_1" );
}

function unload() {
	end_session();
	GUnload();
}

function getHTTPObject(){
	if (window.ActiveXObject) { bt = 1; return new ActiveXObject("Microsoft.XMLHTTP"); }
	else if (window.XMLHttpRequest) { bt = 0; return new XMLHttpRequest(); }
	else {
		alert( ajax_problem );
		return null;
      }
}

function end_session()
{
	$.get("main.php", {action: "end_session", sh: gSessionHash});
}

function on_map_click(overlay, latlng)
{
	if( latlng != null ) {
		address = latlng;
		geocoder.getLocations(latlng, add_home_marker);
	}
}


function clear_results1() {
	document.getElementById("next_panel").style.display = "none";
	document.getElementById("next_result").disabled = "disabled";
	document.getElementById("prev_result").disabled = "disabled";
	kn = 0;
	document.getElementById("results_box").innerHTML = "<div id=\"results_1\" class=\"results\"></div>";
	results_a = 1;
	cur_results = document.getElementById( "results_1" );

	cur_results.style.display = "none";

	for(var i in companyHash.items) {
		map.removeOverlay(companyHash.items[i]);
	}
	companyHash = null;
	companyHash = new Hash();
	exCompanyHash = new Hash();
}

function company_check(obj) {
	var id = (obj.split("_", 3))[2]
	if( document.getElementById(obj).checked ) {
		map.addOverlay(companyHash.getItem( id ));
	}
	else {
		map.removeOverlay(companyHash.getItem( id ));
	}
}

function change_cursor_pointer(f) {
// f = 1 - pointer; f = 0 - default
	if( f == 1 ) {
		document.body.style.cursor = 'pointer';
	}
	else {
		document.body.style.cursor = 'default';
	}
}


function append_company_to_map(title, code, lat, lon, comp_addr) {
	var point = new GLatLng(lat, lon);
	var opt = new Object();
	opt.title = title;
	var work_icon = new GIcon(G_DEFAULT_ICON, wm_path)
	opt.icon = work_icon;

	var marker = new GMarker(point, opt);
	companyHash.setItem(code, marker);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml('<div style=""><b>' + title + '</b><br>' + address_txt + comp_addr + '</div>');
		}
	);
	map.addOverlay(marker);
}

function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.removeItem = function(in_key)
	{
		var tmp_previous;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_previous = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_previous;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		var tmp_previous;
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}
			else {
				tmp_previous = this.items[in_key];
			}

			this.items[in_key] = in_value;
		}
	   
		return tmp_previous;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}

function prev_clicked() {
	cur_id = ((cur_results.id).split("_", 2))[1];

	if( cur_id != 1 ) {
		cur_results.style.display = "none";

		cur_results = document.getElementById( "results_" + (cur_id - 1) );
		document.getElementById( cur_results.id ).style.display = "block";

		document.getElementById("next_result").disabled = "";
		if( ((cur_results.id).split("_", 2))[1] == 1 ) {
			document.getElementById("prev_result").disabled = "disabled";
		}
	}
	
}

function next_clicked() {
	document.getElementById("prev_result").disabled = "";
	document.poppedLayer = cur_results;
	document.poppedLayer.style.display = "none";
	cur_id = parseInt(((cur_results.id).split("_", 2))[1]);
	if( results_a == cur_id && cur_id < max_results ) {
		new_id = "results_" + (results_a + 1);
		document.getElementById("results_box").innerHTML += "<div id=\"" + new_id + "\" class=\"results\">"
											+ "</div>";
		cur_results = document.getElementById( new_id );
		results_a++;
		test_button( results_a );
		cur_results.style.display = "block";
		
	}
	else {
		new_id = ( "results_" + (cur_id + 1) );
		cur_results = document.getElementById( "results_" + (cur_id + 1) );
		cur_results.style.display = "block";
		if( ((cur_results.id).split("_", 2))[1] == max_results ) {
			document.getElementById("next_result").disabled = "disabled";
		}
	}
}

function show_mission() {
	$mission_dialog.dialog('open');
}

function close_mission() {
		  $mission_dialog.dialog('close');
		  $thanks_dialog.dialog('close');
}

function many_thanks() {
		  $thanks_dialog.dialog('open');
}

