/* Nacteni prisluneho regionu ke statu*/
SZN.CountrySelect = SZN.ClassMaker.makeClass({
	NAME: "CountrySelect",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.CountrySelect.prototype.$constructor = function(sel1,sel2,sel3) {
	this.sel1 = SZN.gEl(sel1.id);
	this.url1 = sel1.url;
	this.firstEntry1 = sel1.firstEntry;

	this.sel2 = SZN.gEl(sel2.id);
	this.url2 = sel2.url;
	this.firstEntry2 = sel2.firstEntry;

	this.sel3 = SZN.gEl(sel3);
	
	this.sel2 = SZN.gEl(sel2.id);
	this.url2 = sel2.url;

	SZN.Events.addListener(this.sel1 , 'change', this, '_change1');
	SZN.Events.addListener(this.sel2 , 'change', this, '_change2');		
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
}

SZN.CountrySelect.prototype._change1 = function(e, elm) {
	this.add = this.sel2; 
	this.ajax(this.url1,elm.value);	
}

SZN.CountrySelect.prototype._change2 = function(e, elm) {	
	this.add = this.sel3; 
	this.ajax(this.url2,elm.value);		
}

SZN.CountrySelect.prototype.ajax = function(url,value) {
	var fullUrl = url+"&id="+value+"&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_response");
}

SZN.CountrySelect.prototype._response = function(txt, status) { 			
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {		
			
			var opt = SZN.cEl("option");
			opt.value = 0;
			
			if (this.add == this.sel2){
				SZN.Dom.clear(this.sel2);
				SZN.Dom.clear(this.sel3);
				this.sel2.disabled = false;	
				this.sel3.disabled = true;	
				opt.innerHTML = this.firstEntry1;
			}
			else {
				this.sel3.disabled = false;
				SZN.Dom.clear(this.sel3);
				opt.innerHTML = this.firstEntry2;	
			}
						
			this.add.appendChild(opt);
				
			for (var i=0;i<response.length;i++) {
				var values = response[i];
				var opt = SZN.cEl("option");
				opt.value = values[0];
				opt.innerHTML = values[1];
				this.add.appendChild(opt);
			}	
		}
		else {
			if (this.add == this.sel2){
				SZN.Dom.clear(this.sel2);
				SZN.Dom.clear(this.sel3);
				this.sel2.disabled = true;
				this.sel3.disabled = true;
			}
			else {
				SZN.Dom.clear(this.sel3);	
				this.sel3.disabled = true;
			}
		}
	}
}

/* Nacteni polozek do selectu podle vyberu v jinem selectu */
SZN.LoadSelect = SZN.ClassMaker.makeClass({
	NAME: "LoadSelect",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.LoadSelect.prototype.$constructor = function(sel1,sel2,firstEntry,block) {
	this.sel1 = SZN.gEl(sel1.id);
	this.url1 = sel1.url;
	this.sel2 = SZN.gEl(sel2);
	
	this.firstEntry = firstEntry || 'none';
	this.block = SZN.gEl(block) || 'none';

	SZN.Events.addListener(this.sel1 , 'change', this, '_load');	
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
}

SZN.LoadSelect.prototype._load = function(e, elm) {
	if(this.block != 'none'){
		this.block.innerHTML = '';
	}
	this.ajax(this.url1,elm.value);	
}

SZN.LoadSelect.prototype.ajax = function(url,value) {
	var fullUrl = url+"&id="+value+"&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_response");
}

SZN.LoadSelect.prototype._response = function(txt, status) { 			
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {		
			
			SZN.Dom.clear(this.sel2);
			this.sel2.disabled = false;							
			
			if(this.firstEntry != 'none') {
				var opt = SZN.cEl("option");
				opt.value = 0;
				opt.innerHTML = this.firstEntry;
				this.sel2.appendChild(opt);	
			}
			
						
			for (var i=0;i<response.length;i++) {
				var values = response[i];
				var opt = SZN.cEl("option");
				opt.value = values[0];
				opt.innerHTML = values[1];
				this.sel2.appendChild(opt);
			}	
		}
		else {
			SZN.Dom.clear(this.sel2);
			this.sel2.disabled = true;	
		}
	}
}

/* Rozsirene filtry - nacteni dalsich polozek do formulare na zaklade vyberu ze selectu */
SZN.ExtensionForm = SZN.ClassMaker.makeClass({
	NAME: "ExtensionForm",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.ExtensionForm.prototype.$constructor  = function(select,block,url,itemOnLine,sinc,till,error,web) { 
	this.error = error;
	this.sinc = sinc;
	this.till = till
	this.url = url;
	this.block = SZN.gEl(block);
	this.itemOnLine = itemOnLine || 4;
	this.web = web;
	SZN.Events.addListener( SZN.gEl(select), 'change', this, '_change');
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
}

SZN.ExtensionForm.prototype._change = function(e, elm) {
	this.block.innerHTML='';
	this.ajax(this.url,elm.value);	
}

SZN.ExtensionForm.prototype.ajax = function(url,value) {
	var fullUrl = url+"&id="+value+"&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_crateForm");
}
	
SZN.ExtensionForm.prototype._crateForm = function(txt, status) { 
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {	
			this._adminwebForm(response);	
		}
		else {
			alert(this.error);
		}
	}
	else {
		alert(this.error);	
	}
}

SZN.ExtensionForm.prototype._adminwebForm = function(response) { 
	for (var i=0;i<response.length;i++) {
		var h4 = SZN.cEl("h4");
		if(response[i][1].length != 0) {
		
			h4.innerHTML = response[i][0];
			SZN.Dom.append([this.block,h4]);
			
			var fieldset = SZN.cEl('fieldset','','extension');
			var count = 1;
			for (var a=0;a<response[i][1].length;a++) {					
				var label = SZN.cEl('label');
				label.setAttribute('for',response[i][1][a][2]+'_'+response[i][1][a][3]); 

					var input = SZN.cEl('input');
					input.type = response[i][1][a][1];
					if(response[i][1][a][1] == 'checkbox'){
						input.value = response[i][1][a][3];
					}
					input.name = response[i][1][a][2]; 	
					input.id = response[i][1][a][2]+'_'+response[i][1][a][3]; 		
				
					if(response[i][1][a][0] == 'min'){
						label.innerHTML = this.sinc;
						SZN.Dom.addClass(label,'text');
						SZN.Dom.addClass(input,'text');
						SZN.Dom.append([fieldset,label]);
						SZN.Dom.append([fieldset,input]);	
					}
					else if(response[i][1][a][0] == 'max'){
						label.innerHTML = this.till;
						SZN.Dom.addClass(label,'text');
						SZN.Dom.addClass(input,'text');
						SZN.Dom.append([fieldset,label]);
						SZN.Dom.append([fieldset,input]);	
					}
					else {
						label.innerHTML = response[i][1][a][0];
						SZN.Dom.append([fieldset,input]);	
						SZN.Dom.append([fieldset,label]);					
					}			
					
					if(count%this.itemOnLine == 0){
						var clear = SZN.cEl('div','','clear');
						SZN.Dom.append([fieldset,clear]);
					}
					count++;
											
			}
			SZN.Dom.append([this.block,fieldset]);
		}
	}		
}

