var map = null;
var map2 = null;
var geocoder = null;
var visitor_lat = 0;
var visitor_lon = 0;
var homeGMarker = null;
var homeVMarker = null;
var address;
var wm_path = "images/wm.png";
var sUsername = "";
var sPassword = "";
var gCSessionHash = "";
var problem_txt = "Попробуйте ещё раз!";
var address_txt = "Введите адрес";
var notfound_txt = " Такой адрес не найден. Укажите на карте";
var username_txt = "Введите адрес эл. почты";
var password_txt = "Введите пароль";
var incorrect_txt = "Неправильное имя и/или пароль";
var date_txt = "Дата: ";
var title_txt = "Название: ";
var salary_txt = "Зарплата: ";
var delete_txt = "Удалить";
var view_txt = "Посмотреть";
var company_title_txt = "Введите название компании";
var company_address_txt = "Введите адрес";
var company_map_txt = "Укажите компанию на карте";
var saved_txt = "Информация сохранена";
var saved_txt_0 = "Не удалось сохранить информацию";
var vac_title_txt = "Введите название вакансии";
var user_exists_txt = "Такое имя пользователя существует";
var restore_txt = "Ваш пароль отправлен на ";
var restore_txt_problem = "Такой пользователь не зарегистрирован";
var descr_txt = "Введите описание вакансии";
var home_vmarker_txt = "Необходимо указать адрес для вакансии";
var vacEdit;
var edit_vac_init = "<h2>Требования</h2><p></p><h2>Обязанности</h2><p></p><br><strong>Как откликнуться:</strong> отправить резюме на ";
var vacEditor;

$(document).ready(function() {
	$.getJSON('main.php', $.param({action: "comp_start_session"}), function(data) {
			gCSessionHash = data;
	});
	google.load("maps", "2", {"callback" : mapsLoaded});
	$login_dialog = $('<div id="login_dialog"></div>').load('login.html').dialog(
			  {autoOpen: false, title: 'Вход', modal:true, resizable:false,
			  closeOnEscape: false, dialogClass:  "my-dialog hide-close"
		});

	$vac_dialog = $('#vac_editor').dialog(
			  {autoOpen: false, modal:true,
				width:750,
				minWidth:750,
				minHeight:500,
				resizable:false,
				dialogClass:  "my-dialog",
				buttons: {
							"Отмена": function() {$vac_dialog.dialog('close')},
							"Сохранить": on_n_v_sf_save 
						},
				open: function() {
					vacEditor = new tinyMCE.Editor('n_v_sf_d',
						{
							theme : "advanced",
							plugins : "advlist, paste",
							
							theme_advanced_buttons1 : "undo,redo,|, bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,|,removeformat,|,bullist,numlist,outdent,indent,|,link,unlink",
							theme_advanced_buttons2 : "",
							theme_advanced_buttons3 : "",
							theme_advanced_buttons4 : "",
							theme_advanced_toolbar_location : "top",
							theme_advanced_toolbar_align : "left"
						}
					);
					vacEditor.render();
				},
				close: function() {
					tinyMCE.get('n_v_sf_d').remove();
					vacEditor = null;
				}
		});
	
	$login_dialog.dialog('open');
});

function mapsLoaded() {
	visitor_lat = geoip_latitude();
	visitor_lon = geoip_longitude();
	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($("#map").get(0));
		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);
				
		map2 = new GMap2($("#map2").get(0));
		map2.addControl(new GLargeMapControl());
	}

}

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

function add_home_marker(response) {
	if( homeGMarker == null ) {
		if( !response || response.Status.code != 200 ) {
			alert( problem_txt );
		} else {
			place = response.Placemark[0];
			set_home_via_coords( place.Point.coordinates[1],
									place.Point.coordinates[0] );
		}
	}
}

function set_home_via_coords(x, y) {
	var point = new GLatLng( x, y );
	var opt = new Object();
	opt.draggable = true;

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

	var marker = new GMarker( point, opt );
	map.addOverlay( marker );

	homeGMarker = marker;
}

