//function Faces2() {}
//Faces._templates = {};


function Faces() {}
Faces._data = {};
Faces._templates = {};

Faces.add = function(id, face) {
    face._id = id;
	Faces._data[id] = face;
}

Faces.get = function(id) {
    return Faces._data[id];
} 

Faces.getTemplate = function(face, tid) {
	var template_id = face._id + ":" + tid;
	
	if(!(template_id in Faces._templates)) {
	    var template = face.templates[tid];
		Faces._templates[template_id] = $p(template.html).compile(template.directive);
	}
	
	return Faces._templates[template_id];
}

Faces.render = function(id, args, args2) {
	if(!(id in Faces._data)) return "Face '" + id + "' not found";
	
	var face = Faces._data[id];
	if(typeof face.render == "function") {
		return face.render(args, args2);
	}
	else {
		alert("render function not found! " + id);
		/*
		var data = face.getdata(args);
		if(!(id in Faces._templates)) Faces._templates[id] = $p(face.template.element).compile(face.template.directive);
		return Faces._templates[id](data);
		*/
	}
	
}

Faces.add("#menu", {
	templates: {
		"menuitem_text": {html: "span.menuitem_text_template", directive: {".": "text", ".@class":"classname"}},
		"menuitem": {html: "a.menuitem_template", directive: {".": "text", ".@class":"classname", ".@onclick":"onclick"}},
		"menu": {html: "div.menu_template", directive: {".menu_front":"fronttext", ".menu_front@id":"id", ".menu_items":"menu_items"}}
	},
	render: function(args) {
		var menu_template =  Faces.getTemplate(this, "menu");
		var menuitem_template =  Faces.getTemplate(this, "menuitem");
		var menuitem_text_template =  Faces.getTemplate(this, "menuitem_text");
		
		var menu_html = [];
		var tools = args.menu_items;
		
		for(var i=0; i<tools.length; i++) {
			var tool_data = tools[i];
			//console.log(tool_data.onclick);
			
			var text = (tool_data.img?"<img src=\""+tool_data.img+"\" style=\"height: 15px; padding-right: 2px;\"/>":"") + tool_data.text;
			
			if(tool_data.onclick)
				menu_html.push(menuitem_template({"text":text, "classname": i?"tool":"", "onclick":tool_data.onclick}));
			else
				menu_html.push(menuitem_text_template({"text":text, "classname": i?"tool":""}));
		}
		
		return menu_template({menu_items:menu_html.join(""), fronttext:"", id:args.front_id});
	}
});


