//var map;
var pc;
var iframe_wasopened = false;
//var clickedPixel; 
//var contextmenu;

var pages = {
    events: {
		ondataload: function(args) {
			if(!args) args = pages.events.ondataload_args;
			
			if(!pc.hash_suspend_mark) {
			}
			
			//console.log("Events: ", args);
			
			pc.hash_suspend_mark = false;
			pages.events.ondataload_end = true;
		},
		
		callback: function(args) {
			pc.reload_menu();
		   
			if(!pc.hash_suspend_mark) {
 			     //pc.show_left_content({value:args[0]}, pt_region_city_header);
			}

			if(!pc.getSI().ready) pc.hash_suspend_mark = false;
			pages.events.ondataload_args = args;
			
			pc.getSI().execute(args, pages.events.ondataload);
		}
	},
	templates : {callback: function(args) {
			pc.reload_menu();

			var mini_tabs = new TabManager();
			mini_tabs.addTab("tmp_mini_map_tab", "tmp_mini_map", function() { return; });
			mini_tabs.addTab("tmp_mini_events_tab", "tmp_mini_events", function() { return; });
			//mini_tabs.addTab("tmp_mini_comments_tab", "tmp_mini_comments", function() { return; });
		}
	},

	results : {callback: function(args) {
			pc.reload_menu();
			if(!iframe_wasopened) {
				document.getElementById("results_frame").src="/static/summer/index.html";
				iframe_wasopened = true;
			}
			//app.setTools("results");
		}
	},
	
	maps : {
		ondataload: function(args) {
			if(!args) args = pages.maps.ondataload_args;
			if(args.length && !(args[0] in pc.getSI().getDB("maps"))) args = [];
			
			//$("#maps_left").hide(); // - negalma daryti nes chrome tada praranda scollbrao pozicija

			var must_scroll = false;
			if(!pc.suspend_left_mark) {
				pc.show_left_content(Faces.render("#maps/index", args));
			    must_scroll = true;
			}
			else {
				pc.suspend_left_mark = false;
			}
			
			var mini_tabs = new TabManager();
			mini_tabs.addTab("mini_map_tab", "mini_map", function() { return; });
			mini_tabs.addTab("mini_events_tab", "mini_events", function() { return; });
			//mini_tabs.addTab("mini_comments_tab", "mini_comments", function() { return; });

			
			if(args.length) {
				pc.frame(0);
				show_img(args[0]);
			}
			else {
				expand_maplist();
				pc.frame(1);
			}
			
			//$("#maps_left").show();
			
			if(args.length && must_scroll) { // galim tik po to kai padarem .show();
				//console.log("Scroll: ", app.scroll);
				
				document.getElementById("maplist").scrollTop = 6 + (app.scroll) * 20;
			}

			app.setTools("maplist");
			document.getElementById("maps_menufront").innerHTML = app._count + " (" + (app._count/app._total*100).toFixed(1) + "%)";

			pc.hash_suspend_mark = false;
			pages.maps.ondataload_end = true;
		},

		callback: function(args) {
			pc.reload_menu();

			//console.log(pc.hash_suspend_mark);
			if (!pc.hash_suspend_mark) {
				if(args.length) {
					// atvaizduojamas statinis kontentas jeigu toks yra... arba loading...
				}
				if(!pc.getSI().ready) pc.hash_suspend_mark = false;
				pages.maps.ondataload_args = args;
				pc.getSI().execute(args, pages.maps.ondataload);
			}
			else {
				pc.hash_suspend_mark = false;
			}
		}
	},
	
    gis:{
		ondataload: function(args) {
			if(!args) args = pages.gis.ondataload_args;
			

			//if(args.length) {
				//if(!_demo) {
				//pc.frame(0);
				//pc.show_left_content(Faces.render("#maps/mapid", args));
				
				//var mini_tabs = new TabManager();
				//mini_tabs.addTab("mini_map_tab", "mini_map", function() { return; });
				//mini_tabs.addTab("mini_events_tab", "mini_events", function() { return; });
				//mini_tabs.addTab("mini_comments_tab", "mini_comments", function() { return; });
				//} else 
				//pc.frame(2);

				//show_img(args[0]);
			//} else {
			//	app.loadGmaps();
			//}
			app.updateGoogleMaps();
			
			pc.hash_suspend_mark = false;
			pages.gis.ondataload_end = true;
		},

		callback: function(args) {
			pc.reload_menu();
			

			if(pc.suspend_left_mark) {	pc.suspend_left_mark = false; }
			else if (!pc.hash_suspend_mark) {
				
				if(args.length) {
					// atvaizduojamas statinis kontentas jeigu toks yra... arba loading...
				}
				
				if(!pc.getSI().ready) pc.hash_suspend_mark = false;
				pages.gis.ondataload_args = args;
				pc.getSI().execute(args, pages.gis.ondataload);
			}
		}
	} 
};