function set_company_home() {
	address = $("#address_field").val();
	if($.trim(address) == "" ) {
		alert( address_txt );
		return;
	}

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


	if(geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if(!point) {
					alert(address + notfound_txt);
				} else {
					map.setCenter(point);
					var home_icon = new GIcon(G_DEFAULT_ICON, wm_path)
					var opt = new Object();
					opt.draggable = true;
					opt.icon = home_icon;
					var marker = new GMarker( point, opt );
					map.addOverlay(marker);
					homeGMarker = marker;
				}
			}
		);
	}
	else {
	}

}

function login() {
	sUsername = $.trim($("#l_field").val());
	sPassword = $.trim($("#p_field").val());

	if(sUsername == "" ) {
		alert( username_txt );
		return;
	}
	if(sPassword == "" ) {
		alert( password_txt );
		return;
	}
	sPassword = hex_md5(gCSessionHash + sPassword);

	var par = { action:"login", username:sUsername, password:sPassword, session:gCSessionHash};
	$.getJSON("main.php", $.param(par), login_handle);
}

function login_handle (data) 
{
	if( data.login_status == 500 ) {
		alert(problem_txt);
	}
	else if( data.login_status == 200 ) {
		$login_dialog.dialog('close');
		process_company_info(data);
		$("#n_v_add").removeAttr("disabled");
		$("#vac_panel").show();
		$("#n_v_add").show();
		$("#save_info").removeClass('my-back-color-warn').addClass('my-back-color');
	}
	else if( data.login_status == 201 ) {
		$login_dialog.dialog('close');
		process_company_info(data);
		$("#save_info").removeClass('my-back-color').addClass('my-back-color-warn');
	}
	else {
		alert( incorrect_txt );
	}
}

function process_company_info(str) {
	$("#title_field").val(str.companyTitle);
	$("#address_field").val(str.companyAddress);
	$("#user_label").empty().append(sUsername);
	
	set_home_via_coords( str.latitude, str.longitude );
	map.setCenter(new GLatLng(str.latitude, str.longitude), 13);

	res_html = "";
	i = 0;
	va = str.vra;
	for( i=0; i < va.length; ++i ) {
		var dd = (va[i].vac_date).split("-", 3);
		res_html = "<div class='vac_div c3' id='vac_div_" + va[i].vacCode + "'>";
		res_html += "<div class=\"date_div\">" + "<b>" + date_txt + "</b>" + (new Date(dd[0], dd[1]-1, dd[2])).toDateString() + "</div>";
		res_html += "<div class=\"vac_title_div\">" + "<b>" + title_txt + "</b>" + va[i].vacTitle + "</div>";
		res_html += "<div class=\"salary_div\">" + "<b>" + salary_txt + "</b>" + va[i].salary + "</div>";
		res_html += "<div class=\"delete_div\"><input class=\"delete_vac\" type=\"button\" value=\"" + delete_txt + "\" onclick=\"delete_vac('vac_div_" + va[i].vacCode + "')\"><input type=\"button\" class=\"view_vac\" value=\"" + view_txt + "\" onclick=\"view_vac(" + va[i].vacCode + ")\"></div>";
		res_html += "</div>";

		$("#vac_panel").append(res_html);
	}
}

function unload() {
	$("#user_label").empty();
}

function save_company_info() {
	var comp_title = $("#title_field").val();
	var comp_address = $("#address_field").val();
	if($.trim(comp_title) == "" ) {
		alert( company_title_txt );
		return;
	}
	if($.trim(comp_address) == "" ) {
		alert( company_address_txt );
		return;
	}
	if ( homeGMarker == null ) {
		alert(company_map_txt);
		return;
	}
	var par = { action:"save_company",
					comp_title:comp_title,
					comp_address:comp_address,
					user_name:sUsername,
					password:sPassword,
					clat:(homeGMarker.getLatLng().y),
					clon:(homeGMarker.getLatLng().x),
					session:gCSessionHash
					};
	$.getJSON("main.php", $.param(par), save_company_info_handle);
}

function save_company_info_handle (data) {
	if( data == 200 ) {
		alert(saved_txt);
		$("#n_v_add").removeAttr("disabled");
		$("#vac_panel").show();
		$("#n_v_add").show();
		$("#save_info").removeClass('my-back-color-warn').addClass('my-back-color');
	}
	else if( data == 201 ) {
		alert(saved_txt);
		$("#n_v_add").attr("disabled", "disabled");
		$("#vac_panel").hide();
		$("#n_v_add").hide();
		$("#save_info").removeClass('my-back-color').addClass('my-back-color-warn');
	}
	else {
		alert( saved_txt_0 );
		$("#n_v_add").attr("disabled", "disabled");
		$("#vac_panel").hide();
		$("#n_v_add").hide();
	}
}