Faces.add("#maps/index", {
	getdata: function(args, sort) {
		//console.log("args: ", args);
		
		var prev_map_name = "";
		var samename_maps2 = []; 
		var maps = pc.getSI().getDB("maps");
		
		var sorted_maps = [];
		for(var id in maps) {
			sorted_maps.push(maps[id]);
		}

		function title_sort(a, b) {
			if(a.title != b.title) {
				return lt_locale.compare(a.title, b.title);
				//return a.title.toString().localeCompare(b.title);
			} 
			else {
				if(a.best_version || b.best_version) {
					return a.best_version?-1:1;
				}
				else return -text_sort(a.year, b.year);
			}
		}
		
		switch(sort) {
			case "1": // regiona
				sorted_maps.sort(function(a, b) {
					return lt_locale.compare(a.region, b.region) || title_sort(a, b);
				})
				break;
			case "2": // metus
				sorted_maps.sort(function(a, b) {
					return text_sort(a.year, b.year) || title_sort(a, b);
				})
				break;
			case "3": // nr
				sorted_maps.sort(function(a, b) {
					var nr1 = parseInt(a.nr, 10);
					var nr2 = parseInt(b.nr, 10);

					if(!isNaN(nr1) && !isNaN(nr2)) {
						return nr1 - nr2;
					}
					else if(isNaN(nr1) && isNaN(nr2)) return 0;
					else return isNaN(nr1) ? -1 : 1;
				})
				break;
			default:
				sorted_maps.sort(title_sort);
		}
		
		//console.log(sorted_maps);

		var data_list = [];
		for(var i=0; i<sorted_maps.length; i++) {
			var id = sorted_maps[i].id;
			var map_name = sorted_maps[i].title;
	   
			if((prev_map_name == "") || (map_name == prev_map_name)) {
				samename_maps2.push(id);
			}
			else {
				data_list.push(samename_maps2);
				samename_maps2 = [id];
			}
			prev_map_name = map_name;
		}
		data_list.push(samename_maps2);
		return data_list;
	},
	templates: {
		"map_list_table2": {
			html: "div.map_index_template", 
			directive: {
				".@id": "id",
				".header_title":"header_title", 
				".header_region":"header_region", 
				".header_year":"header_year", 
				".header_id":"header_id", 
				".header_scale":"header_scale", 
				".header_contour":"header_contour", 
				".header_author":"header_author",
				".header_scale@class":"showhide", 
				".header_contour@class":"showhide", 
				".header_author@class":"showhide",
				".rows@class": "hide",
				".map_rows":"map_rows_html"
			}
		},
		"map_list_row2": {
			html: "tr.map_index_row_template",
			directive: {
				".@class": "row_class",
				".@style": "row_style",
				".@id": "row_id",
				".@title": "row_title",
				".@onmouseout": "row_onmouseout",
				".row_toggle@onclick": "row_toggle_click",
				".row_toggle@src": "row_toggle_img",
				".row_toggle@class": "row_toggle_class",
				".hash_link@onclick": "hash_link_click",
				".map_link": "map_name",
				".map_region": "map_region",
				".map_nr": "map_nr",
				".map_year": "map_year",
				".map_scale": "map_scale",
				".map_contour": "map_contour",
				".map_author": "map_author",
				".map_nr@class": "showhide",
				".map_contour@class": "showhide",
				".map_author@class": "showhide",
				".gmap_button@onclick": "gmap_click",
				".gmap_button@src": "gmap_src",
				".gmap_button@onmouseout": "mouseout",
				".title_cell@style": "overflowhide"
			}
		}/*,
		"map_info2": {
			html: "div.map_index_info_template",
			directive: {
				".@id":"id",
				".minimap_tab": "minimap_tab",
				".minievents_tab": "minievents_tab",
				".minicomments_tab": "minicomments_tab",
				"#tmp_mini_map_tab@id" : "mini_map_tab_id",
				"#tmp_mini_events_tab@id" : "mini_events_tab_id",
				"#tmp_mini_comments_tab@id" : "mini_comments_tab_id",
				"#tmp_mini_map@id": "mini_map_id",
				"#tmp_mini_events@id": "mini_events_id",
				"#tmp_mini_comments@id": "mini_comments_id",
				".info_close@onclick": "info_close_click"
			}
		}*/
	},
	render: function(args, sort) {
		//console.log("render...", args, sort, pc.frame());
		
		var data = this.getdata(args, sort);
		var maps = pc.getSI().getDB("maps");
		//var expand = false;

		var map_list_template = Faces.getTemplate(this, "map_list_table2");
		var map_row_template = Faces.getTemplate(this, "map_list_row2");
		//var map_info_template = Faces.getTemplate(this, "map_info2");
		
		/*
		var mapinfo_html = Faces.getTemplate(this, "map_info2")({
				"id":"mapinfo",
				"minimap_tab": "Zemelapis",
				"minievents_tab": "Trasos",
				"minicomments_tab": "Komentarai (x)",
				"mini_map_tab_id": "mini_map_tab",
				"mini_events_tab_id": "mini_events_tab",
				"mini_comments_tab_id": "mini_comments_tab",
				"mini_map_id": "mini_map",
				"mini_events_id": "mini_events",
				"mini_comments_id": "mini_comments",
				"info_close_click": "closeMapInfo(this, 'maplist', 'mapinfo')"
		});*/
		app._count = 0;
		app._total = 0;
		
		var scroll = 0;
		var map_rows = [];
		for(var i=0; i<data.length; i++) {
			var ids = data[i];
			var classname = ((i%2)?"odd":"even");
			
			var expand = true;
			var index = -1;
			if(args && args.length) {
				index = ids.indexOf(args[0]);
				if (index != -1) {
					expand = true;
				}
			}

			if(!expand) scroll += 1;
			else scroll += ids.length;
			
			for(var j=0; j<ids.length; j++) {
				
				var map = maps[j];
				
				var expand_collapse = ((ids.length>1) && (j==0))? {
										onclick: ((expand)?"collapse":"expand")+"(this, 'map2_', ["+ ids.slice(1).join(",") +"])", 
										img: "common/css/images/"+((expand)?"collapse":"expand")+".gif"} : {onclick:"", img:""};
				
				var map_id = ids[j];
				var map_data = maps[map_id];
				
				if(map_data.rotate) {
					app._count += 1;
				}
				app._total += 1;
				
				//console.log(map_data.bounds);
				
				
				//console.log("args: ", args);
				map_rows.push(map_row_template({
								row_style: (!expand && (ids.length>1) && (j!=0)) ? "display:none;" : "",
								row_id: "map2_" + map_id,
								//row_title: map_data.author,
								row_onmouseout: "this.className='" + classname + "'",
								row_class: classname,
								row_toggle_click: expand_collapse.onclick,
								row_toggle_img: expand_collapse.img,
								row_toggle_class: expand_collapse.img ? "row_toggle" : "hide",
								hash_link_click: "pc.suspend_left(true);app.loadMapInfo("+ map_id +", this.parentNode); pc.hash('" + pc.url({page:"maps", args:[map_id]}) + "')",
								map_name: map_data.title,
								map_region: map_data.region || "",
								map_year: map_data.year,
								map_nr: (map_data.nr || "") + "&nbsp;" + (map_data.rotate? "": ((!map_data.bounds) ? "!":"@")), //map_data.nr,
								map_scale: (!isNaN(+map_data.scale)) ? (+map_data.scale/1000)+"k" : "",
								map_contour: map_data.contour || "",
								map_author: map_data.author || "",
								showhide: args.length?"hide":"", //(pc.frame() == 0)?"hide":"",
								gmap_click: "app.addGoogleMap(" + map_id + ")",
								gmap_src: (map_id in app._tools_maps) ? "common/images/earth_on.png" : "common/images/earth_off.png",
								mouseout: "this.src=app.loaded("+ map_id +")?'common/images/earth_on.png':'common/images/earth_off.png'",
								overflowhide: (pc.frame() == 0)?"width:150px":""
							}));
							
				if(args && args.length && args[0]==map_id) {
					map_rows.push("<tr id='fastinfo' class='" + classname + "'><td colspan='9'>" + Faces.render("#maps/mapinfo", map_id) + "</td></tr>");
					
					scroll -= (ids.length-1);
					app.scroll = scroll;
					//map_rows.push("<tr class='" + classname + "'><td colspan='9'>" + document.getElementById("map_info_template").innerHTML + "</td></tr>");
				}
			}
		}
		
	
		return map_list_template({id:"maplist", 
									header_title:"Pavadinimas", 
									header_author:"Autoriai", 
									header_region:"Rajonas", 
									header_year:"Metai", 
									header_id:"Nr",
									header_scale:"M1:",
									header_contour:"H",
									hide:"hide", 
									showhide:(pc.frame() == 0)?"hide":"", 
									map_rows_html:map_rows.join("")
								});// + mapinfo_html;
	}
});