/* Odeslani formulare pri zmene polozky v seznamu */
SZN.ChangeSelectSubmit = SZN.ClassMaker.makeClass({
	NAME: "ChangeSelectSubmit",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.ChangeSelectSubmit.prototype.$constructor  = function(select,form) {
	this.select = SZN.gEl(select);
	this.form = SZN.gEl(form);
	SZN.Events.addListener( this.select, 'change', this, 'submit');
}
		
SZN.ChangeSelectSubmit.prototype.submit = function(e, elm) { 
	this.form.submit();
}

/* Zvrazneni radku v tabulce po najeti */
SZN.TableHover = SZN.ClassMaker.makeClass({
	NAME: "TableHover",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.TableHover.prototype.$constructor  = function(classLn,classBg) {
	this.classBg = classBg;
	var titles = SZN.Dom.getElementsByClass(classLn); 	
	
	 for(var a=0; a < titles.length; a++){
		SZN.Events.addListener( SZN.Dom.getElementsByClass('line')[a], 'mouseover', this, 'hover');
		SZN.Events.addListener( SZN.Dom.getElementsByClass('line')[a], 'mouseout', this, 'noHover');
	}
}
		
SZN.TableHover.prototype.hover = function(e, elm) { 
	SZN.Dom.addClass(elm, this.classBg);
}

SZN.TableHover.prototype.noHover = function(e, elm) {
	SZN.Dom.removeClass(elm, this.classBg);
}

/* funkce pro potvrzeni akce */
SZN.DeleteConfirm = SZN.ClassMaker.makeClass({
	NAME: "DeleteConfirm",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.DeleteConfirm.prototype.$constructor = function (confirmClass, confirmMsg) {
	this.confirmMsg = confirmMsg;

	var hrefs = SZN.Dom.getElementsByClass(confirmClass, null);
	
	for(var i = 0; i < hrefs.length; i++) {
		SZN.Events.addListener(hrefs[i],"click",this,"_confirmDel");
	}
}

SZN.DeleteConfirm.prototype._confirmDel = function (e, elm) {	
	if(!confirm(this.confirmMsg)) {
		SZN.Events.cancelDef(e);
		SZN.Events.stopEvent(e);
	}
}

/* Generovani nazvu inzaratu - prvni krok */
SZN.AdvertName = SZN.ClassMaker.makeClass({
	NAME: "AdvertName",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AdvertName.prototype.$constructor = function(sel1,sel2,sel3,url,name) {
	this.sel1 = SZN.gEl(sel1);
	this.sel2 = SZN.gEl(sel2);
	this.sel3 = SZN.gEl(sel3);
	this.url = url;
	this.name = SZN.gEl(name);

	SZN.Events.addListener(this.sel1 , 'change', this, '_getName');
	SZN.Events.addListener(this.sel2 , 'change', this, '_getName1');
	SZN.Events.addListener(this.sel3 , 'change', this, '_getName');	
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
	
	this._getName();
}

SZN.AdvertName.prototype._getName = function(e, elm) {
	var fullUrl = this.url+"&category_type_cb="+this.sel1.value+"&category_main_cb="+this.sel2.value+"&category_sub_cb="+this.sel3.value+"&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_response");
}

SZN.AdvertName.prototype._getName1 = function(e, elm) {
	var fullUrl = this.url+"&category_type_cb="+this.sel1.value+"&category_main_cb="+this.sel2.value+"&category_sub_cb=0&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_response");
}


SZN.AdvertName.prototype._response = function(txt, status) { 			
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {
			this.name.innerHTML = response;	
		}
	}
}

/* Generovani nazvu inzaratu - druhy krok */
SZN.AdvertNameArea = SZN.ClassMaker.makeClass({
	NAME: "AdvertNameArea",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AdvertNameArea.prototype.$constructor = function(usableArea,estateArea,buildingArea,floorArea,url,name) {
	this.usableArea = SZN.gEl(usableArea);
	this.estateArea = SZN.gEl(estateArea);
	this.buildingArea = SZN.gEl(buildingArea);
	this.floorArea = SZN.gEl(floorArea);
	this.url = url;
	this.name = SZN.gEl(name);
		
	SZN.Events.addListener(this.usableArea , 'change', this, '_getName');
	SZN.Events.addListener(this.estateArea , 'change', this, '_getName');
	SZN.Events.addListener(this.buildingArea , 'change', this, '_getName');
	SZN.Events.addListener(this.floorArea , 'change', this, '_getName');
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
	
	this._getName();
}

SZN.AdvertNameArea.prototype._getName = function() {
	var fullUrl = this.url+"&usable_area="+this.usableArea.value+"&estate_area="+this.estateArea.value+"&building_area="+this.buildingArea.value+"&floor_area="+this.floorArea.value+"&_nocache="+Math.round(Math.random()*999);
	this.rq.send(fullUrl,this,"_response");
}

SZN.AdvertNameArea.prototype._response = function(txt, status) { 			
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {
			this.name.innerHTML = response;	
		}
	}
}

/* Zadavani adresy pri tvorbe inzeratu */

SZN.AddressWiz = SZN.ClassMaker.makeClass({
	NAME: "AddressWiz",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddressWiz.prototype.$constructor = function (default_data,elements,alerts,config){
	this.data = default_data;
	this.elements = elements;
	this.alerts = alerts;
	this.config = config;
	this.searched = false;
	this.gps_edited = false;

	this.ppx = 0;
	this.ppy = 0;
	this.zoom = 0;
	
	this.lang = this.config.lang;
	this.run = this.config.run;

	if(SZN.gEl(this.config.search_button)){
		SZN.Events.addListener(SZN.gEl(this.config.search_button), 'click', this, 'search_event');
	}
	
	this.ec_search_items = [];
	this.el_search_box = SZN.cEl("div","wizardResults");

	this.fogs = [];
	this.ec_fog = [];
	
	this.gps_inputs = {};
	for(var i = 1; i <= 4; i++){
		this.gps_inputs["n"+i] = SZN.gEl("gps_n"+i);
		this.gps_inputs["n"+i]._linked = ['n',i];
		SZN.Events.addListener(this.gps_inputs["n"+i], 'keyup', this, 'change_gps_event');
		this.gps_inputs["e"+i] = SZN.gEl("gps_e"+i);
		this.gps_inputs["e"+i]._linked = ['e',i];
		SZN.Events.addListener(this.gps_inputs["e"+i], 'keyup', this, 'change_gps_event');
	}
	this.gps_inputs["loc"] = SZN.gEl("gps_loc");
	SZN.Events.addListener(this.gps_inputs["loc"], 'keyup', this, 'change_loc_event');
	
	SZN.gEl("mapContainer").style.height = this.config.mapSize.height+"px";
	
	if(this.data.entityId){
		this.get_entity_event(this.data.entityId,this.data.entityType);
	}
}

SZN.AddressWiz.prototype._response = function (dat,status){
	if (status == 200) {
		try{
	 		eval('data = ' + dat);
	 		return data;
 		} catch(e){
 			return false;
 		}
	}	
	return false;
}

SZN.AddressWiz.prototype.set_map = function (){ 
	var container = SZN.gEl("mapContainer");
	
	var img = SZN.cEl("img", "mapImg");
	this.ppx = parseInt(this.ppx);
	this.ppy = parseInt(this.ppy);
	img.src = 'http://mapgen.mapy.cz/?typ=base&center=' + this.ppx.toString(16) + '_' + this.ppy.toString(16) + '&arrow=' + this.ppx.toString(16) + '_' + this.ppy.toString(16) + '&zoom=' + this.zoom + '&w=' + this.config.mapSize.width + '&h=' + this.config.mapSize.height + '&fmt=png';

	var oldImg = SZN.gEl("mapImg");
	if(oldImg){
		container.removeChild(oldImg);
		SZN.Dom.addClass(container,"loading");
	}
	container.appendChild(img);
	SZN.gEl("mapOptions").style.display = "block";	
}

SZN.AddressWiz.prototype.get_entity_event = function (entityId,entityType){
	
	SZN.gEl("locality_entity_id").value = entityId;
	SZN.gEl("locality_entity_type").value = entityType;
	
	var rq = new SZN.HTTPRequest();
	rq.send("/rs/get-entity?id=" + entityId + "&type="+ entityType + "&lang=" + this.lang + "&call=" + this.run + "&" + (new Date()).getTime(), this, "get_entity_response");
}

SZN.AddressWiz.prototype.get_entity_response = function(dat,status){ 
	var data = this._response(dat,status);
	if(data){
		this.fogs = data.fog;
		this.make_fog();
		this.change_fog();
	}	
}

SZN.AddressWiz.prototype.search_event = function (e,elm){
	// DONE??
	this.search_clean();
	var searchTerm = SZN.gEl(this.config.search_input).value;
	if(searchTerm != ""){
		var rq = new SZN.HTTPRequest();
		rq.send("/rs/decompose-query?address="+ encodeURI(searchTerm) + "&" + (new Date()).getTime(), this, "search_response");
	}else{
		SZN.gEl(this.config.search_input).focus();
		alert(this.alerts.noInput);
	}
	SZN.Events.stopEvent(e);
	SZN.Events.cancelDef(e);
}

SZN.AddressWiz.prototype.search_response = function (dat,status){
	var data = this._response(dat,status);
	if(data){
		if(data.length == 0){
			SZN.gEl(this.config.search_input).focus();
			alert(this.alerts.noResult);
			return false;
		}
		for(var a = 0; a < data.length; a++){
			anchor = SZN.cEl("a");
			anchor.href = "#";
			anchor.innerHTML = data[a].result;
			anchor._data = data[a]
	
			this.ec_search_items.push( SZN.Events.addListener(anchor, 'click', this, 'search_select') );
			this.ec_search_items.push( SZN.Events.addListener(anchor, 'mouseover', this, 'search_active') );
			this.ec_search_items.push( SZN.Events.addListener(anchor, 'mouseout', this, 'search_deactive') );
			
			this.el_search_box.appendChild(anchor);
		}
		SZN.gEl(this.config.search_box).appendChild(this.el_search_box);
		SZN.gEl(this.config.search_box).style.display = "block";
		
		if (data.length > 4){
			SZN.Dom.addClass(this.el_search_box,"minHeight");
		} else {
			SZN.Dom.removeClass(this.el_search_box,"minHeight");
		}
	}
}

SZN.AddressWiz.prototype.search_select = function (e,elm){
	if(elm._data){
		this.searched = true;
		this.gps_edited = false;
		this.data.fogValue  = 0;
		this.get_entity_event( elm._data.entityId, elm._data.entityType );
		SZN.gEl(this.config.search_box).style.display = "none";
		this.search_clean();
	}
	SZN.Events.stopEvent(e);
	SZN.Events.cancelDef(e);
}

SZN.AddressWiz.prototype.search_active = function (e,elm){
	SZN.Dom.addClass(elm,"active");
}

SZN.AddressWiz.prototype.search_deactive = function (e,elm){
	SZN.Dom.removeClass(elm,"active");
}

SZN.AddressWiz.prototype.search_clean = function (){
	for(var e = 0; e < this.ec_search_items.length; e++){
		SZN.Events.removeListener(this.ec_search_items[e]);
	}
	try{
		this.el_search_box.innerHTML = "";
	}catch(e){};
	
}

SZN.AddressWiz.prototype.make_fog = function (){
	for(var a = 0; a < this.ec_fog.length; a++){
		SZN.Events.removeListener(this.ec_fog[a]);
	}
	SZN.gEl("mapOptions_radios").innerHTML = "";
	
	for(var a = 0; a < this.fogs.length; a++ ){
		var id = this.fogs[a].locality_inaccuracy_type;
		var text = this.fogs[a].label;
		this._make_fog_elm(id,text,a);
	}
	
	if(this.fogs.length > 0 && this.config.display_fog){
		SZN.gEl("mapOptions").style.display = "block";
	} else {
		SZN.gEl("mapOptions").style.display = "none";
	}
}

SZN.AddressWiz.prototype._make_fog_elm = function (id,text,iter){
	var checked = "";
	var inputBox = SZN.cEl("div", "", "inputBox");
	
	var label = SZN.cEl("label");
	label.setAttribute("for", "id-" + id);
	label.innerHTML = text;
	
	if(this.data.fogValue == id || ((!this.data.fogValue || this.data.fogValue=="0") && iter == 0)){
		checked = 'checked="checked"';
	}

	var proj = this.config.isProject?"project_":"";	
	
	try{
    	input = document.createElement('<input type="radio" name="'+proj+'locality_inaccuracy_type" value="' + id + '" id="id-' + id + '" ' + checked + ' />');  
	}catch(err){  
		input = document.createElement('input');
		input.setAttribute('type','radio');  
		input.setAttribute('name',proj+'locality_inaccuracy_type');
		input.setAttribute('id','id-' + id);
		input.setAttribute('value',id);
		if(checked == 'checked="checked"'){
			input.setAttribute('checked',"checked");
		}  
	}
	
	this.ec_fog.push( SZN.Events.addListener(input, 'click', this, 'select_fog_event') );
	this.ec_fog.push( SZN.Events.addListener(label, 'click', this, 'select_fog_event') );
	
	SZN.Dom.append([inputBox, label, input]);
	SZN.Dom.append([SZN.gEl("mapOptions_radios"), inputBox]);
}	


SZN.AddressWiz.prototype.select_fog_event = function (e,elm){
	// vybrani jineho fogu
	var val = 0;
	if(elm.tagName.toLowerCase() == "label"){
		elId = elm.getAttribute('for');
		SZN.gEl(elId).checked = "checked";
		val = SZN.gEl(elId).value*1;
		SZN.Events.stopEvent(e);
		SZN.Events.cancelDef(e);
	} else {
		val = SZN.gEl(elm).value*1;
	}
	
	this.data.fogValue = val;
	this.change_fog();
}

SZN.AddressWiz.prototype.change_fog = function (){
	var data = false;
	for(var i = 0; i < this.fogs.length; i++){
		var t = this.fogs[i].locality_inaccuracy_type;
		if(t == this.data.fogValue*1){
			data = this.fogs[i];
			break;
		}
	}
	
	if(!data) data = this.fogs[0];

 	for (var id in this.elements){
 		if (id in data){
			SZN.gEl(this.elements[id]).value = data[id];
			if(SZN.gEl(id+"-show")){
				SZN.gEl(id+"-show").value = data[id];
			}
		}
	}
	
	SZN.gEl('locality_public_ppx').value = data.locality_public_ppx;
	SZN.gEl('locality_public_ppy').value = data.locality_public_ppy;
	
	this.ppx = data.locality_public_ppx;
	this.ppy = data.locality_public_ppy;
	this.zoom = data.zoom;
	
	if(this.data.fogValue*1 == 11){
		// GPS
		this._gps_val = "";
		this._loc_val = "";

		if(!this.gps_edited){
			var tenempty = !!(this.data.gps['loc'] == "")
			if(this.searched || tenempty){
				// beru hodnoty z get-entity
				this.fill_gps(data.gps,"*");
			} else {
				// nemenil jsem gps ani jsem nevyhledaval
				// beru hodnoty z tengu
				for(var i = 1; i <= 4; i++){
					this.gps_inputs['n'+i].value = this.data.gps['n'+i];
					this.gps_inputs['e'+i].value = this.data.gps['e'+i];
				}
				this.gps_inputs['loc'].value = this.repair(this.data.gps['loc']);
			}
		}
		// zobrazim GPS
		SZN.gEl('gpsBox').style.display = "block";
		this.change_gps_event();
	} else {
		SZN.gEl('gpsBox').style.display = "none";
		this.set_map();
	}

}

SZN.AddressWiz.prototype.change_gps_event = function (e,elm){ 
	// zmena gps
	try{
		if(e && elm._linked[1] != 4){
			if(e.keyCode == 38){
				// zvysit hodnotu
				var v = elm.value*1;
				elm.value = v+1;
			}
			if(e.keyCode == 40){
				// snizit hodnotu
				var v = elm.value*1;
				elm.value = v-1;
			}
			if(elm.value*1 < 0){elm.value = 0;}
		}
	}catch(er){}
	this.gps_edited = true;
	
	//zasrane dlouhy string
	var val = this.gps_inputs['n1'].value + "°" + this.gps_inputs['n2'].value + "'"; 
	val += this.gps_inputs['n3'].value + "." + this.gps_inputs['n4'].value + '"N';
	val += " " + this.gps_inputs['e1'].value + "°" + this.gps_inputs['e2'].value + "'";
	val += this.gps_inputs['e3'].value + "." + this.gps_inputs['e4'].value + '"E';
	
	if(this._gps_val != val){
		this.gps_request(val,"gps");
	}
	this._gps_val = val;
}

SZN.AddressWiz.prototype.change_loc_event = function (e){ 
	// zmena gps-LOC
	var val = this.gps_inputs['loc'].value;
	this.gps_edited = true;

	if(this._loc_val != val){
		this.gps_request(val,"loc");
	}
	this._loc_val = val;
}

SZN.AddressWiz.prototype.gps_request = function (str,t){ 
	var rq = new SZN.HTTPRequest();
	this._gps_reqtype = t;
	rq.send("/rs/gps-to-pp?gps=" + encodeURI(str) + "&" + (new Date()).getTime(), this, "change_gps_response"); 
}

SZN.AddressWiz.prototype.change_gps_response = function (dat,status){ 
	// zmena gps odpoved
	var data = this._response(dat,status);
	if(data && data.result == "1"){
		if(this._gps_reqtype == "gps"){
			this.fill_gps(data,"loc");
		} else {
			this.fill_gps(data,"gps");
		}
		SZN.gEl('locality_public_ppx').value = data.PPx;
		SZN.gEl('locality_public_ppy').value = data.PPy;
	
		this.ppx = data.PPx;
		this.ppy = data.PPy;
		
		this.set_map();
	}
}

SZN.AddressWiz.prototype.fill_gps = function (data,t){ 
	if(t == "gps" || t == "*"){
		this.gps_inputs['n1'].value = data.lat.degree;
		this.gps_inputs['n2'].value = data.lat.min;
		this.gps_inputs['n3'].value = data.lat.sec;
		this.gps_inputs['n4'].value = data.lat.ssec;
		
		this.gps_inputs['e1'].value = data.lon.degree;
		this.gps_inputs['e2'].value = data.lon.min;
		this.gps_inputs['e3'].value = data.lon.sec;
		this.gps_inputs['e4'].value = data.lon.ssec;
	}
	if(t == "loc" || t == "*"){
		this.gps_inputs['loc'].value = this.repair(data.line);
	}
}

SZN.AddressWiz.prototype.repair = function (str){
	return str.replace(new RegExp('\&quot\;',"g"),'"');
}


SZN.AddressWizard = SZN.ClassMaker.makeClass({
	NAME: "AddressWizard",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddressWizard.prototype.$constructor = function (cfg){ 
	this.search = SZN.gEl(cfg.searchId);
	this.outputElems = cfg.outputElems;
	this.item = [];
	this.txt = cfg.txt;
	this.cont = SZN.gEl(cfg.box);
	this.box = SZN.cEl("div", "wizardResults");
	this.entityId = cfg.entityId;
	this.entityType = cfg.entityType;
	this.map = cfg.map;
	this.fogValue = cfg.fogValue;
	this.lang = cfg.lang;
	this.fog = [];
	this.fogInit = cfg.fogInit;
	this.cacheData = [];
	this.gpsData = cfg.gpsData;
	this.gpsInit = '';
	this.run = cfg.run;
	this.mapSize = cfg.mapSize;
	
	this.coords = cfg.coords;
	
	if(this.map){
		this.map = new SZN.AddressWizard.Map(this);
		if (this.entityId != "" && this.entityType != ""){
			var rq = new SZN.HTTPRequest();
			rq.send("/rs/get-entity?id=" + this.entityId + "&type="+ this.entityType + "&lang=" + this.lang + "&call=" + this.run + "&" + (new Date()).getTime(), this, "_fogInit");
		}
	}
	if(SZN.gEl(cfg.submit)){
		SZN.Events.addListener(SZN.gEl(cfg.submit), 'click', this, '_search');
	}
}

SZN.AddressWizard.prototype._search = function (e){
	if(this.item.length > 0){
		this._hideResults();
	}
	var searchTerm = this.search.value;
	if(searchTerm != ""){
		var rq = new SZN.HTTPRequest();
		rq.send("/rs/decompose-query?address="+ encodeURI(searchTerm) + "&" + (new Date()).getTime(), this, "_response");
	}else{
		this.search.focus();
		alert(this.txt.noInput);
	}
	SZN.Events.stopEvent(e);  	
	SZN.Events.cancelDef(e);
}

SZN.AddressWizard.prototype._response = function (txt, status){
	if (status == 200) {
 		eval('data = ' + txt);
		if(data.length > 0){
			for(var a=0; a < data.length; a++){
				this.item[a] = new SZN.AddressWizard.Item(this, data[a]);
			}
			this._showResults();
		}else{
			this.search.focus();
			alert(this.txt.noResult);
		}
 	}
}

SZN.AddressWizard.prototype._showResults = function (){
	this.cont.appendChild(this.box);
	if (this.item.length > 4){
		SZN.Dom.addClass(this.box,"minHeight");
	}
}

SZN.AddressWizard.prototype._hideResults = function (){
	for(var a=0; a < this.item.length; a++){
		this.item[a].$destructor();
	}
	this.item.splice(0, this.item.length);
	this.cont.removeChild(this.box);
}

SZN.AddressWizard.prototype._fogInit = function (txt, status){
	if (status == 200) {
		eval('data = ' + txt);
 		this.cacheData = data;
		this.gpsInit = new SZN.AddressWizard.GPS(this);
		if(this.fogInit){
			for(var a=0; a < data.fog.length; a++){
				this.fog[a] = new SZN.AddressWizard.Fog(this, data.fog[a], data.fog[a].locality_inaccuracy_type, "owner");
			}
		}else{
			this.map._getCords(data.entityId, data.entityType, data.zoom, false);
		}
	}
}

SZN.AddressWizard.Item = SZN.ClassMaker.makeClass({
	NAME: "AddressWizard.Item",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddressWizard.Item.prototype.$constructor = function (owner, data){
	 this.data = data;
	 this.owner = owner;
	 this.events = new Object();
	 this.anchor = '';
	 this._buildDom();
	 this.fog = [];
}

SZN.AddressWizard.Item.prototype.$destructor = function (){
	this.anchor.parentNode.removeChild(this.anchor);
}

SZN.AddressWizard.Item.prototype._buildDom = function (){
	this.anchor = SZN.cEl("a");
	this.anchor.href = "#";
	var txt = SZN.cTxt(this.data.result);
	
	this.events.click = SZN.Events.addListener(this.anchor, 'click', this, '_select');
	this.events.mouseover = SZN.Events.addListener(this.anchor, 'mouseover', this, '_active');
	this.events.mouseout = SZN.Events.addListener(this.anchor, 'mouseout', this, '_deactive');
	
	SZN.Dom.append([this.anchor,txt]);
	SZN.Dom.append([this.owner.box,this.anchor]);
}

SZN.AddressWizard.Item.prototype._select = function (e){
	var rq = new SZN.HTTPRequest();
	rq.send("/rs/get-entity?id=" + this.data.entityId + "&type="+ this.data.entityType + "&lang=" + this.owner.lang + "&call=" + this.owner.run + "&" + (new Date()).getTime(), this, "_response");
	SZN.Events.stopEvent(e);  	
	SZN.Events.cancelDef(e);
}

SZN.AddressWizard.Item.prototype._response = function (txt, status){
	if (status == 200) {
 		eval('data = ' + txt);
 		this.owner.cacheData = data;
 		
	 	for (var id in this.owner.outputElems){
	 		if (id in data){
				SZN.gEl(this.owner.outputElems[id]).value = data[id];
				if(SZN.gEl(id+"-show")){
					SZN.gEl(id+"-show").value = data[id]; 
				}
			}
		}
		
		SZN.gEl("locality_entity_id").value = data.entityId;
		SZN.gEl("locality_entity_type").value = data.entityType;
		this.owner._hideResults();
		
		if(this.owner.map){
			if(this.owner.fogInit){
				if(this.owner.fog.length > 0){
					for(var a=0; a < this.owner.fog.length; a++){
						this.owner.fog[a].$destructor();
					}
				this.fog.splice(0, this.fog.length);
				}		
			}
			this.owner.map._getCords(data.entityId, data.entityType, data.zoom);
			
			if(this.owner.fogInit){
				this.owner.gpsInit = new SZN.AddressWizard.GPS(this.owner);
				for(var a=0; a < data.fog.length; a++){
					this.owner.fog[a] = new SZN.AddressWizard.Fog(this.owner, data.fog[a], data.fog[a].locality_inaccuracy_type, "item");
				}
			}
		}
	}
}

SZN.AddressWizard.Item.prototype._active = function (e, elm){
	SZN.Dom.addClass(elm,"active");
}

SZN.AddressWizard.Item.prototype._deactive = function (e, elm){
	SZN.Dom.removeClass(elm,"active");
}

SZN.AddressWizard.Fog = SZN.ClassMaker.makeClass({
	NAME: "AddressWizard.Fog",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddressWizard.Fog.prototype.$constructor = function (owner, data, iteration, call){
	this.box = SZN.gEl("mapOptions");
	this.data = data;
	this.owner = owner;
	this.events = new Object();
	this.call = call;
	this.iteration = iteration;
	this._buildDom();
}

SZN.AddressWizard.Fog.prototype.$destructor = function (){
	this.box.removeChild(this.inputBox);
}

SZN.AddressWizard.Fog.prototype._buildDom = function (){
	var checked = "";
	this.inputBox = SZN.cEl("div", "", "inputBox");
	
	var label = SZN.cEl("label");
	label.setAttribute("for", "id-" + this.iteration);
	var labelText = SZN.cTxt(this.data.label);
	
	if(this.call == "owner"){
		if(this.owner.fogValue == this.iteration ){
			checked = 'checked="checked"';
			this.owner.map._getCords(this.data.entityId, this.data.entityType, this.data.zoom, (this.data.label == "GPS"));
		}
	}else{
		if(this.data.PPx){
		 	checked = 'checked="checked"';
		 }
	}
	
	try{
    	input = document.createElement('<input type="radio" name="locality_inaccuracy_type" value="' + this.iteration + '" id="id-' + this.iteration + '" ' + checked + ' />');  
	}catch(err){  
		input = document.createElement('input');
		input.setAttribute('type','radio');  
		input.setAttribute('name','locality_inaccuracy_type');
		input.setAttribute('id','id-' + this.iteration);
		input.setAttribute('value',this.iteration);
		if(checked == 'checked="checked"'){
			input.setAttribute('checked',"checked");
		}  
	}
	
	if(this.data.label == "GPS"){
		this.events.unloadInputClickGps = SZN.Events.addListener(input, 'click', this, '_gps');
		this.events.unloadLabelClickGps = SZN.Events.addListener(label, 'click', this, '_gps');
	}else{
		this.events.unloadInputClick = SZN.Events.addListener(input, 'click', this, '_select');
		this.events.unloadLabelClick = SZN.Events.addListener(label, 'click', this, '_select');
	}
	
	this.inputBox.id = "box-" + this.iteration;
	
	SZN.Dom.append([label, labelText]);
	SZN.Dom.append([this.inputBox, label, input]);
	SZN.Dom.append([this.box, this.inputBox]);
	
}

SZN.AddressWizard.Fog.prototype._select = function (e, elm){
	if(elm.tagName.toLowerCase() == "label"){
		elId = elm.getAttribute('for');
		SZN.gEl(elId).checked = "checked";
	}
	this.owner.gpsInit._hide();
	this.owner.map._getCords(this.data.entityId, this.data.entityType, this.data.zoom, false);
}

SZN.AddressWizard.Fog.prototype._gps = function (e, elm){
	if(elm.tagName.toLowerCase() == "label"){
		elId = elm.getAttribute('for');
		SZN.gEl(elId).checked = "checked";
	}
	this.owner.gpsInit._show();
	//this.owner.gpsInit._check();
	this.owner.map._getCords(this.data.entityId, this.data.entityType, this.data.zoom, true);
}



SZN.AddressWizard.Map = SZN.ClassMaker.makeClass({
	NAME: "AddressWizard.Map",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddressWizard.Map.prototype.$constructor = function (owner){
	this.owner = owner;
	this.zoom = 15;
	this._is_GPS = false;
}

SZN.AddressWizard.Map.prototype._getCords = function (entityId, entityType, zoom, isGps){
	this._is_GPS = !!isGps;
	this.zoom = zoom;
	var rq = new SZN.HTTPRequest();
	rq.send("/rs/get-coords?id=" + entityId + "&type=" + entityType + "&" + (new Date()).getTime(), this, "_change");
}

SZN.AddressWizard.Map.prototype._setMap = function (px, py, zoom){
	var container = SZN.gEl("mapContainer");

	var img = SZN.cEl("img", "mapImg");
	img.src = 'http://mapgen.mapy.cz/?typ=base&center=' + px.toString(16) + '_' + py.toString(16) + '&arrow=' + px.toString(16) + '_' + py.toString(16) + '&zoom=' + zoom + '&w=' + this.owner.mapSize.width + '&h=' + this.owner.mapSize.height + '&fmt=png';

	var oldImg = SZN.gEl("mapImg");
	if(oldImg){
		container.removeChild(oldImg);
		SZN.Dom.addClass(container,"loading");
	}
	container.appendChild(img);
	SZN.gEl("mapOptions").style.display = "block";
}

SZN.AddressWizard.Map.prototype._change = function (txt, status){
	if (status == 200) {
 		eval('data = ' + txt);
 		
 		if(!data)return;
 		
 		var dataUse = [];
		try{
			this.owner.gpsData['loc'] = data.gps.line.replace(new RegExp("&quot;","g"),'"');
			this.owner.gpsData['N1'] = data.gps.lat.degree;
			this.owner.gpsData['N2'] = data.gps.lat.min;
			this.owner.gpsData['N3'] = data.gps.lat.sec;
			this.owner.gpsData['N4'] = data.gps.lat.ssec;

			this.owner.gpsData['E1'] = data.gps.lon.degree;
			this.owner.gpsData['E2'] = data.gps.lon.min;
			this.owner.gpsData['E3'] = data.gps.lon.sec;
			this.owner.gpsData['E4'] = data.gps.lon.ssec;
		} catch(e){}

	 	var px = new Number(parseInt(data.PPx));
		var py = new Number(parseInt(data.PPy));
		
		
		this._setMap(px,py,data.zoom);
		
		if (this.owner.cacheData.length <= 0){
			this.owner.cacheData = data[id];
		}
		
		for (var id in this.owner.outputElems){
			if (id in data){
				SZN.gEl(this.owner.outputElems[id]).value = data[id];
				if(SZN.gEl(id+"-show")){
					SZN.gEl(id+"-show").value = this.owner.cacheData[id]; 
				}
			}
		}
		if(this._is_GPS){
			SZN.gEl("locality_public_ppx").value = data.PPx;
			SZN.gEl("locality_public_ppy").value = data.PPy;
		}
	}
}

SZN.AddressWizard.GPS = SZN.ClassMaker.makeClass({
	NAME: "AddressWizard.GPS",
	VERSION: "1.0",
	CLASS: "class"
});


SZN.AddressWizard.GPS.prototype.$constructor = function (owner){
	this.owner = owner;
	this.box = SZN.gEl('gpsBox');
	this.inBox = '';
	this.events = [];
	this.inputs = {}; 
	
	this._changed = "";
	
	this._buildDom();
}

SZN.AddressWizard.GPS.prototype.$destructor = function (){
	this.box.style.display = "none";
}

SZN.AddressWizard.GPS.prototype._buildDom = function (){	
	for(var a=1;a<5;a++){
		var input = SZN.gEl("gps_n"+a);
		this.events.input = SZN.Events.addListener(input, 'keyup', this, '_check');
		input.value = this.owner.gpsData["N"+a];
		this.inputs['n'+a] = input; 
	}
	
	for(var a=1;a<5;a++){
		var input = SZN.gEl("gps_e"+a);
		this.events.input = SZN.Events.addListener(input, 'keyup', this, '_check');
		input.value = this.owner.gpsData["E"+a];
		this.inputs['e'+a] = input; 
	}
	
	var input = SZN.gEl("gps_loc");
	input.value = this.owner.gpsData["loc"].replace(new RegExp("&quot;","g"),'"');
	this.events.input = SZN.Events.addListener(input, 'keyup', this, '_checkLoc');
	this.inputs['loc'] = input;
}

SZN.AddressWizard.GPS.prototype._show = function (){
	if(this.inBox == ''){
		this._buildDom();
	}
	this.box.style.display = "block";
	
	if(this.inputs['loc'].value==""){
		this.inputs['loc'].value = this.owner.gpsData['loc'];
	}
	var fill_inputs = true;
	for(var n=1;n<=4;n++){
		if(this.inputs['n'+n].value != ""){fill_inputs = false;break;}
		if(this.inputs['e'+n].value != ""){fill_inputs = false;break;}
	}
	if(fill_inputs){
		for(var n=1;n<=4;n++){
			this.inputs['n'+n].value = this.owner.gpsData['N'+n];
			this.inputs['e'+n].value = this.owner.gpsData['E'+n];
		}
	}
	
	this.box.style.display = 'block';
}

SZN.AddressWizard.GPS.prototype._hide = function (){
	this.box.style.display = 'none';
}

SZN.AddressWizard.GPS.prototype._check = function (e,elm){
	if(e){
		var v = elm.value;
		var rv = "";
		var field_correct = true;
		for(var i=0;i<v.length;i++){
			chr = v.substring(i,i+1);
			if(("0123456789").indexOf(chr) == -1 ){field_correct = false;} else {rv+=chr;}
		}
		if(!field_correct){
			elm.value = rv;
			return false;
		}
	}
	
	var _gps = true;
	var _vals_act = "";
	var n_val,e_val;
	for(var i=1;i<=4;i++){
		if(i < 4){
			n_val = this.inputs['n'+i].value != '';
			e_val = this.inputs['e'+i].value != '';
			_gps = _gps && n_val && e_val;
		}
		_vals_act += this.inputs['n'+i].value+"|"+this.inputs['e'+i].value+";";
	}
	
	if(!this._gps_vals) this._gps_vals = _vals_act;
	var _changed = (_vals_act != this._gps_vals);
	this._gps_vals = _vals_act;

	if(_gps && _changed){
		this._changed = "gps";
		var rq = new SZN.HTTPRequest();
		rq.send("/rs/gps-to-pp?gps=" + this.inputs['n1'].value + "°" + this.inputs['n2'].value + "'" + this.inputs['n3'].value + "." + this.inputs['n4'].value + '"N' + " " + this.inputs['e1'].value + "°" + this.inputs['e2'].value + "'" + this.inputs['e3'].value + "." + this.inputs['e4'].value + '"E' + "&" + (new Date()).getTime(), this, "_response"); 
	}
}

SZN.AddressWizard.GPS.prototype._checkLoc = function (e,elm){
	if(!this._loc_vals) this._loc_vals = this.inputs['loc'].value;
	var _changed = (this.inputs['loc'].value != this._loc_vals);
	this._loc_vals = this.inputs['loc'].value;

	if( this.inputs['loc'].value != "" && _changed ){
		this._changed = "loc";
		var rq = new SZN.HTTPRequest();
		rq.send("/rs/gps-to-pp?gps=" + this.inputs['loc'].value + "&" + (new Date()).getTime(), this, "_response"); 
	}
}

SZN.AddressWizard.GPS.prototype._response = function (txt, status){
	if(status == 200){
		eval('data = ' + txt);
		var container = SZN.gEl("mapContainer");
		var px = new Number(parseInt(data.PPx));
		var py = new Number(parseInt(data.PPy));

		if(this._changed == "gps"){
			this.inputs['loc'].value = data.line.replace(new RegExp("&quot;","g"),'"');
		}
		
		if(this._changed == "loc"){
			this.inputs['n1'].value = data.lat.degree;
			this.inputs['n2'].value = data.lat.min;
			this.inputs['n3'].value = data.lat.sec;
			this.inputs['n4'].value = data.lat.ssec;

			this.inputs['e1'].value = data.lon.degree;
			this.inputs['e2'].value = data.lon.min;
			this.inputs['e3'].value = data.lon.sec;
			this.inputs['e4'].value = data.lon.ssec;
		}
		
		var img = SZN.cEl("img", "mapImg");
		img.src = 'http://mapgen.mapy.cz/?typ=base&center=' + px.toString(16) + '_' + py.toString(16) + '&arrow=' +  px.toString(16) + '_' + py.toString(16) + '&zoom=14&w=' + this.owner.mapSize.width + '&h=' + this.owner.mapSize.height + '&fmt=png';
		
		SZN.gEl("locality_public_ppx").value = data.PPx;
		SZN.gEl("locality_public_ppy").value = data.PPy;

		var oldImg = SZN.gEl("mapImg");
		if(oldImg){
			container.removeChild(oldImg);
			SZN.Dom.addClass(container,"loading");
		}
		container.appendChild(img);
	}else{
	
	}
}


/* Zobrazit/Skryt polozky hypoteky */
SZN.ShowMortgage = SZN.ClassMaker.makeClass({
	NAME: "ShowMortgage",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.ShowMortgage.prototype.$constructor  = function(checkbox, items) {
	this.items = SZN.gEl(items);
	this.checkbox = SZN.gEl(checkbox);
	if (this.checkbox.checked)
		this.items.style.display="block";		
	SZN.Events.addListener(this.checkbox, 'click', this, 'showHidde');
}
		
SZN.ShowMortgage.prototype.showHidde = function(e, elm) { 
	if (elm.checked)
		this.items.style.display="block";
	else
		this.items.style.display="none";
}


/* Odeslani formulare na ruzna url */
SZN.SubmitForm = SZN.ClassMaker.makeClass({
	NAME: "SubmitForm",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.SubmitForm.prototype.$constructor  = function(link,form,url) {
	this.link = SZN.gEl(link);
	this.form = SZN.gEl(form);
	this.url = url;
	SZN.Events.addListener(this.link, 'click', this, 'submit');
}
		
SZN.SubmitForm.prototype.submit = function(e, elm) { 
	SZN.Events.cancelDef(e);
	this.form.action = this.url; 
	this.form.submit();
}

/* pridani polozky pro pridani dalsi fotky */
SZN.AddPhotoItem = SZN.ClassMaker.makeClass({
	NAME: "AddPhotoItem",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddPhotoItem.prototype.$constructor = function(link,box,count) {
	this.link = SZN.gEl(link);
	this.uploadPhoto = SZN.gEl(box);	
	this.count = count;
	SZN.Events.addListener(this.link, 'click', this, 'addItem');	
}

SZN.AddPhotoItem.prototype.addItem = function(e, elm) { 	 
	this.count = this.count - 1;

	var photoInput = SZN.cEl('input');
	
	photoInput.type = "file";
	photoInput.size = "45";
	photoInput.name = "photos[]";	
	SZN.Dom.append([this.uploadPhoto,photoInput]);
	var cleaner = SZN.cEl('div','','clear');
	SZN.Dom.append([this.uploadPhoto,cleaner]);

	if (this.count == 0 ) {
		this.link.style.display = "none";	
	}
	
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);
}

SZN.LengthControl = SZN.ClassMaker.makeClass({
	NAME: "LengthControl",
	VERSION: "1.0",
	CLASS: "class"
});
	
SZN.LengthControl.prototype.$constructor  = function(textarea,max,counter,error) {
	this.max = max;
	this.error = error;
	this.counter = SZN.gEl(counter);
	this.text = SZN.gEl(textarea);
	this.counter.innerHTML = this.max - this.text.value.length;
	SZN.Events.addListener(this.text, 'keyup', this, '_control');	
}

SZN.LengthControl.prototype._control = function(e, elm){   
	if(this.text.value.length > this.max){
		this.text.value = this.text.value.substring(0, this.max);
		alert(this.error);	
	}
	
	this.counter.innerHTML = this.max - this.text.value.length; 
	if(this.text.value.length == this.max){
		SZN.Dom.addClass(this.counter,'limit');
	}
	else {
		SZN.Dom.removeClass(this.counter,'limit');
	}
}

/* zobrazovani regionu ve vyhledavani */
SZN.ShowRegion = SZN.ClassMaker.makeClass({
	NAME: "ShowRegion",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.ShowRegion.prototype.$constructor = function(item,regionBox) {
	this.regionBox = SZN.gEl(regionBox);
	var items = SZN.Dom.getElementsByClass(item);	
	for(var a=0; a < items.length; a++){
		var regionItem = SZN.Dom.getElementsByClass(item,this.regionBox)[a];		 
		if(regionItem.checked){
			var box = SZN.gEl(regionItem.id+"Box");
			box.style.display = "block";		
		}
		SZN.Events.addListener(regionItem, 'click', this, '_switch');
	}
}

SZN.ShowRegion.prototype._switch = function (e,elm) {
	var box = SZN.gEl(elm.id+"Box");
	if(box.style.display == "block" ){
		box.style.display = "none";
	}
	else{
		box.style.display = "block";
	}
}

/* Kontrola zda  je zadana lokalita pro vyhledavani v okoli*/
SZN.SearchAroundControl = SZN.ClassMaker.makeClass({
	NAME: "SearchAroundControl",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.SearchAroundControl.prototype.$constructor  = function(searchAround,locality,label,error,text) {
	this.text = text;
	this.searchAround = SZN.gEl(searchAround);
	this.locality = SZN.gEl(locality);
	this.label = SZN.gEl(label);
	this.error = SZN.gEl(error);
	this._control();
	SZN.Events.addListener(this.searchAround,'change', this, '_control'); 
	SZN.Events.addListener(this.locality,'change', this, '_control'); 
}

SZN.SearchAroundControl.prototype._control = function() {
	if (this.locality.value == this.text || this.locality.value == "") {
		if(this.searchAround.value == 0) {
			this.error.style.display = 'none';
			this.label.style.color = "#000";
		}
		else{
			this.error.style.display = 'block';
			this.label.style.color = "#cc0000"; 
		}
	} 
	else {
		this.error.style.display = 'none';
		this.label.style.color = "#000";	
	}				
}

SZN.DeleteLocalityValue = SZN.ClassMaker.makeClass({
	NAME: "DeleteLocalityValue",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.DeleteLocalityValue.prototype.$constructor = function(form, locality, text) {
	this.locality = SZN.gEl("locality");
	this.text = text;
	
	SZN.Events.addListener( SZN.gEl(form), 'submit', this, '_delete');
}

SZN.DeleteLocalityValue.prototype._delete = function () {
	if(this.locality.value == this.text){ 
		this.locality.value = ""; 
	}
}

SZN.AddLocalityValue = SZN.ClassMaker.makeClass({
	NAME: "AddLocalityValue",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.AddLocalityValue.prototype.$constructor = function(form, locality, text) {
	this.locality = SZN.gEl(locality);
	this.text = text;
	this._check();
	SZN.Events.addListener(this.locality, 'click', this, '_delete');
	SZN.Events.addListener(this.locality, 'blur', this, '_change');
}

SZN.AddLocalityValue.prototype._check = function () {
	if(this.locality.value != this.text){
		this.locality.style.color = "#000";
	}
}

SZN.AddLocalityValue.prototype._delete = function () {
	if(this.locality.value == this.text){
		this.locality.value = "";
		this.locality.style.color='#000';
	}
}

SZN.AddLocalityValue.prototype._change = function () {
	if(this.locality.value == ''){
		this.locality.value = this.text;
		this.locality.style.color='#A7A6AA';
	}
	if(this.locality.value == this.text){ 
		this.locality.style.color='#A7A6AA';
	}
}

/* Zobrazeni kontaktnich informaci pri zadavani poptavky */
SZN.ShowContactInfo = SZN.ClassMaker.makeClass({
	NAME: "ShowContactInfo",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.ShowContactInfo.prototype.$constructor = function(checkbox,box,subCheckbox) {
	this.box = SZN.gEl(box);
	this.subCheckbox = SZN.gEl(subCheckbox);
	this.checkbox = SZN.gEl(checkbox);
	if(this.checkbox.checked) {
		this.box.style.display = 'block';	
	}
	SZN.Events.addListener(SZN.gEl(checkbox) , 'click', this, '_change');	
}

SZN.ShowContactInfo.prototype._change = function(e, elm) {
	if(this.box.style.display == 'block') {
		this.box.style.display = 'none';
	}
	else {
		this.box.style.display = 'block';
	}

	if(this.subCheckbox) { // element neexistuje v adminu
		if(this.subCheckbox.style.display == 'block') {
			this.subCheckbox.style.display = 'none';
		}
		else {
			this.subCheckbox.style.display = 'block';
		}
	}
}


/* zadavani lokality u poptavek*/
SZN.DemandLocality = SZN.ClassMaker.makeClass({
	NAME: "DemandLocality",
	VERSION: "1.0",
	CLASS: "class"
});

SZN.DemandLocality.prototype.$constructor = function(open,close,url1,url2,dictionary) {
	this.advertDetail = SZN.gEl('form');
	this.localityBox = SZN.gEl('addLocality');
	this.locality =  SZN.gEl('locality');
	this.searchBox = SZN.gEl('searchBox');
	this.distance = SZN.gEl('distance');
	this.finalLocality = SZN.gEl('finalLocality');
	this.dictionary = dictionary;
	
	this.priceCurrencyCb = SZN.gEl('price_currency_cb');
	this.priceUnitCb = SZN.gEl('price_unit_cb');
		
	this.url1 = url1;
	this.url2 = url2;

	
	SZN.Events.addListener(SZN.gEl(open) , 'click', this, '_open');
	SZN.Events.addListener(SZN.gEl(close) , 'click', this, '_close');
	SZN.Events.addListener(SZN.gEl('saveLocality') , 'click', this, '_saveLocality');
	
	this.checboxs = SZN.Dom.getElementsByClass('localityItem',this.localityBox,'input');		
	for(var a=0; a < this.checboxs.length; a++){
		SZN.Events.addListener(this.checboxs[a], 'change', this, '_crateParam');
	}
	
	SZN.Events.addListener(SZN.gEl('searchLocality'), 'click', this, '_getLocality');		
	
	this.rq = new SZN.HTTPRequest();
	this.rq.setMethod("get");
	this.rq.setFormat("txt");
	this.rq.setMode("async");
			
}

SZN.DemandLocality.prototype._getLocality = function(e,elm) {
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);
	
	var fullUrl = this.url1;
	fullUrl = fullUrl + this.locality.value
	for(var a=0; a < this.params.length; a++){
		fullUrl = fullUrl + '&' + this.params[a];	
	} 

	this.rq.send(fullUrl,this,"_response");
}

SZN.DemandLocality.prototype._response = function(txt, status) { 			
	this.searchBox.innerHTML = '';


	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {		    
	    	this.searchBox.style.display = "block";	    	
	    	var div = SZN.cEl("div","wizardResults");
	    	this.searchBox.appendChild(div);
	    	if(response.length > 4) {
				SZN.Dom.addClass(div,'minHeight');
			}
			else {
				SZN.Dom.removeClass(div,'minHeight');	
			}	    	
	    	
			for (var i=0;i<response.length;i++) {
				var link = SZN.cEl("a");
				link.href = "#";
				link.data = response[i];
				link.innerHTML = response[i].localiton;				
				div.appendChild(link);				
				SZN.Events.addListener(link, 'click', this, '_select_street');	
			} 		
		}
		else {
        	alert(this.dictionary.noResult);
		}
	}
}


SZN.DemandLocality.prototype._select_street = function(e,elm) { 	
	this.locality.value = elm.data.localiton;
	this.finalLoaclity.entityId = elm.data.entityId;
	this.finalLoaclity.entityType = elm.data.entityType;
    this.searchBox.style.display = 'none';
    
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);		
}

SZN.DemandLocality.prototype._open = function(e, elm) {
	this.priceCurrencyCb.style.display = "none";
	this.priceUnitCb.style.display = "none";
	
	var position = SZN.Dom.getBoxPosition(elm,this.advertDetail);
	
	this.params = [];
	
	this.finalLoaclity = {entityId:'', entityType:'', regions: '', distance: ''};
	this.localityBox.style.display = 'block';
    this.localityBox.style.top = position.top - 50 + "px";
	this.searchBox.style.display = 'none';
    
	this.distance.value = 0;
    SZN.gEl('noLocality').style.display = 'none';
	SZN.gEl('localityLabel').style.color = '#000000';


	this.districts = SZN.Dom.getElementsByClass('district',this.localityBox,'div');		
	for(var a=0; a < this.districts.length; a++){
		this.districts[a].style.display = 'none';
	}
	
	for(var a=0; a < this.checboxs.length; a++){
		this.checboxs[a].checked= false;
	}
	this.locality.value = this.dictionary.cityPart;
	this.locality.style.color = '#A7A6AA';
	
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);		
}

SZN.DemandLocality.prototype._close = function(e, elm) {
	this.localityBox.style.display = 'none';
	this.priceCurrencyCb.style.display = "block";
	this.priceUnitCb.style.display = "block";
	
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);		
}

SZN.DemandLocality.prototype._crateParam = function(e,elm) {
	var paramValue = elm.name +'='+ elm.value;

	for(var a=0; a < this.params.length; a++){
		if(this.params[a] == paramValue) {
			this.params.pop(paramValue);
			var paramIn = true;
			break; 
		}
	} 
	
	if(!paramIn) {
		this.params.push(paramValue);	
	}
			
}

SZN.DemandLocality.prototype._saveLocality = function(e,elm) {
	this.finalLoaclity.regions = this.params;
	this.finalLoaclity.distance = this.distance.value;
	
	this.localityBox.style.display = 'none';
	SZN.Events.cancelDef(e);
	SZN.Events.stopEvent(e);

	var finalUrl = this.url2+'?entityId='+this.finalLoaclity.entityId+'&entityType='+this.finalLoaclity.entityType+'&distance='+this.finalLoaclity.distance;
	for(var a=0; a < this.finalLoaclity.regions.length; a++){
		finalUrl = finalUrl + '&' + this.finalLoaclity.regions[a];	
	} 

	this.rq.send(finalUrl,this,"_response1");				
}

SZN.DemandLocality.prototype._response1 = function(txt, status) { 			
	if (status == 200) {
		eval("var response = "+txt+";");		
		if (response.length != 0 ) {		    
	    	
			this.finalLocality.innerHTML = '';	    	
	    	var dl = SZN.cEl("dl");
	    	this.finalLocality.appendChild(dl);
	    	var dt = SZN.cEl("dt");
	    	dt.innerHTML = this.dictionary.region + ":";
	    	dl.appendChild(dt);
			var dd = SZN.cEl("dd");
	    	var regions = '';
			if(response.regions.length)
				for (var i=0;i<response.regions.length;i++) {
					if(i+1 == response.regions.length ) {
						regions = regions + response.regions[i].name;
					}
					else {
						regions = regions + response.regions[i].name + ", ";	
					}
					
					var regionInput = SZN.cEl("input");
					regionInput.type = 'hidden';
					regionInput.name = 'regions[]';
					regionInput.value = response.regions[i].id;
					dl.appendChild(regionInput);
						
				}
			else {
				regions = this.dictionary.allRegions;
			}
			dd.innerHTML = regions;
	    	dl.appendChild(dd);
	    	
	    	
	    	
	    	var dt1 = SZN.cEl("dt");
	    	dt1.innerHTML = this.dictionary.district + ":";
	    	dl.appendChild(dt1);
			var dd1 = SZN.cEl("dd");
	    	var districts = '';
			if(response.districts.length) {
				for (var i=0;i<response.districts.length;i++) {
					if(i+1 == response.districts.length) {
						districts = districts + response.districts[i].name;
					}
					else {
						districts = districts + response.districts[i].name + ", ";	
					}
					
					var districtsInput = SZN.cEl("input");
					districtsInput.type = 'hidden';
					districtsInput.name = 'districts[]';
					districtsInput.value = response.districts[i].id;
					dl.appendChild(districtsInput);
				}
	        }
	        else {
				districts = this.dictionary.allDistricts;	
			}
			dd1.innerHTML = districts;
		   	dl.appendChild(dd1);
			
			if(response.name != '') {
				var dt2 = SZN.cEl("dt");
		    	dt2.innerHTML = "Ulice:";
		    	dl.appendChild(dt2);
				var dd2 = SZN.cEl("dd");
	            dd2.innerHTML =  response.name;
		    	dl.appendChild(dd2);
				
				var entityId = SZN.cEl("input");
				entityId.type = 'hidden';
				entityId.name = 'demand_locality_entity_id';
				entityId.value = response.entityId;
				dl.appendChild(entityId);
				
				var entityType = SZN.cEl("input");
				entityType.type = 'hidden';
				entityType.name = 'demand_locality_entity_type';
				entityType.value = response.entityType;
				dl.appendChild(entityType);
				
	    	}
	    	
	    	if(response.distance && response.name != '') {
		    	var dt3 = SZN.cEl("dt");
			    dt3.innerHTML = this.dictionary.searchAround + ":";
			    dl.appendChild(dt3);
				var dd3 = SZN.cEl("dd");
		        dd3.innerHTML =  response.distance/1000 + " km";
			    dl.appendChild(dd3);
		    }	
	    		
			var distance = SZN.cEl("input");
			distance.type = 'hidden';
			distance.name = 'demand_locality_distance';
			distance.value = response.distance;
			dl.appendChild(distance);	    	
	
		}
		else {
        	alert(this.noResult);
		}
	}
}