function PageController(config) {
    this._temp = {}; // temporary data: search results, temporary data that could not be hardcoded to html, etc
	this.defaults = config.defaults;
    this.pages = config.pages;
	this.frame_control  = config.frame_control;
	this.menu = config.menu;
	this._window_url_stack = [];
	

	var domain = window.location.host;
	var domain_key = (domain.substr(0,4)== "www.")?domain.substr(4):domain;
	this.gmaps_config = (domain_key in config.gmaps)?config.gmaps[domain_key]:config.gmaps["default"];
	
};


PageController.prototype.window = function(arg) {
	// formos tam kad jos isimintu passwordus turi buti statines...
	if(!arg.html && arg.form) {
		$('#map-window .window_html').hide(); // sliapiam dinamishkam kontentui skirta lauka
		$('#map-window #' + arg.form).show(); // rodom statini kontenta...
	} else {
		$('#map-window .form').hide(); // sliapiam statini kontenta
		$('#map-window .window_html').html(arg.html || "").show(); // rodom dinamini
	}

    $('#map-window .b4').css({"background":arg.color});
    $('#map-window .b3').css({"background":arg.color});
    $('#map-window .b2').css({"background":arg.color});
    $('#map-window .bcontent2').css({"background":arg.color});
    $('#map-window .close_button').click(arg.onclose);

    $('#map-cover').css({ display:'block'});
    $('#map-window').css({display:'block', width:arg.width+"px", "margin-left":["-", Math.floor(arg.width/2) ,"px"].join(""), top:arg.top+"px"});
	pc._window_opened = true;
}

PageController.prototype.window_hide = function() {
    if(pc._window_opened) {
		$('#map-cover').css({ display:'none'});
		$('#map-window').css({ display:'none'});
		pc._window_opened = false;
	}
}
   
PageController.prototype.load = function() {
    this.init();
}

PageController.prototype.init = function() {
	this._lng = this.defaults.lng;
	this._i18n = {};
	this._current_page_name = "unknown_x";
	
	this._si = new StopsInfo();
	
	this.gscript_loaded = false;
	
	if(!_demo) {
	$.getJSON("/server/islogged", {},  
        function(json) {  
            if(json.status) {
				var email = getCookie("email");
				if(email) {
					var name = getCookie("name");
					var club = getCookie("club");
					pc.login_data = {email:email, name:name, club:club};
				}
			}
			pc.reload_login();
        }  
    );
	}

	this.pollHash();
}


PageController.prototype.getSI = function() {
	return this._si;
}

PageController.prototype.pollHash = function() {
    try{if(ieLoader){ieLoader();}}catch(e){}

    this.expectedHash = "";
	
	if (!window.location.hash) {
	    //this.hash(this.defaults.startpage?("#"+this.city+"/"+this.defaults.startpage):this.defaults.url);
	    this.hash(this.defaults.startpage?(this.defaults.startpage):this.defaults.url);
	}

    this.handleHistory();
    this.handle = window.setInterval("pc.handleHistory()", 500);
}