/*
Faces.add("#maps/index", {
	getdata: function(args) {
		var maps = pc.getSI().getDB("maps");

		var maps_data = [];
		for(var id in maps) {
			var map_data = maps[id];
			var map_name = map_data.title;
	   
			var item = {url:pc.url({page:"map", args:[id]}), name:map_name};
			if(id == "2") item.test = "xxx";
			maps_data.push(item);
		}
		return maps_data;
	},
	templates: {
		"map_item": {html: "div.map_index_template", directive: {".map_item":"name", ".map_item@href":"url", ".map_item@title":"test"}}
	},
	render: function(args) {
		var template = Faces.getTemplate(this, "map_item");
		var data = this.getdata(args);
		 
		var html = data.map(function(x) {return template(x);});
		return html.join("");
	}
});
*/
	/*
	template: {
		element: "div.map_index_template",
		directive: {".map_item": {'map<-context': {
						"a":"map.name", 
						"a@href":"map.url",
						"a@title": function(ctx) {return ctx.item.test || "unknown"}
		}}}
	}*/



Faces.add("#settings", {
	templates: {
		"settings_window": {
			html: "#settings_template",
			directive: {
				".displayName@value": "name",
				".emailAddress@value": "email",
				".clublist":"options"
			}
		}
	},
	render: function(args) {
		var options = []
		for(var i=0; i<args.clubs.length; i++) {
		    var club = args.clubs[i];
			options.push('<option' + ((args.club == club)?" selected=''>":">") + club + '</option>');
		}
		args.options = options;

	    var settings_template = Faces.getTemplate(this, "settings_window");
		
		return settings_template(args);
	}
});