function on_n_v_add() {
	show_edit_v_sf(-1, null);
}

function delete_vac(id) {
	var par = { action:"delete_vac",
					user_name:sUsername,
					password:sPassword,
					vac_id:id.split("_", 3)[2],
					session:gCSessionHash };
	$.getJSON("main.php", $.param(par), delete_vac_handle);
}

function delete_vac_handle(data) {
	if( data[0] == 200 ) {
		$("#vac_div_" + data[1]).hide();
	}
}

function register() {
	sUsername = $("#l_field").val();
	sPassword = $("#p_field").val();
	if($.trim(sUsername) == "" ) {
		alert( username_txt );
		return;
	}
	if($.trim(sPassword) == "" ) {
		alert( password_txt );
		return;
	}
	var par = { action:"register",
					username:sUsername,
					password:sPassword };
	$.getJSON("main.php", $.param(par), register_handle);
}

function register_handle(jsonResp) {
	if( jsonResp[0] == 500 ) {
		alert(problem_txt);
	}
	else if( jsonResp[0] == 201 ) {
		$("#user_label").empty().append(sUsername);
		sPassword = hex_md5( gCSessionHash + sPassword );
		$login_dialog.dialog('close');
		$("#save_info").removeClass('my-back-color').addClass('my-back-color-warn');
	}
	else if( jsonResp[0] == 100 ) {
		alert( user_exists_txt );
	}
}

function view_vac(vac_id) {
	$.getJSON("main.php", $.param({action:"view_full_2", id:vac_id, session:gCSessionHash}),
		function(jsonResp) {
			show_edit_v_sf(vac_id, jsonResp);
			
	});
}

function pwd_restore() {
	if($("#pwd_r").attr("checked")) {
		$("#pwd_r_block").show();
	}
	else {
		$("#pwd_r_block").hide();
	}

}

function restore_button_clicked() {
	sUsername = $.trim($("#l_field").val());
	if(sUsername == "" ) {
		alert( username_txt );
		return;
	}
	else {
	$.getJSON("main.php", $.param({action:"restore_pwd", username:sUsername}), restore_pwd_handle);
	}
}

function restore_pwd_handle(data) {
	if( data == 200 ) {
		alert(restore_txt + $("#l_field").val());
	}
	else {
		alert(restore_txt_problem);
	}
}

function show_reg() {
	if( $('#reg_tr').is(':visible') ) {
		$('#reg_tr').hide();
	}
	else {
		$('#reg_tr').show();
	}
}


function addVMarker(latlng) {
	if( homeVMarker != null ) {
		map2.removeOverlay(homeVMarker);
	}
	homeVMarker = null;

	map2 = null;
	map2 = new GMap2($("#map2").get(0));
	map2.addControl(new GLargeMapControl());
	homeVMarker = new GMarker( new GLatLng(latlng.x, latlng.y),
			{draggable: true, icon: new GIcon(G_DEFAULT_ICON, wm_path)});
	map2.addOverlay(homeVMarker);
	map2.setCenter(new GLatLng(latlng.x, latlng.y), 13);
}