PageController.prototype.handleHistory = function() {

    if ((window.location.hash != this.expectedHash) || this._force_reload) {
		var todo = this.parse_url2(window.location.hash);

	    this.previousHash = this.expectedHash;
        this.expectedHash = window.location.hash;
        try{if(ieLoader){ifrnavt();}}catch(e){}
		
        this.open(todo);
    }
}

PageController.prototype.hash_suspend = function(window) {
	clearInterval(this.handle);
    this.handle = setInterval("pc.handleHistory()", 500);

    this.hash_suspend_mark = true;
	if(window && pc.expectedHash) {
	    pc._window_url_stack = [pc.expectedHash];
	}
}

/* forces reload of this page */
PageController.prototype.clearArgs = function(page_name) {
	delete this.pages[page_name].args 
}

PageController.prototype.getArgs = function(page_name) {
	if (page_name) 
	    return this.pages[page_name].args;
	
    return this.pages[this._current_page_name].args;
}

PageController.prototype.lng = function(lng) {
    //this._lng = lng;
	var todo = this.parse_url2(window.location.hash);
	
	var command = [];
	var args = todo.page;
	if(todo.args) {
	    args += (";" + todo.args);
	}
	command.push(args);
	
	//if (lng != this.defaults.lng) { // jei defaultine - tai nededame kalbos po slasho
	    command.push(lng);
	//}

	this.hash("#" + command.join("/"));
}

PageController.prototype.hash = function(hash, event) {
   if(!event) event = window.event
   if(event) event.cancelBubble=true
   if(event && event.stopPropagation) event.stopPropagation();
	
	window.location.hash = hash;
	this.handleHistory();
	//this.pages[]
}


PageController.prototype.setArgs = function(args) {
    this.pages[this._current_page_name].args = args;
}


// args: 0 - show both current frames, 1 - show left only, 2 - show right only
PageController.prototype.frame = function(code) {
    // jeigu zhemelapis ijungtas - tai reikia vykdyti 0 - bet gali buti, kad paskui tik bus show_right_contenet ishkviestas... THINK
	if(typeof code == "undefined") return this.pages[this._current_page_name]._frame;

    switch (code) {
	    case 0:
			this.change_class(this._current_page_name, "frame_lshow", "frame_rshow");
			break;
		case 1: 
		    this.change_class(this._current_page_name, "frame_max", "frame_hide");
			break;
		case 2:
			this.change_class(this._current_page_name, "frame_hide", "frame_max");
			break;
	}
	this.pages[this._current_page_name]._frame = code;
}


PageController.prototype.change_class = function(page_name, left, right) {
  var left_div = document.getElementById(page_name+"_left");
  var right_div = document.getElementById(page_name+"_right");
  left_div.className = left;
  right_div.className = right;
} 


PageController.prototype.upload_map = function() {
	pc.login(function() {
	    CDownloadUrl("get", "countries.txt", function (doc) {
			var html = Faces.render("#map_upload", {countries:doc.split("\n")});
				   
			pc.window({
				color:"#E0E6EC", width:415, top:100,
				html: html,
				onclose: function() { pc.window_hide() }
			});
		
			var map_upload_handler = new MapUpload("map_upload_form");
			$("#map_upload_form .mapupload_button").bind("click", function() {map_upload_handler.check_input()});
			$("#map_upload_form .countries").bind("change", function(x) {
				var region_title = $("#map_upload_form .region_title");
				var region_select = $("#map_upload_form .region");
				
				if(x.target.value == "LTU") {
					region_title.show(); region_select.show();
				}
				else {
					region_title.hide(); region_select.hide();
				}
			});
		});
	});
}

PageController.prototype.settings = function() {
	$.getJSON("/server/clubs", {},  
		function(json) {  
			if(!json.clubs || !pc.login_data) return;

			var html = Faces.render("#settings", {name:pc.login_data.name, email:pc.login_data.email, club:pc.login_data.club, clubs:json.clubs});

			pc.window({
				color:"#E0E6EC", width:450, top:50,
				html: html,
				onclose: function() { pc.window_hide() }
			});
	
			var settings_handler = new Settings("settings_form");
			$("#settings_form .settings_button").bind("click", function() {settings_handler.check_input()});
		}
	);
}