Faces.add("#map_upload", {
	templates: {
		"map_upload_window": {
			html: "#mapupload_template",
			directive: {
				".countries": "countries",
				".region": "regions",
				".map_upload_form@id" : "form_id"
			}
		}
	},
	render: function(args) {
		var options = []
		for(var i=0; i<args.countries.length; i++) {
		    var c = args.countries[i].trim().split(";");
			var select = (c[0] == "LTU");
			options.push('<option value="' + c[0] + '"' + (select?' selected="true"':'') + '>' + c[1] + '</option>');
			
			if(select) {
				var regions = c[2].split("#").map(function(x) {return "<option" + ((x=="Vilnius")?" SELECTED":"") + ">" + x + "</option>"});
				args.regions = regions;
			}
		}
		args.countries = options;
		args.form_id = "map_upload_form";

	    var map_upload_template = Faces.getTemplate(this, "map_upload_window");
		return map_upload_template(args);
	}
});


Faces.add("#register", {
	templates: {
		"register_window": {
			html: "#register_template",
			directive: {
				".clublist":"options"
			}
		}
	},
	render: function(args) {
		var options = []
		for(var i=0; i<args.clubs.length; i++) {
		    var club = args.clubs[i];
			options.push('<option' + ((club == 'individualus')?" selected=''>":">") + club + '</option>');
		}
		args.options = options;

	    var register_template = Faces.getTemplate(this, "register_window");
		
		return register_template(args);
	}
});


Faces.add("#maps/mapinfo", {
	templates: 	{
		"map_info": {
			html: "div.map_info_template",
			directive: {
				".@id":"id",
				".minimap_tab": "minimap_tab",
				".minievents_tab": "minievents_tab",
				//".minicomments_tab": "minicomments_tab",
				"#tmp_mini_map_tab@id" : "mini_map_tab_id",
				"#tmp_mini_events_tab@id" : "mini_events_tab_id",
				//"#tmp_mini_comments_tab@id" : "mini_comments_tab_id",
				"#tmp_mini_map@id": "mini_map_id",
				"#tmp_mini_events@id": "mini_events_id",
				"#tmp_mini_comments@id": "mini_comments_id",
				".title_val": "title",
				".nr_val": "nr",
				".scale_val" : "scale",
				".contour_val" : "contour",
				".author_val" : "author",
				".description_val" : "description",
				".description_row@class" : "description_row_class",
				".best_version@checked": "best_version",
				".region_val" : "region",
				".country_val" : "country",
				".year_val":"year",
				".edit@onclick": "edit",
				".cancel@onclick": "cancel",
				".save@onclick": "save",
				".remove@onclick": "remove",
				".mapinfo_edit_form@id": "form_id"
				//,".info_close@onclick": "info_close_click" 
			}
		}
	},
	render: function(id) {
		var maps = pc.getSI().getDB("maps");
		var map_data = maps[id];

	
		var mapinfo_html = Faces.getTemplate(this, "map_info")({
				"id":"mapinfo",
				"minimap_tab": "Å½emÄ—lapis",
				"minievents_tab": "Trasos",
				"minicomments_tab": "Komentarai (3)",
				"mini_map_tab_id": "mini_map_tab",
				"mini_events_tab_id": "mini_events_tab",
				"mini_comments_tab_id": "mini_comments_tab",
				"mini_map_id": "mini_map",
				"mini_events_id": "mini_events",
				"mini_comments_id": "mini_comments",
				"title": map_data.title,
				"nr": map_data.nr,
				"scale" : map_data.scale? ("1:"+map_data.scale):"",
				"contour" : map_data.contour,
				"author" : map_data.author,
				"description" : map_data.description,
				"description_row_class" : map_data.description ? "" : "description_row hide",
				"best_version" : map_data.best_version || "",
				"country" : map_data.country || "LTU",
				"region" : map_data.region,
				"year": map_data.year,
				"edit": "app.editMapInfo(" + map_data.id + ")",
				"cancel": "app.updateMapInfo(" + map_data.id + ")",
				"save": "app.saveMapInfo(" + map_data.id + ")",
				"remove": "app.removeMap(" + map_data.id + ")",
				"form_id": "mapinfo_edit_form"
				//,"info_close_click": "closeMapInfo(this, 'maplist', 'mapinfo')"
		});
		return mapinfo_html;

	}
});


