var panorama = null;
var man = null;
var overlayInstance = null;
var map = null;
var client = null;;
var lastMarkerLocation = null;;
var mapT = null;;
var placeMarker = null;
var panoPreview = null;

var params = {};
params.wikiLang = null;

var tsv = null;

google.load("language", "1");

// -----------------------------------
// -----------------------------------
//	site ... 	
// -----------------------------------
// -----------------------------------

function lc_goAdd()
{
	var latlng = man.getLatLng();
	var pov = panorama.getPOV(); 
	
	var params = '?lat='+latlng.lat()+'&lng='+latlng.lng()+'&city_id='+cityID;
	params += '&yaw='+pov.yaw+'&pitch='+pov.pitch+'&zoom='+pov.zoom;
	
	var url = '/'+langID+'/new/'+params;
	window.open(url);
}


// -----------------------------------
// -----------------------------------
//	site ... 	
// -----------------------------------
// -----------------------------------


/**
 *
 */
function lc_userRegister(hash)
{
	var f = {};
	f.t = "register";
	f.hashcode = hash;
	f.email = $("#rEmail").val();
	f.name = $("#rName").val();
	f.pass = $("#rPass").val();
	f.cpass = $("#rCPass").val();
	f.code = $("#rCode").val();
	
	var xml = ajax_postSContent("/register/", 2, f);	
	
	
	var msg = { "name.error.exists": "name exists", 
			    "email.error.exists": "email exists"};
	
	var isValid = site_showErrorXML({name:"rName", email:"rEmail", 
								    pass:"rPass", cpass: "rCPass",
								    code:"rCode"}, xml, msg);

	if(isValid)
	{							    
		lc_workCallback(xml);
	}	
}

// -----------------------------------
// -----------------------------------

/**
 *	логинимся + callback
 */
function lc_userLogin()
{
	var f = {};
	f.t = "login";
	f.email = $("#rEmail").val();
	f.pass = $("#rPass").val();
	
	var xml = ajax_postSContent("/login/", 2, f);	
	
	var msg = { "email.not.found": "user not exists", "pass.not.found": "password incorrect"};
	
	var isValid = site_showErrorXML({email:"rEmail", pass:"rPass"}, xml, msg);

	if(!isValid)
	{							    
		return; 
	}
		
	lc_workCallback(xml);
}

// -----------------------------------
// -----------------------------------

function lc_workCallback(xml)
{
	/** <Callback type="modal|close|callback|frame" value=""/> **/
	var resArr = xml.getElementsByTagName('Callback');
	if(resArr.length)
	{
		var res = resArr[0];
		var type = res.getAttribute("type");
		var value = res.getAttribute("value");
		
		if(type == "close") { lc_closeModal(); return; }
		else if(type == "reload") { location.href = location.href; return; }
		else if(type == "frm") 
		{ 
			var frm = getFrame();
			frm[value]();
			return;
		}
		else if(type == "mod") 
		{  
			lc_showModalDef(value);
			return;
		}
		else if(type == "cbk")
		{
			window[value]();
			return;
		}
	}
	
	lc_closeModal();
}	

// ------------------------------------------------

/**
 *	показываем ошибки для xml 
 */
function site_showErrorXML(elems, xml, msg)
{	
	var errs = xml.getElementsByTagName('Error');
	var isValid = true;
	
	for(var key in elems)
	{
		$("#" + elems[key]).css("border", "1px #707070 solid");
	}
			
	for(var i = 0; i < errs.length; i++)
	{
		isValid = false;
		var id = errs[i].getAttribute("id");
		var value = errs[i].getAttribute("value");
		var msgId = errs[i].getAttribute("msg");
		
		$("#" + elems[id]).css("border", "1px #FF5900 solid");
		
		if(msg[msgId])
		{
			alert(msg[msgId]);
		}
		
	}
	
	return isValid;
}

// -----------------------------------
//	подписка на группу
// -----------------------------------

/**
 *
 */
function lc_joinToGroup(grID)
{
	var f = {};
	f.t = "join";
	f.gr_id = grID;
	
	var res = ajax_postSContent("/tools/user.group.php", 1, f);	
	if(res == 1)
	{
		location.href = location.href;
	}
	else
	{
		alert(locStr.error);
	}
}

// -----------------------------------

/**
 *
 */