/* 
Ijungiam register langa - jeigu sekmingai isiregistina ijungiam login langa
*/
PageController.prototype.register = function() {
	if(this.login_data) { alert("You are already registered!"); return;}

	$.getJSON("/server/clubs", {},  
		function(json) {  
			if(!json.clubs) json.clubs = ['individualus'];
	
			var html = Faces.render("#register", {clubs:json.clubs});
			//var html = document.getElementById("register_template").innerHTML;
			//var html = "<div id='register_form'><input class='register_button' type='button' value='register'/>";//document.getElementById("login_template").innerHTML;

			pc.window({
				color:"#E0E6EC", width:370, top:50,
				html: html,
				onclose: function() { pc.window_hide() }
			});
	
			var register_handler = new Register("register_form");
			$("#register_form .register_button").bind("click", function() {register_handler.check_input()});
		}
	);
}


// jei be fn - tai tik parodome login window
PageController.prototype.login = function(fn) {
	//alert("login");
	function default_login(next) {
	    var email = $("#login_form .email").val();
		
		$.post("/server/login", { email:email, password: $("#login_form .password").val() },
			function(data){
				if(!data.status) {
					$("#login_form .server_error").show();
					//alert("Authentication failed!");
				}
				else {
					$("#login_form .server_error").hide();

					setCookie("email", data.email, 10);
					setCookie("name", data.name, 10);
					setCookie("club", data.club, 10);
					
					pc.login_data = {email:data.email, name:data.name, club:data.club};

					pc.reload_login();
					pc.window_hide();
					if(typeof next == "function") next();
				}
			}, "json");
			
	};
	
	function login_window() {
		//var html = document.getElementById("login_template").innerHTML.replace("login_form_template", "login_form");
		
		pc.window({
			color:"#E0E6EC", width:250, top:100,
			//html: html,
			form: "login_form",
			onclose: function() { pc.window_hide() }
		});
		
		$("#login_form .login_button").unbind("click").bind("click", (typeof fn == "function") ? function() {default_login(fn)} : default_login);
	}

	$.getJSON(  
        "/server/islogged",  
        {},  
        function(json) {  
            if(json.status) {
                if (typeof fn == "function") fn();
			}
			else {
			    login_window();
				//alert("this is a login form");
				//login_form(fn)
			}
        }  
    );
}

PageController.prototype.reload_login = function() {
	if(!_demo){
	if(!this.login_data) {
		$("#login_field").html("<a onclick='pc.login();'>login</a> | <a onclick='pc.register();'>register</a>");
	}
	else {
		$("#login_field").html(this.login_data.name + ": <a onclick='pc.settings()'>Settings</a> | <a onclick='pc.logout()'>Logout</a>");
	}
	}
}

PageController.prototype.logout = function() {
    $.getJSON("/server/logout");
	deleteCookie("email");
	deleteCookie("name");
	deleteCookie("club");
    delete this.login_data;
	this.reload_login();
}