Faces.add("#tools/maplist", {
	/*
	getdata: function(args) {
		var prev_map_name = "";
		var samename_maps2 = []; 
		//alert(typeof pc + " " + typeof pc.getSI().getDB);
		var maps = pc.getSI().getDB("maps");
	
		var data_list = [];
	
		for(var id in maps) {
			var map_name = maps[id].title;
	   
			if((prev_map_name == "") || (map_name == prev_map_name)) {
				samename_maps2.push(id);
			}
			else {
				data_list.push(samename_maps2);
				samename_maps2 = [id];
			}
			prev_map_name = map_name;
		}
		data_list.push(samename_maps2);
		return data_list;
	},
	*/
	templates: {
		"map_list_table": {
			html: "div.map_list_template", 
			directive: {
				".@id": "id",
				".header_title":"header_title", 
				".header_year":"header_year", 
				".header_scale":"header_scale", 
				".row@class": "hide",
				".gmap_rows":"map_rows_html"
			}
		},
		"map_list_row": {
			html: "tr.map_row_template",
			directive: {
				".@class": "row_class",
				".@style": "row_style",
				".@id": "row_id",
				//".@title": "row_title",
				".@onmouseout": "row_onmouseout",
				".row_toggle@onclick": "row_toggle_click",
				".row_toggle@img": "row_toggle_img",
				".row_toggle@class": "row_toggle_class",
				//".map_link@onclick": "map_click",
				//".map_link@href": "map_href",
				".map_link": "map_name",
				".map_year": "map_year",
				".map_scale": "map_scale",
				".map_toggle@onclick": "gmap_click",
				".map_toggle@checked": "gmap_show",
				".@onclick": "bring2front_map",
				".center_button@onclick": "center_map",
				".remove_button@onclick": "remove_map",
				".map_image@onclick": "map_image_click",
				".map_image@onmouseover": "map_image_mouseover",
				".map_locate@onclick": "map_locate_click",
			}
		}/*,
		"map_info": {
			html: "div.map_info_template",
			directive: {
				".@id":"id",
				".minimap_tab": "minimap_tab",
				".minievents_tab": "minievents_tab",
				".minicomments_tab": "minicomments_tab",
				"#tmp_mini_map_tab@id" : "mini_map_tab_id",
				"#tmp_mini_events_tab@id" : "mini_events_tab_id",
				"#tmp_mini_comments_tab@id" : "mini_comments_tab_id",
				"#tmp_mini_map@id": "mini_map_id",
				"#tmp_mini_events@id": "mini_events_id",
				"#tmp_mini_comments@id": "mini_comments_id",
				".info_close@onclick": "info_close_click" 
			}
		}*/
	},
	render: function(args) {
		//var data = this.getdata(args);
		var maps = pc.getSI().getDB("maps");
		var expand = true;

		var map_list_template = Faces.getTemplate(this, "map_list_table");
		var map_row_template = Faces.getTemplate(this, "map_list_row");
		//var map_info_template = Faces.getTemplate(this, "map_info");
		
		/*
		var mapinfo_html = Faces.getTemplate(this, "map_info")({
				"id":"mapinfo",
				"minimap_tab": "Zemelapis",
				"minievents_tab": "Trasos",
				"minicomments_tab": "Komentarai (x)",
				"mini_map_tab_id": "mini_map_tab",
				"mini_events_tab_id": "mini_events_tab",
				"mini_comments_tab_id": "mini_comments_tab",
				"mini_map_id": "mini_map",
				"mini_events_id": "mini_events",
				"mini_comments_id": "mini_comments",
				"info_close_click": "closeMapInfo(this, 'maplist', 'mapinfo')"
		});
		*/

		var map_rows = [];
		//for(var i=0; i<data.length; i++) {
		var i = 0;
		for(var map_id in args.maps) {
			var map_data = maps[map_id];
			var classname = ((i%2)?"odd":"even");
			
			var expand_collapse = {onclick:"", img:""};
				
				
			map_rows.push(map_row_template({
								row_style: "",
								row_id: "map_" + map_id,
								row_title: map_data.title,
								row_onmouseout: "this.className='" + classname + "';", // $(this).find('.map_image').hide();",
								row_class: classname,
								row_toggle_click: expand_collapse.onclick,
								row_toggle_img: expand_collapse.img,
								row_toggle_class: expand_collapse.img ? "row_toggle" : "hide",
								//map_click: "pc.suspend_left(true);show_img(" + map_id + ")",
								//hash_link_click: "pc.suspend_left(true);pc.hash('" + pc.url({page:"maps",[map_id]}) + "')",
								//map_href: pc.url({page:"tools", args:[map_id]}),
								map_name: map_data.title,
								map_year: map_data.year,
								map_scale: (!isNaN(+map_data.scale)) ? (+map_data.scale/1000)+"k" : "",
								gmap_click: "app.loadGMap(" + map_id + ", true, event)",
								center_map: "app.centerGMap(" + map_id + ", false, event)",
								bring2front_map: "app.centerGMap(" + map_id + ", true, event)",
								gmap_show: args.maps[map_id].visible ? "true": "",
								remove_map: "app.removeGoogleMap(" + map_id + ", false, event)",
								map_image_click : "pc.hash('"+ pc.url({page:"maps", args:[map_id]})+"', event);",
								map_image_mouseover: "app.showMapInfoBaloon('" + map_id + "', this, event)",
								map_locate_click: "app.locateGoogleMap(" + map_id + ", event)"
			}));
			i++;
		}
		
		return map_list_template({id:"tools_maplist", header_title:"Pavadinimas", header_year:"Metai", header_scale:"M1:",
								  hide:"hide", map_rows_html:map_rows.join("")}); // + mapinfo_html;
	}
});