function lc_leaveGroup(grID)
{
	var f = {};
	f.t = "leave";
	f.gr_id = grID;
	
	var res = ajax_postSContent("/tools/user.group.php", 1, f);	
	if(res == 1)
	{
		location.href = location.href;
	}
	else
	{
		alert(locStr.error);
	}
}


// -----------------------------------

/**
 *	Добавляем папку по параметрам
 */
function lc_addGroupByParam(fName, boxName, name, access, desc)
{
	if(!name) { return; }

	var f = {};
	f.t = "makegroup";
	f.name = name;
	f.access = access;
	f.country_id = countryID;
	f.description = desc;
	f.city_id = cityID;
	f.lang = langID;
	
	var data = ajax_postSContent("/tools/group.php", 1, f);	
	var obj = eval('(' + data + ')');

	if(obj.id)
	{
		var sel = $gid(fName);
		sel.options[sel.options.length] = new Option(obj.name, obj.id);
		sel.selectedIndex = sel.options.length - 1;
		$("#"+boxName).hide();
	}
	else
	{
		alert(locStr.error);
	}
}

// -----------------------------------

/**
 *	сохраняем место
 */
function lc_saveGroup()
{
	var f = {};
	
	f.name = $("#ngName").val();
	f.description = $("#ngDesc").val();
	f.access = $("#ngGroupAccess").val();
	f.city_id = $("#ng_city").val();
	f.lang = langID;
	
	if(!f.name) { alert(locStr.error_name); return; }

	var data = ajax_postSContent("/tools/group.php", 1, f);	
	var obj = eval('(' + data + ')');

	if(obj.id)
	{
		lc_closeModal();
		//http://www.test4.ru/ru/map/au/27/?group=56
		location.href = '/'+langID+'/map/'+obj.country_id+'/'+obj.city_id+'/?group='+obj.id;
	}	
	else
	{
		alert(locStr.error);
	}
}

// -----------------------------------

/**
 *	сохраняем место
 */
function lc_addPlace2Group(grID, placeID)
{
	var f = {};
	
	f.gr_id = grID;
	f.place_id = placeID;

	var res = ajax_postSContent("/tools/group.add.place.php", 1, f);	

	if(res == 1) {	lc_closeModal(); }
	else { alert(locStr.error); }
}

// -----------------------------------

/**
 *	сохраняем место
 */
function lc_addPlace2NewGroup(name, access, desc, placeID, countryID, cityID)
{
	if(!name) { return; }

	var f = {};
	f.t = "makegroup";
	f.name = name;
	f.access = access;
	f.country_id = countryID;
	f.description = desc;
	f.city_id = cityID;
	f.lang = langID;
	
	var data = ajax_postSContent("/tools/group.php", 1, f);	
	var obj = eval('(' + data + ')');

	if(obj.id) { lc_addPlace2Group(obj.id, placeID); }
	else { alert(locStr.error);	}
}

// -----------------------------------

/**
 *	устанавливаем параметры пользователя
 */
function lc_setUserParam(param, groupID, userID, value, el)
{
	var f = {};
	f.param = param;
	f.gr_id = groupID;
	f.users_id = userID;
	f.value = value;

	var res = ajax_postSContent("/tools/user.params.php", 1, f);

	if(res == 1) 
	{ 
		var text = $(el).text();
		$($(el).parent("span")[0]).html(text);
	}	
	else { alert(locStr.error);	}
}

// -----------------------------------

/**
 *
 */
function lc_saveComment(pid, lang, comment, rating)
{
	var f = {};
	f.t = "savecmt";
	f.pid = pid;
	f.lang = lang;
	f.comment = comment;
	f.rating = rating || 0;
	
	var res = ajax_postSContent("/tools/comment.save.php", 1, f);	
	return res;
}

// -----------------------------------

/**
 *
 */
function lc_saveContactCmt(url)
{
	var f = {};
	f.t = "save";
	f.referer = $("#cReferer").val();
	f.name = $("#cName").val();
	f.email = $("#cEmail").val();
	f.comment = $("#cComment").val();
		
	var res = ajax_postSContent(url, 1, f);	
	lc_closeModal();
}

// -----------------------------------

/**
 *
 */
function lc_sendLinkToPlace(f)
{
	var res = ajax_postSContent("/tools/link.send.php", 1, f);	
	if(res == 1) { lc_closeModal(); return; }
	
	alert(locStr.error);
}

// -----------------------------------

/**
 *
 */