PageController.prototype.show = function(page_name, args, lng) {
    //console.log("args: ", page_name, args, lng)
	var reload_page = true;

	// pasikete puslapis ir neijungtas hash_suspend tag'as tada reik perjungti tab'a 
	if((page_name != this._current_page_name) && (!this.hash_suspend_mark)) {
	 //     console.log("WTF: ", page_name, this._current_page_name, this._window_opened)
		    //document.getElementById(page_name).style.display = 'inline';
			var page_el = document.getElementById(page_name);
			if(page_el.style.visibility == "hidden") {
				page_el.style.visibility = 'visible';
			}
			else if(page_el.style.display=="none") {
				page_el.style.display = 'inline';
			}
			
	        /* aktyvuojame taba */
			var fakename = page_name;
			if(page_name == "map") fakename = "maps"; // naudojame ta pati tab'a
			
	        if(tab = document.getElementById(fakename + "_tab")) {
	            $style = tab.className.split(" ");
		        if ($style.indexOf("active") == -1) {
		            tab.className = $style.join(" ") + " active";
		        }
	        }
	}
	
	//console.log("new old: ", page_name,this._current_page_name, this.hash_suspend_mark);
    this._current_page_name = page_name;

	/*  duoti nauji argumentai */	
	if((typeof(args) != "undefined") && (args != this.getArgs())) {
		var split = args.split(";");

		if(split.length > 2) {
		     // argumentu siems puslapiams isiminti nereikia - nes tai window() layeriai - juos visada butina uzhdaryti su close.
			 // tuo tarpu #routesearch - atsidarius tab'a - nereiketu perkrauti ish naujo praejusios paieshkos.
		}
		else {
			//console.log(args, split.length);
			this.setArgs(args);
		}
	}
	/* jei argumentai lygus seniems - tai atstatome sena hasha  - puslapiu vartymo atveju*/ // dabar perdarius i hashpoll - praranda prasme (kodel..?)
	else if((typeof(args) != "undefined") && (args == this.getArgs())) {
	    //console.log("SET ARGS2: ", args);
	    //this.setArgs(this.getArgs()); // nematau prasmes
	    //this.suspend_left(false); // atejus ish direct_route buvo problemu, kai ta pati url gaudavome kelis kartus
		reload_page = false;
	}
	// nauji argumentai neduoti - tai arba naudojame senus arba paliekam tuschius
	else {
	    //this.setArgs(this.getArgs() || "");
	    //this.setArgs(this.getArgs() ? this.getArgs() : "");
	    //console.log("SET ARGS3: ", args, " *", this.getArgs(), "* " , this.hash_suspend_mark);
	}
	
	if (lng != this._lng) { // pasikeite kalba -> reikia page._lng
        this._lng = lng;
		reload_page = true; // net jeigu kiti argumentai ir ishliko nepakite - reiks perkrauti puslapi
		this.hash_suspend_mark = false; // force reload even then hashsuspend
    }
	else if(this.pages[page_name]._lng && (this.pages[page_name]._lng != this._lng)) {
		reload_page = true; // kitame puslapyje buvo pakeista kalba - todel shira irgi reiks perkrauti
	}
	
	
	var args_list = (args ? args.split(";") : []);
	
	if(this._force_reload) { // tas tavejis kai dar nedakrove visu resursu ir pereita i kita tab'a
	    reload_page = true;
		this._force_reload = false;
	}
	
	pc.window_hide(); // jeigu paspaude back mygtuka - reikia isjungti jeigu buvo ijungtas

    //console.log("show: ", page_name, args, lng, city, reload_page,this.hash_suspend_mark);
	
	if(this.pages[page_name].callback && reload_page) {
		this.load_language(function() {
			pc.pages[page_name].callback(args_list);
		});
	}
	else {
 	    //pc.window_hide();
	    this.hash_suspend_mark = false; 	// jeigu buvo iskviestas pc.hash_suspend();
	}
	
	this.pages[page_name]._lng = this._lng; // vartant puslapius pasikeitus kalbai senus puslapius reiks refreshinti
}


PageController.prototype.load_language = function(fnc) {
    if (this._lng in this._i18n) {
        fnc();
	}
	else {
	    //var pc = this;
	    CDownloadUrl("get", "common/translate/" + this._lng + ".txt", function (data) {
			pc._i18n[pc._lng] = eval('(' + data + ')');
            fnc();
		});
	}
}

PageController.prototype.hide = function(page_name) {
    /*document.getElementById(page_name).style.display = 'none';*/
	
	var page_el = document.getElementById(page_name);
	
	if(page_el.style.visibility) {
		page_el.style.visibility = 'hidden';
	}
	else if (page_el.style.display == "inline" || page_el.style.display == "") {
		page_el.style.display = 'none';
	}
	
	/* deaktyvuojame taba*/
	if(tab = document.getElementById(page_name + "_tab")) {
	    $style = tab.className.split(" ");
		tab.className = $style.filter(function(classname) {return classname != "active"}).join(" ");
	}
}