function pt_close_button() {
    return "<span class=\"close_label\" onclick=\"pc.window_hide()\"><img src=\"common/images/close.png\"></span>";
}


function check(cb) {
    if(cb.checked == true) {
	    //console.log("CHECKED! ", maps[cb.value]);
		var map_data = maps[cb.value];
		var map_link = "maps/" + map_data.img.file;
		if(_demo) map_link = "/static/images/maps/" + map_data.file;
        var map_canvas = document.getElementById("map_canvas");
		map_canvas.innerHTML = ["<img src=\"", map_link, "\" width=\"", map_data.img.width ,"\" height=\"", map_data.img.height, "\"/>"].join("");

	    //cb.onclick = function() { console.log("CHECKED!"); }; 
	}
	else {
	    //console.log("UNCHECKED!", maps[cb.value]);
	}
}



function expand(button, key, map_ids) {
   //console.log("EXPAND!!!!");
    button.src = "common/css/images/collapse.gif";
	button.onclick = function() { collapse(button, key, map_ids); };
    for(var i=0;i<map_ids.length;i++) {
	    var el = document.getElementById(key + map_ids[i]);
		el.style.display = "table-row";
	}
}

function collapse(button, key, map_ids) {
    button.src = "common/css/images/expand.gif";
	button.onclick = function() { expand(button, key, map_ids); };
	
    for(var i=0;i<map_ids.length;i++) {
	    var el = document.getElementById(key + map_ids[i]);
		el.style.display = "none";
	}
}