function lc_voteComment(cid, rating)
{
	var f = {};
	f.cid = cid;
	f.rating = rating;
		
	var res = ajax_postSContent("/tools/comment.vote.php", 1, f);	
	return res;
}

/**
 *
 */
function lc_initTopStreetView() 
{
	lc_initTopSVBoxs();
	
	if (GBrowserIsCompatible()) 
	{
        tsv = new GStreetviewPanorama(document.getElementById("topstreetbox"));
        GEvent.addListener(tsv, "error", lc_panoramaError);  
		var latlng = new GLatLng(tsvPos.lat, tsvPos.lng);
		tsv.setLocationAndPOV(latlng, tsvPos.pov);
    }
}

// ------------------------------------
// ------------------------------------

function lc_initTopSVBoxs()
{
	var i = tb_getPageSize();
	var w = i[0]; var h = i[1];

	if(w > 1024)
	{
		var width = w - 479 - 43;
		//var width = 800;
		var height = 450;
		
		//topplacebox:width (545)
		//topplacebox_center:heigh (430)
		//topstreetbox:w,h (502, 350)

		$("#topplacebox").css("width", width+43);
		$("#topplacebox_center").css("height", height+80);

		$("#topstreetbox").css("width", width);
		$("#topstreetbox").css("height", height);
	}
}

// -----------------------------------
// -----------------------------------
//	common ... 	
// -----------------------------------
// -----------------------------------


// -----------------------------------
//	translate functions ...
// -----------------------------------

/**
 *	переводим
 */
function lc_translateBlockNow(el, el2, linkEl, fromLang, toLang)
{
	if(el2.html())
	{
		el.html(el2.html());
		el2.html("");
		
    	var def = linkEl.html();
    	linkEl.html(linkEl.attr("def"));
    	linkEl.attr("def", def);
		
		return;
	}
	
	var html = el.html();
	el.html('Please wait ...');
	
	/** translate text **/
	google.language.translate(html, fromLang, toLang, function(result) 
	{
		if (result.translation) 
	    {
	    	el2.html(html);
	    	el.html(result.translation);
	    	var def = linkEl.html();
	    	linkEl.html(linkEl.attr("def"));
	    	linkEl.attr("def", def);
	    }
	    else
	    {
	    	el.text(html);
	    }
	});
}

// ------------------------------------

/**
 *	получаем, переводим, сохраняем, показываем
 */
function lc_translateBlockNowSave(el, fromLang, toLang, opts)
{
	google.language.translate(el.text(), fromLang, toLang, function(result) 
	{
		if (result.translation) 
	    {
	    	el.html(result.translation);

	    	var f = {};
			f.t = opts.put;
			f.o_id = opts.o_id;
			f.text = result.translation;
			f.lang_id = toLang;
			
			/** save translate **/
			$.post("/tools/stext.php", f);
	    }
	});
}

// ------------------------------------

/**
 *	получаем, переводим, сохраняем, показываем
 */
function lc_translateBlockWS(el, fromLang, toLang, incOrig)
{
	var incOrig = incOrig || 0;
	
	google.language.translate(el.text(), fromLang, toLang, function(result) 
	{
		if (result.translation) 
	    {
	    	var text = result.translation;
	    	if(incOrig && el.text() != text) { text += " ("+el.text()+")"; }
	    	el.html(text);
	    }
	});
}

// ------------------------------------

/**
 *
 */
function lc_loadWikiLang(lang, name, callback)
{
	var url = 'http://'+lang+'.wikipedia.org/w/api.php?action=query&lllimit=100&prop=langlinks&titles='+name+'&format=json&callback=' + callback;
	$.getScript(url);
}

// ------------------------------------

/**
 *
 */
function lc_loadWikiLang2(obj, f)
{
	f.name = obj.text();
	
	$.post('/tools/api.wiki.name.php', f, function(res) 
	{
		alert(res);
		if(res) { obj.html(res); };
	});
}

// ------------------------------------

/**
 *
 */
function lc_translateWikiName(obj)
{
	if(!params.wikiLang) { return; }

	var langLinks = new Array(); 
	for(var pId in obj.query.pages)
	{
		if(obj.query.pages[pId].langlinks) { langLinks = obj.query.pages[pId].langlinks; }
		break;
	}
	
	var isTransl = 0;
	for(var i = 0; i < langLinks.length; i++)
	{
		var l = langLinks[i].lang;
		var t = langLinks[i]["*"];
		
		if(l == params.wikiLang.toLang)
		{
			params.wikiLang.obj.html(t);
			isTransl = 1;

			var f = {};
			f.t = "putname";
			f.o_id = params.wikiLang.placeID;
			f.lang_id = l;
			f.text = t;
			
			$.post("/tools/stext.php", f);
		}
	}

	if(isTransl == 0)
	{
		lc_translateBlockWS(params.wikiLang.obj, params.wikiLang.fromLang, params.wikiLang.toLang, 1);
	}
}