/* paliekam viena url:  1:http://   2: kaunas/#schedule/autobusai 3: #schedule/troleibusai  
    1: nukreipiam nauju url
    2: nukreipiam sugeneruojamu url
    3: jeigu neduoti argumentai (#schedule) - tai pasizhiurime, kokie argumentai buvo paduoti anksciau ir juos ikeliam i hasha
*/
PageController.prototype.open = function(todo) {
	if(!todo.page) {
	    todo = this.parse_url2(this.defaults.url);
    }

    if (!(todo.page in this.pages)) return; 
	
    for(var page in this.pages) {
        if(page != todo.page) {
			if(this.hash_suspend_mark) continue; // nieko nesliapiame jeigu buvo suspendas - nes dabar ant virsaus rodysim window()
	        this.hide(page);
		}
	}
	
    this.show(todo.page, todo.args, todo.lng); 
}
	
PageController.prototype.reload_footer = function() {
    var footer_html = ["<table><tr>",
	    (this.login_data && this.login_data.username) ? ["<td style=\"color:white;font-size:11px;cursor:pointer;\" onclick=\"pt_settings();\">", pc.i18n("lngWelcome") , ", ", this.login_data.firstname || "Firstname", " ", this.login_data.lastname || "Lastname", "!</td>",
		"<td><div class=\"footerButton\"><div class=\"footerButtonEnd\" onclick=\"pt_feedback();\"><a><div class=\"footerButtonStart\">", pc.i18n("lngFeedback"), "</div></a></div></div></td>",
        "<td><div class=\"footerButton\" onclick=\"pt_notifications();\"><div class=\"footerButtonEnd\"><a><div class=\"footerButtonStart\">", pc.i18n("lngNotifications"), "</div></a></div></div></td>",
		"<td><div class=\"footerButton\" onclick=\"pc.logout();\"><div class=\"footerButtonEnd\"><a><div class=\"footerButtonStart\">", pc.i18n("lngLogout"), "</div></a></div></div></td>"].join("") : ["<td><div class=\"footerButton\" onclick=\"pt_login_window();\"><div class=\"footerButtonEnd\"><a><div class=\"footerButtonStart\">", pc.i18n("lngLoginRegister"), "</div></a></div></div></td>"].join(""),
      "</tr></table>"].join("");

    //var subscription_input = document.getElementById("subscription_input");
    //subscription_input.innerHTML = this.login_data ? "Subscribed ("+this.login_data.username+")" : "Subscribe";
	  
	var footer = document.getElementById("footer");
	footer.innerHTML = footer_html;

}

var append_once = false; // testing ideas

/* in case then language is changed */
PageController.prototype.reload_menu = function() {
	
	/*
	var main_tabs = new TabManager();
	main_tabs.addTab("maps_tab", "maps", function() { return; });
	main_tabs.addTab("events_tab", "events");
	//main_tabs.addTab("news_tab", "news");
	main_tabs.addTab("results_tab", "results", function(tab, content) {
	    if(hass_class(tab, "active")) {
			document.getElementById("results_frame").src="file:///c:/src/trails/trails/static/summer/index.html"; 
	    }
	});
	*/

	/*
	if(!this._mini_tabs) {
		this._mini_tabs = new TabManager();
		this._mini_tabs.addTab("mini_map_tab", "mini_map", function() { return; });
		this._mini_tabs.addTab("mini_events_tab", "mini_events", function() { return; });
	}
	*/

   	var maps_input = document.getElementById("maps_tab");
   	//var maps_input = $("#maps_tab a")[0];
	
	maps_input.onclick = function() {
	    if(!pages.maps.ondataload_end) pc._force_reload=true;

		var args_str = pc.getArgs("maps");
		//console.log("args: ", args_str);
		
	    var url = pc.url({page:"maps", args:args_str?args_str.split(";"):[]});
	    //var url = pc.url({page:"maps", args:[]});
		pc.hash(url);
	}

   	var events_input = document.getElementById("events_tab");
	events_input.onclick = function() {
	    if(!pages.events.ondataload_end) pc._force_reload=true;
	    pc.hash(pc.url({page:"events", args:[]}));
	}

   	var gis_input = document.getElementById("gis_tab");
	gis_input.onclick = function() {
	    if(!pages.gis.ondataload_end) pc._force_reload=true;
	    pc.hash(pc.url({page:"gis", args:[]}));
	}

   	var results_input = document.getElementById("results_tab");
	results_input.onclick = function() {
	    if(!pages.results.ondataload_end) pc._force_reload=true;
	    pc.hash(pc.url({page:"results", args:[]}));
	}

   	var templates_input = document.getElementById("templates_tab");
	if(templates_input) {
		templates_input.onclick = function() {
			//if(!pages.results.ondataload_end) pc._force_reload=true;
			pc.hash(pc.url({page:"templates", args:[]}));
		}
	}
}