function closeMapInfo(button, extend, hide) {
    var container = button.parentNode.parentNode.parentNode;
	if(container) container.style.display = "none";
    
	if(extend) {
		var map_list = document.getElementById(extend); // map_list
		if(map_list) map_list.style.height = "100%";
	}

	if(hide) {
		var map_info = document.getElementById(hide);
		if(map_info) map_info.style.display = "none";
	}
}

function MyForm(id) {
    this.id = id;

    this.check_field = function(field, error_div) {
        var value = $("#" + this.id + " ." + field).val();
		var obj = $("#" + this.id + " ." + error_div)[0];
	    return (obj.style.display = (value == '') ? "" : "none");
    }

    this.check_number = function(field, error_div) {
        var value = parseFloat($("#" + this.id + " ." + field).val());
		var obj = $("#" + this.id + " ." + error_div)[0];
	    return (obj.style.display = isNaN(value) ? "" : "none");
    }

    this.check_range = function(field, range, error_div) {
	    var value = parseInt($("#" + this.id + " ." + field).val(), 10);
		var obj = $("#" + this.id + " ." + error_div)[0];
	    return (obj.style.display = (!isNaN(value) && value>=range[0] && value <= range[1]) ? "none" : "");
    }
	
	this.check_whitespace = function(field, error_div) {
		var obj = $("#" + this.id + " ." + error_div)[0];

		var x = $("#" + this.id + " ." + field).val();
        if (!x) return false;
        return (obj.style.display = ((x.slice(0,1) ==' ') || (x.slice(-1) ==' ')) ? "": "none");
    }

    this.checkMail = function(field, error_div) {
		var obj = $("#" + this.id + " ." + error_div)[0];

		var x = $("#" + this.id + " ." + field).val();
        if (!x) return false;  
        var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		return (obj.style.display = (!filter.test(x)) ? "" : "none");  
	}

    this.check_passwords = function(field1, field2, error_div) {
		var obj = $("#" + this.id + " ." + error_div)[0];
		return (obj.style.display = ($("#" + this.id + " ." + field1).val() != $("#" + this.id + " ." + field2).val()) ? "" : "none");
    }
}

Settings.prototype = new MyForm; 

function Settings(id) {
    this.id = id;

    function settings() {
		window.setTimeout(function() {
			var result = false;
			//var result = {login:"petras"};
			
			if(!result) alert("Correct Errors!");
			else {
				$("#settings_template").html("Pakeitimai iðsaugoti");
			}
			
		},10);
	}

    this.check_input = function() {
        rvalue = true;

        if (!this.check_field("password", "empty_pass1"))
            rvalue = false;
        if ($("#" + this.id + " .new_pass").val()) {
            if (!this.check_passwords("new_pass", "new_pass2", "noequal"))
                 rvalue = false;
        }
		if (!this.check_field("displayName", "empty_displayName"))
            rvalue = false;
		if (!this.check_whitespace("displayName", "whitespace"))
            rvalue = false;
        if (!this.check_field("emailAddress", "empty_emailAddress"))
            rvalue = false;
        if (!this.checkMail("emailAddress", "incorrect_emailAddress"))
            rvalue = false;
		if(rvalue) settings();
    }
}


Register.prototype = new MyForm; 