// ------------------------------------

/**
 *
 */
function lc_translateWikiName2(obj, p)
{
	var langLinks = new Array(); 
	for(var pId in obj.query.pages)
	{
		if(obj.query.pages[pId].langlinks) { langLinks = obj.query.pages[pId].langlinks; }
		break;
	}
	
	var isTransl = 0;
	for(var i = 0; i < langLinks.length; i++)
	{
		var l = langLinks[i].lang;
		var t = langLinks[i]["*"];
		
		if(l == p.tol)
		{
			p.o.html(t);
			isTransl = 1;

			var f = {};
			f.t = "putname";
			f.o_id = p.oid;
			f.lang_id = l;
			f.text = t;
			
			$.post("/tools/stext.php", f);
		}
	}

	if(isTransl == 0) {	lc_translateBlockWS(p.o, p.fl, p.tol, 1); }
}

// ------------------------------------
//	flash 
// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_hideFlash()
{
	if(panorama) { panorama.hide();	}
	if(tsv) { tsv.hide(); }
	if(panoPreview && panoPreview.item) { panoPreview.item.hide(); }
}

// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_showFlash()
{
	if(panorama) { panorama.show();	}
	if(tsv) { tsv.show(); }
	if(panoPreview && panoPreview.item) { panoPreview.item.show(); }
}

// ------------------------------------
//	окошки 
// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_showModal(url, opts)
{
	lc_hideFlash();
	
	opts = opts || {};
	var lang = opts.langID || langID;
	lang = lang || "en";
	var w = opts.w || 800;
	var h = opts.h || 490;
	var param = '?height='+h+'&width='+w+'&modal=true&lang='+lang;
	if(opts.add) { param += '&' + opts.add; }
	if(opts._cbtype && opts._cbval) 
	{ 
		param += '&_cbtype=' + opts._cbtype; 
		param += '&_cbval=' + encodeURIComponent(opts._cbval); 
	}
	
	tb_show(null, url + param, null);
}

// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_showModalDef(url)
{
	lc_hideFlash();
	
	if(url.indexOf("?") == -1) { url += "?1"; }
	
	var lang = langID || "en";
	var param = '&height=490&width=800&modal=true&lang='+lang;

	tb_show(null, url + param, null);
}

// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_showModal2(url, opts)
{
	lc_hideFlash();
	
	opts = opts || {};
	var w = opts.w || 800;
	var h = opts.h || 490;
	var param = '?height='+h+'&width='+w+'&modal=true';
	if(opts.add) { param += '&' + opts.add; }
	if(opts._cbtype && opts._cbval) 
	{ 
		param += '&_cbtype=' + opts._cbtype; 
		param += '&_cbval=' + encodeURIComponent(opts._cbval); 
	}
	tb_show(null, url + param, null);
}

// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_showModalImg(img)
{
	lc_hideFlash();
	parent.tb_show(null, img, null);
}
	
// ------------------------------------

/**
 *	показываем страницу thinkbox
 */
function lc_closeModal()
{
	$("#map_canvas").css("z-Index", 10);
	lc_showFlash();
	tb_remove();
}

// ------------------------------------
// ------------------------------------

/**
 *	показываем ошибку flash
 */
function lc_panoramaError(errorCode) 
{
	if (errorCode == 603) 
	{
    	alert(locStr.error_flash);
        return;
    }
}

// ------------------------------------

/**
 *
 */
function lc_loadFact(ctry, city, p, pref)
{
	var pr = pref || 'city_desc';
	if(!pr) { pr = 'city_desc'; }
	
	var f = {};
	f.country_id = ctry;
	f.city_id = city;
	f.lang = langID;
	f.p = p;
	f.pref = pref ? pref : '';
	
	var data = ajax_postSContent("/tools/fact.load.php", 1, f);
	$("#"+pr+"_"+ctry+city).html(data);
}


// ------------------------------------
// ------------------------------------
// ------------------------------------
// ------------------------------------