PageController.prototype.i18n = function(token) {
    return this._i18n[this._lng][token] || "";
}

PageController.prototype.in_i18n = function(token, value) {
	for(var lng in this._i18n) {
		if (this._i18n[lng][token] == value) return true;
	}
	return false;
}

function run_code() {
   if(typeof(MapManager) == "undefined") {
      setTimeout('run_code()', 200); // jis jau paleis run_onload
   }
   else {
      //NewCreateMap();
	  run_onload();
   }
}


run_onload = null;
var loadMap = function() {
   pc.gscript_loaded = true;

   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = 'common/js/map_source.js';
   document.body.appendChild(script);

   //setTimeout('NewCreateMap()', 200); // jis jau paleis run_onload
   setTimeout('run_code()', 200); // jis jau paleis run_onload
}

PageController.prototype.executeGMapCode = function(onload) {
	 var map_layer = $("#" + this._current_page_name + "_right .gmap")[0];
	 //document.getElementById(layer_name);
	 
	 if(!map_layer.innerHTML) map_layer.innerHTML = "<img style='position:absolute; left:46%; top:46%' src='common/images/loading.gif'/>";
	 map_layer.style.display = 'block';
	 
     run_onload = onload;
     if (this.gscript_loaded) {
	      onload();
	 }
	 else {
          var script = document.createElement("script");
          script.type = "text/javascript";
		  
          var lng = (this._lng == "est") ? "ee" : String(this._lng).substring(0, 2);
		  script.src = "http://maps.google.com/maps?file=api&v=2&hl=" + lng + "&key=" + this.gmaps_config.key + "&sensor=false&async=2&callback=loadMap";
          document.body.appendChild(script);
  	 }
}


// iskvieciamas tada kai nenorime kad pekeitus url butu perpiesta kaire puse
PageController.prototype.suspend_left = function(status) {
    this.suspend_left_mark = status;
}

PageController.prototype.suspend_right = function() {
    this.suspend_right_mark = true;
}


PageController.prototype.show_content = function(id, html, top_id) {
	var result_el = document.getElementById(id);
	if(top_id) {
	    var top_height = document.getElementById(top_id).offsetHeight;
	    result_el.style.top = top_height + 0 + "px";
	}
	if(result_el) {
		result_el.innerHTML = html;
	}

}

// kadangi nenorime perpieshineti kaires puses tai reikia kad nevykdytu jos html kodo generavimo
//PageController.prototype.show_left_content = function(args, func) {
PageController.prototype.show_left_content = function(html) {
	 //console.log("show_left_content! ", this.suspend_left_mark);
	 
	 if (this.suspend_left_mark) {
	     this.suspend_left_mark = false;
     }
	 else {
	     //this.show_left_content(func(si, args));
		 var left_el = document.getElementById(this._current_page_name + "_left");
		 //left_el.innerHTML = func(args);
		 left_el.innerHTML = html;
	 }
}

PageController.prototype.hide_map = function() {
    var container_map = document.getElementById(this._current_page_name + "_map");
    container_map.style.display = 'none'; // hide map
	this.remove_fc();
    this.map_visible = false;
}