function show_edit_v_sf(id, jsonResp) {
	$vac_dialog.dialog('open');
	vacEdit = id;
	$("#n_v_sf_h3").empty();
	if( vacEdit == -1 ) {
		$vac_dialog.dialog('option', 'title', 'Размещение вакансии');
		$("#n_v_sf_t").val('');
		$("#sal_field").val('');
		$("#sf_rv").removeAttr("checked");
		$("#n_v_sf_a").val($("#address_field").val());
		vacEditor.onLoadContent.add(function(ed, o) {
			addVMarker({x: homeGMarker.getLatLng().y, y: homeGMarker.getLatLng().x});
		});
		$('#n_v_sf_d').val(edit_vac_init + sUsername);

	}
	else {
		$vac_dialog.dialog('option', 'title', 'Редактирование вакансии');
			vacEditor.onLoadContent.add(function(ed, o) {
				if( jsonResp.latitude == null ) {
					addVMarker({x: homeGMarker.getLatLng().y, y: homeGMarker.getLatLng().x});
				}
				else {
					addVMarker({x: jsonResp.latitude, y: jsonResp.longitude});
				}
			});

			$("#n_v_sf_t").val(jsonResp.title);
			$("#sal_field").val(jsonResp.salary);
			$('#n_v_sf_d').val(jsonResp.descr);
			if( jsonResp.address == null ) {
				$("#n_v_sf_a").val($("#address_field").val());
			}
			else {
				$("#n_v_sf_a").val(jsonResp.address);
			}

			document.getElementById("sf_rv").checked = (jsonResp.rv == 1) ? true : false;
	}

}

function on_n_v_sf_find() {
	address = $("#n_v_sf_a").val();
	if($.trim(address) == "" ) {
		alert( address_txt );
		return;
	}

	if( homeVMarker != null ) {
		map2.removeOverlay(homeVMarker);
	}
	homeVMarker = null;


	if(geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if(!point) {
					alert(address + notfound_txt);
				} else {
					map2.setCenter(point, 13);
					var home_icon = new GIcon(G_DEFAULT_ICON, wm_path)
					var opt = new Object();
					opt.draggable = true;
					opt.icon = home_icon;
					var marker = new GMarker( point, opt );
					map2.addOverlay(marker);
					homeVMarker = marker;
				}
			}
		);
	}
	else {
	}

}

function on_n_v_sf_save() {
	var title = $("#n_v_sf_t").val();
	var salary = $("#sal_field").val();
	var descr = tinyMCE.get('n_v_sf_d').getContent();
	var address = $("#n_v_sf_a").val();
	var rv;
	if( homeVMarker == null ) {
		alert( home_vmarker_txt );
		return;
	}
	else {
		var lat = homeVMarker.getLatLng().y;
		var lon = homeVMarker.getLatLng().x;
	}
	if( $("#sf_rv").attr("checked") ) {
		rv = 1;
	}
	else {
		rv = 0;
	}

	if($.trim(title) == "" ) {
		alert( vac_title_txt );
		return;
	}
	else if($.trim(descr) == "" ) {
		alert( descr_txt );
		return;
	}

	var act = (vacEdit == -1) ? "save_vac_2" : "update_vac_2";
	var par = { action:act,
					title:title,
					salary:salary,
					descr:descr,
					user_name:sUsername,
					password:sPassword,
					session:gCSessionHash,
					rv:rv,
					address:address,
					lat:lat,
					lon:lon,
					vac_id:vacEdit };

	$.post("main.php", $.param(par), function(data) {
													on_n_v_sf_save_handle(data);
												}, "json");
}

function on_n_v_sf_save_handle(jsonResp) {
	if( jsonResp[0] == 200 ) {
		if( vacEdit != -1) {
			$("#vac_div_" + vacEdit).hide();
			document.getElementById("vac_div_" + vacEdit).id = "vac_div_-" + vacEdit;
		}
		res_html = "<div class='vac_div c3' id=\"vac_div_" + jsonResp[1] + "\">";
		res_html += "<div class=\"date_div\">" + "<b>" + date_txt + "</b>" + (new Date()).toDateString() + "</div>";
		res_html += "<div class=\"vac_title_div\">" + "<b>" + title_txt + "</b>" + $("#n_v_sf_t").val() + "</div>";
		res_html += "<div class=\"salary_div\">" + "<b>" + salary_txt + "</b>" + $("#sal_field").val() + "</div>";
		res_html += "<div class=\"delete_div\"><input class=\"delete_vac\" type=\"button\" value=\"" + delete_txt + "\" onclick=\"delete_vac('vac_div_" + jsonResp[1] + "')\"><input type=\"button\" class=\"view_vac\" value=\"" + view_txt + "\" onclick=\"view_vac(" + jsonResp[1] + ")\"></div>";
		res_html += "</div>";
		$("#vac_panel").append(res_html);
	}
	else {
		alert( jsonResp[0] + " " + jsonResp[1] );
	}
	$vac_dialog.dialog('close');
}