function Register(id) {
    this.id = id;

    function register() {
		//window.setTimeout(function() {
		//var result = false;$("#developer option:selected");
	    var club = $('#clublist').is(':visible') ? $('#clublist .clublist option:selected').text() : $('#newclub .club').val();
		
		$.post("/server/register", { email: $("#register_form .email").val(), 
								  name: $("#register_form .name").val(),
								  club: club,
								  password: $("#register_form .password1").val()
								  },
			function(data){
				if(!data.status) {
				    $("#register_form .servererror").show();
				}
				else {
				    if(data.status == 3) {
					    $("#register_form .dublicate_email").show();
					}
					else if(data.status == 1) {
						$("#register_form").html("You have succesfully registered and could <a class='link' onclick='pc.login()'>login</a> now.");
					}
				}
			}, 
			"json"
		);
	}

	this.check_input = function() {
        rvalue = true;

        $("#register_form .dublicate_email").hide(); // hide if response form server was sent
        $("#register_form .servererror").hide(); // hide if response form server was sent
		
        if (!this.check_field("password1", "empty_pass1"))
             rvalue = false;
        if (!this.check_field("password2", "empty_pass2"))
             rvalue = false;
        if (!this.check_passwords("password1", "password2", "noequal"))
             rvalue = false;
        if (!this.check_field("name", "empty_displayName"))
             rvalue = false;
        if (!this.check_whitespace("name", "white_displayName"))
             rvalue = false;
        if (!this.check_field("email", "empty_emailAddress"))
             rvalue = false;
        if (!this.checkMail("email", "incorrect_emailAddress"))
             rvalue = false;
        
		if(rvalue) register();
	}
}

MapUpload.prototype = new MyForm; 
function MapUpload(id) {
    this.id = id;

    function mapupload() {
		//starting setting some animation when the ajax starts and completes
		$("#map_upload_form .loading").ajaxStart(function(){
			$(this).show();
		})
		.ajaxComplete(function(){
			$(this).hide();
		});
		
		var args = {title:$("#map_upload_form .title").val(), 
					author:$("#map_upload_form .author").val(), 
					year:$("#map_upload_form .year").val(),
					country:$('#map_upload_form .countries option:selected').val(),
					scale:$('#map_upload_form .scale').val(),
					contour:$('#map_upload_form .contour').val(),
					nr:$('#map_upload_form .nr').val(),
					description:$('#map_upload_form .description').val()
					};
					
		if($('#map_upload_form .region').is(':visible')) args["region"] = $('#map_upload_form .region option:selected').text();  				
		if($('#map_upload_form .best_version').is(':checked')) args["best_version"] = true;

		$.ajaxFileUpload ({
			url:'/server/mapupload',
			secureuri:false,
			fileElementId:'mapfile_upload',
			ppost : args,
			dataType: 'json',
			success: function (data, status) {
				if(data.status == 1) { 
					//alert("OK - must reload maps index now");
					//pc.getSI().load(data.id, function(id) { pc.hash(pc.url({page:"maps", args:[id]})); });
					
					pc.hash(pc.url({page:"maps", args:[data.id]})); // atidarom naujo zhemelapio lapa (kolkas tuscia)
					location.reload(true); // - true nenaudoti kesho
					
					//pc.window_hide();
				}
				else {
					//alert("error bla bla bla: " + data.status);
					$("#map_upload_form .error" + data.status).show();
				}
			},
			error: function (data, status, e) {
				alert(e);
			}
		});
		
		return false;
	}

    this.check_input = function() {
        rvalue = true;

		$("#map_upload_form .server_error").css({"display":"none"});
        
        if (!this.check_field("mapfile", "empty_file"))
            rvalue = false;
        if (!this.check_field("title", "empty_title"))
            rvalue = false;

        if ($("#" + this.id + " .year").val()) {
            if (!this.check_range("year", [1900, 2100], "year_error"))
                 rvalue = false;
        } else $("#" + this.id + " .year_error").hide();
		
        if ($("#" + this.id + " .scale").val()) {
            if (!this.check_number("scale", "scale_error"))
                 rvalue = false;
        } else $("#" + this.id + " .scale_error").hide();

        if ($("#" + this.id + " .contour").val()) {
            if (!this.check_number("contour", "contour_error"))
                 rvalue = false;
        } else $("#" + this.id + " .contour_error").hide();
        
		if(rvalue) mapupload();
    }
}