PageController.prototype.show_right_content = function(args, func) {
    this.hide_map(); // in case if it was opened
	
    var container_rcontent = document.getElementById(this._current_page_name + "_rcontent");
    container_rcontent.style.display = 'block';

    if (args) {
        container_rcontent.innerHTML = func(args);
		this.has_rcontent(true);
	}
}


PageController.prototype.has_rcontent = function(status) {
    if (typeof(status) == "boolean") {
		this.pages[this._current_page_name].has_rcontent_sign = status;
	}
	return this.pages[this._current_page_name].has_rcontent_sign;
}

PageController.prototype.showGMapPoint = function(lat, lng) {
	 this.executeGMapCode(function() { 
		var stop_search_map = pc.getGMap();
		//stop_search_map.checkResize(); // jei zhemelapis buvo maximaizintas ir poto uzhdarytas
		stop_search_map.clearOverlays();
        stop_search_map.setCenter(new GLatLng(lat, lng), 14);
        stop_search_map.addOverlay(new GMarker(stop_search_map.getCenter()));
	});
}

PageController.prototype.url = function(config) {
    if (config.url) return config.url;
	
	var args = config.args ? config.args.slice() : [];

	return ("#" + config.page + ((args.length)?(";" + args.join(";")):"") + ((this._lng != this.defaults.lng) ? ("/" + this._lng) : ""));
}

/* paliekam viena url:  1:http://   2: kaunas/#schedule/autobusai 3: #schedule/troleibusai  */
PageController.prototype.parse_url2 = function(url) {
	var page = "";
	var args = [];
	
    var lng = this._lng || this.defaults.lng;	
	
    if(url.indexOf('#') != -1) {
	    var url_split = url.split("#");
		var args_split = url_split[1].split("/");
		var arg = args_split[0].split(";");
		
		page = arg[0] || "maps";
		
		if(arg.length>1) {
		    args = arg.slice(1);
		}
		
		if(args_split.length>1) {
		    var lng_arg = args_split[1];
			if (_lng.indexOf(lng_arg) != -1) lng = lng_arg;
		}
	}
	
	var rvalue = {page:page, args:args.join(";"), lng:lng};
	return rvalue;
}

PageController.prototype.set_maptoggle = function(state) {
   this.maptoggle_show = state;
}
PageController.prototype.get_maptoggle = function() {
   return this.maptoggle_show;
}

PageController.prototype.removeGMap = function() {
	if(this.map) {
	    var parentNode = this.map.parentNode;
		if(parentNode) {
			parentNode.removeChild(this.map);
		}
	}
}

PageController.prototype.getGMap = function() {
	var layer_name = this._current_page_name + "_right";
	var map_layer = $("#" + layer_name + " .gmap")[0];
	map_layer.style.display = 'block';

	if(this.map) {
		var parentNode = this.map.parentNode;
		
		if(parentNode != map_layer) {
		    parentNode.removeChild(this.map); // po shito map kabo ore
			this.remove_fc(); // paslepiame ir FC.
			// Chia butu galima atstatyti ir freimu bikle iki zhemelapio rodymo tame puslapyje kur ji shaliname
			// geriausi ishviso butu ishkviesti jo turima close callback'a
			
		    map_layer.innerHTML = "";
		    map_layer.appendChild(this.map);
		    this.map = map_layer.firstChild;
	    }

	    this.map_visible = true;
		return map;
		
	}
	else {
		//var map_layer = document.getElementById(this._current_page_name + "_map");
		//map_layer.style.display = 'block';
		
		var map_container = document.getElementById("map_container");
		map_container.style.display = 'block';
		
        map = new GMap2(map_container);
		
		var zoom = ("zoom" in this.gmaps_config) ? this.gmaps_config.zoom : 9;
	    map.setCenter(new GLatLng(this.gmaps_config.center.lat, this.gmaps_config.center.lng), zoom);
        
		map_layer.innerHTML = "";
		map_layer.appendChild(map_container);
		
		this.map = map_container;

	    this.map_visible = true;
		return map;
	}
}

