$(document).ready(function(){
    regFileUploadHandlers ();
    regTreeDictHandlers ();
    regCurrencyHandlers ();
    regResetHandlers ();
    regRegionHandlers ();
	regFilterHandlers ();
	regAdvViewHandlers ();
	imagePreview();
});

function refreshCaptcha ()
{
	var hid = generateHash (20);
	$("img.captcha").attr("src", "/captcha.jpg?c="+hid);
	$("input#sid").val(hid);
}
function generateHash (len)
{
    var uuid = "";
    for (i = 0; i < 32; i++) {
      uuid += Math.floor(Math.random() * 16).toString(16);
    }
	return uuid;
}

function regAdvViewHandlers ()
{
	var fields = ["name", "email", "text", "scode"];
	$("form.comment").submit (function()
	{
		var f_comm = $(this);
		f_comm.children(".success").addClass("hidden");
		f_comm.children(".blocked").addClass("hidden");
		$(".sub-com").attr ("disabled", "true");
		var content = f_comm.serialize ();
		$.ajax ({
		type: "POST", 
		url: f_comm.attr("action"), 
		data: content, 
		success: function (data)
		{
			if (data.success)
			{
				if (data.blocked)
					f_comm.children(".blocked").removeClass("hidden");
				else
				if (f_comm.find ("input[name=type]").val()=="comment")
				{
					var nc = '<tr><td colspan="2"><span>'+data.user+'</span> от '+data.ctime+'</td></tr>'+
						'<tr><td colspan="2">'+f_comm.find("textarea").val()+'</td></tr>';
					$("table.comments").find("tr:last").after(nc);
				}
				else
				{
					$("div#pmsg").addClass ("hidden");
					$("b#pmsg.success").removeClass ("hidden");
				}
				f_comm[0].reset ();
			}
			for (i = 0 ; i < fields.length; i++)
			{
				var field = f_comm.find ("*[name="+fields[i]+"]");
				field.nextAll("label").remove ();
				var err = eval("data."+fields[i]);
				if (err)
					field.parent().append ("<label class='needed'>"+err+"</label>");
			}
			$(".sub-com").removeAttr ("disabled");
			refreshCaptcha ();
		},
		complete: function (rq, status)
		{
			$(".sub-com").removeAttr ("disabled");
			refreshCaptcha ();
		}
		});
		return false;
	});
	$("img.captcha,a.captcha").click (function ()
	{
		refreshCaptcha();
	});
	$("#pri_av").click (function()
	{
		$("div#pmsg").toggleClass ("hidden");
		$("b#pmsg.success").addClass ("hidden");
	});
}

function regResetHandlers ()
{
    var btn_reset = $("#btn_reset");
    if (btn_reset)
    {
    	btn_reset.click (function ()
    	{
    		var file_ctl = $("#file_ctl > a:first");
    		if (file_ctl)
    			file_ctl.nextAll ("input[type=file]").remove ();
    		
		    var cb_ctl = $("#dict_ctl > select:first");
    		if (cb_ctl)
    			cb_ctl.nextAll ("select").remove ();
    		
    		var curr_ctl = WTF_give_me_first("#curr_ctl > div[class=curr_ctl]");
    		if (curr_ctl)
    		{
    			curr_ctl.nextAll ("div[class=curr_ctl]").remove ();
    			curr_ctl.children ("select").attr ("disabled", false);
    		}
    	})
    }
    var btn_submit = $("#btn_submit");
    if (btn_submit)
    {
    	btn_submit.click (function ()
    	{
    		var curr_ctl = WTF_give_me_first("#curr_ctl > div[class=curr_ctl]");
    		if (curr_ctl)
    		{
    			def_btn = $("#curr_ctl > input[type=checkbox]"); 
    			if (def_btn && !def_btn.attr("checked"))
	    			curr_ctl.children ("select").attr ("disabled", false);
    		}
			$("#file_ctl").remove();
    	})
    }
}

function _log (msg)
{
	alert (msg);
}

// Enable/disable advertisement
function advToggle (ctl, id)
{
	var cs = $(ctl).attr ("class");
	var cmd = "adv_disable";
	var newcls = "adv_disabled";
	if (cs == "adv_disabled")
	{
		cmd = "adv_enable";
		newcls = "adv_enabled";
	}
	$.getJSON ("/json/"+cmd+"?id=" + id, function (data)
	{
		if (data.success == true)
		{
			$(ctl).attr("class", newcls);
			$(ctl).text(cs == "adv_disabled"?"Деактивировать":"Aктивировать");
		}
	});
}
// Mark as deleted
function advDel (id)
{
	if( confirm ("Вы действительно хотите удалить это объявление?") ){
		$.getJSON ("/json/adv_delete?id=" + id, function (data)
		{
			if (data.success == true)
				$("div[id=a"+id+"]").remove ();
		});
	}
	return false;
}

function advBump (id)
{
	var adv_row = $("div[id=a"+id+"]");
	var title = adv_row.find("h2").children("a").text ();
	if( confirm ('Обновить дату объявления: "'+title+'"') ){
	$.getJSON ("/json/adv_bump?id=" + id, function (data)
	{
		if (data.success == true)
		{
			adv_row.find("td.bump").remove ();
			adv_row.find("h3").text (data.mtime);
			adv_row.find("h3").css("font-weight", "bold");
			$("#avail-bumps").text (Number($("#avail-bumps").text())-1);
		}
		else if (data.error) alert (data.error);
	});
	}
}


function regCurrencyHandlers ()
{
    var add_btn = $("#curr_ctl > a:first"); 
    if (add_btn)
    {
//    	_log ("add_btn found" + add_btn + " - " + add_btn.length);
    	add_btn.click (function () 
    	{
    		var curr_ctl = $("#curr_ctl > div[class=curr_ctl]:last");
    		var curr_sel = curr_ctl.children ("select:first");
    		var curr_count = curr_sel.children ("option").length;
    		var def_btn = $("#curr_ctl > input[type=checkbox]:first");
    		if (def_btn && def_btn.attr("checked"))
    			return false;
    		if (curr_count > $("#curr_ctl > div[class=curr_ctl]").length)
    		{
   				var nf = curr_ctl.clone ();
   				// remove already choosen currency types
   				nf.children ("input").val("")
//   				nf.children ("select").children("option[value=" + curr_sel.val () + "]").remove();
   				nf.insertAfter (curr_ctl);
//   				curr_ctl.children ("select").attr ("disabled", true);
    		
	    		curr_ctl.after (nf);
//    			curr_ctl.after ("<br/>");
    			nl = add_btn.clone ();
    			nl.html ("Удалить эту цену");
    			curr_ctl.append (nl);
    			nl.click (function ()
    			{
    				$(this).unbind ("click");
    				$(this).parent ().remove ();
    				return false;
    			});
   			}
   			return false;
    	})
    }
    var def_btn = $("#curr_ctl > input[type=checkbox]:first"); 
    if (def_btn)
    {
    	def_btn.click (function () 
    	{
    		if (def_btn.attr("checked"))
    		{
	    		var curr_ctl = $("#curr_ctl > div[class=curr_ctl]:last");
    			if (curr_ctl)
    			{
    				curr_ctl.prevAll ("div[class=curr_ctl]").remove ();
	   				curr_ctl.children ("select").attr ("disabled", true);
	   				curr_ctl.children ("input").attr ("disabled", true);
	   				add_btn.attr ("disabled", true);
	   				curr_ctl.children ("input").val ("");
    			}
    		}
    		else
    		{
	    		var curr_ctl = $("#curr_ctl > div[class=curr_ctl]:first");
    			if (curr_ctl)
    			{
	   				curr_ctl.children ("select").attr ("disabled", false);
	   				curr_ctl.children ("input").attr ("disabled", false);
	   				add_btn.attr ("disabled", false);
    			}
    		}
    	})
    }
}
function generateHash (len)
{
    var uuid = "";
    for (i = 0; i < 32; i++) {
      uuid += Math.floor(Math.random() * 16).toString(16);
    }
	return uuid;
}

function dbgInit()
{
	$("#dfclose").click (function()
	{
		$("#bdebugger").toggleClass("hidden");
	});
	$("#bdebugger").val("Debug initialized");
}

function ___(str)
{
	var dbg = $("#bdebugger");
	dbg.val(dbg.val()+"\n"+str);
}

function moveImage (ctl, direction)
{
	ctl = $(ctl).parent();
	var npos;
	if (direction == 1)
		npos = ctl.next(".p-item");
	else
		npos = ctl.prev(".p-item");
	if (npos.length == 0 || npos.attr("id") == "t_tpl")
		return;
	if (direction == 1)
		ctl.insertAfter (npos);
	else
		ctl.insertBefore (npos);
	var qq = 1;
}

var uploadCounter = 0;
function upload (ctl,fid,title)
{
	var fetch_timer_id;
	var fname = ctl.val ();
	if (fname == "" || !fname)
		return;
	var fext = fname.substr (fname.lastIndexOf('.'));
	var file_max = $("#maximages").val ();
	
	var uf = $("form#form"+fid);
	var pf = $("iframe#frame"+fid);
	var ctl_copy = ctl.clone ();
	___("Trying to upload: "+ctl.val());
	ctl.replaceWith (ctl_copy);
	uf.empty ();
	uf.append (ctl);
	___("File control added to form: "+ctl.val());
	ctl = ctl_copy;
	ctl.val("");
	ctl[0].value="";
	uf.append ($("#file_ctl").children("input").clone());
	var uuid = generateHash (32);
___("New Image progress-id generated: "+uuid);
	uf.attr("action", "/upload?X-Progress-ID="+uuid);
	
	var progress = ctl.parent().children("span");
	progress.text ("0%");
	$("#b_upload").attr ("disabled", "true");
	$("#b_post").attr ("disabled", "true");
	pf.load (function ()
	{
		___("iframe.load()");
		pf.unbind();
		$($(this)[0].contentDocument).ready(function(){
		___("iframe.document.ready()");
		$(this).unbind();
		var i2 = window.setInterval (function()
		{
			___("Upload finished, iframe content: >>"+pf.contents().text()+"<<");
																				
		var data = pf.contents().find("body").text();
		___("iframe data received: >>"+data+"<<")
		if (!(data == "" || !data))
		{
			try{data=$.parseJSON (data);}catch(e)
			{
				___("parseJSON() failed: "+e)
				___(">>>>>>>>>"+data.search("Blank page"));
				if (data.search("Blank page") >= 0)
				{
					___("Waiting till browser update iframe DOM");
					return;
				}
				else
//					data=[{valid:data}];
					data=[{valid:"Произошла ошибка:"+data}];
			}
			___("iframe data parsed: >>"+data+"<<")
			if (data.length > 0)
			{
				progress.text (data[0].valid);
				pf.result = data[0].valid;
			}
		}
		if (data && data.length > 0)
			data = data [0];
		
		var t_item = $("#t_tpl"), n_item;
		var adv_id = "";//$("input[name=id]").attr ("value");
		var t_name = t_item.children(".img-frame").children("img").attr ("alt");
		var i_count = t_item.parent ().children ().length;
		if (data.preview == "OK" & data.valid == "OK")
		{
			___("Upload succeeded, updating preview images");
			n_item = t_item.clone (true);
			var img = n_item.children(".img-frame").children("img");

			img.attr("src",t_name+uuid+"/"+uuid+"_"+Number(data.field.substr(2))+fext);
			if (title==$(".img-title-hint").val()) title="";
			img.attr("alt", title)
			img.attr("title", title)
			n_item.find("input.i-id").attr("value","u_"+uuid+"_"+Number(data.field.substr(2))+fext);
			n_item.find("input.i-title").attr("value",title);
			n_item.removeClass ("hidden");
			n_item.removeAttr("id");
			n_item.appendTo(t_item.parent ());
/*			
			n_item.children("a.del-img").click(function (){ return removeImage2 (this); });
			n_item.children("a.prev_a").click(function (){ return moveImage (this, -1); });
			n_item.children("a.next_a").click(function (){ return moveImage (this, 1); });
*/			
			if (title!="")
				n_item.find("p").text(title);
			___("Preview created: "+adv_id+"_"+Number(data.field.substr(2))+fext);
			removeImage(ctl.siblings("a"));
			if (i_count+1 > file_max)
			{
				$("#file_ctl").addClass ("hidden");
				$("#b_upload").addClass ("hidden");
			}
		}
		else
			ctl.parent().children().removeClass("hidden");
		
		
		uploadCounter--;
		if (uploadCounter==0)
		{
			$("#b_post").removeAttr ("disabled");
			$("#b_upload").removeAttr ("disabled");
		}
		window.clearInterval(i2);
		}, 1500);
		window.clearInterval(fetch_timer_id);
		$("#file_ctl input[type=file]").unbind ("change");
		$("#file_ctl input[type=file]").bind ("change", uploadImagesDelayed);
	});});
	ctl.parent().children().addClass("hidden");
	progress.removeClass("hidden");
	
	___("Form submitted")
	uf.submit ();
	uploadCounter++;
	
	fetch_timer_id = window.setInterval (function()
	{
		try{fetch(uuid, progress, fetch_timer_id);}
		catch(e){window.clearInterval(fetch_timer_id);}
	}, 1000);
}

function fetch(uuid, progress, timer_id) 
{
    var req = new XMLHttpRequest();
    req.open("GET", "/progress", 1);
    req.setRequestHeader("X-Progress-ID", uuid);
    req.onreadystatechange = function () {
    if (req.readyState == 4) {
      if (req.status == 200) {
        /* poor-man JSON parser */
		___("Progress update received: >>"+req.responseText+"<<");
        var upload = eval(req.responseText);
        if (upload.state == 'done') 
			progress.text ("Загружен");
        else if (upload.state == 'uploading') 
			progress.text (Math.floor(100 * upload.received / upload.size) + "%")
        /* we are done, stop the interval */
        if (upload.state == 'done' || upload.state == 'error')
		{
          window.clearInterval(timer_id);
		}
      }
    }
  }
  req.send(null);
}
function uploadImages ()
{
	var fctl = $("#file_ctl").find("input[type=file]"), i;
	for (i = 0; i < fctl.length; i++)
		upload ($(fctl[i]), i+1, $(fctl[i]).next("input:first").val());
}
function uploadImagesDelayed ()
{
	var timer_id = window.setInterval (function()
	{
		uploadImages ();
		window.clearInterval(timer_id);
	}, 1000);
}
function WTF_give_me_last (selector)
{
	var ret = $(selector);
	if (ret && ret.length)
		ret = $(ret[ret.length-1]);
	return ret;
}
function WTF_give_me_first (selector)
{
	var ret = $(selector);
	if (ret && ret.length)
		ret = $(ret[0]);
	return ret;
}
function regFileUploadHandlers ()
{
    $("#file_ctl input[type=file]").bind ("change", uploadImagesDelayed);
	$("#b_upload").click (uploadImages);
    var add_btn = WTF_give_me_last("#file_ctl > a"); 
			
    if (add_btn)
    {
    	add_btn.click (function () 
    	{
    		var file_ctl = WTF_give_me_last("#file_ctl > div");
			file_ctl.children ().removeClass ("hidden");
			file_ctl.children ("span").addClass ("hidden");
    		var file_count = $("#file_ctl").children("div").length + $("div.p-item").length - 1;
    		var file_max = $("#maximages").val ();
			if (file_count >= file_max)
				return false;
    			
    		nf = file_ctl.clone (true);
			
    		nf.children ("input[type=file]").val ("");
			
			nf.children ("input[type=file]").attr ("name", "f_"+newImageId ());
			nf.children ("input[type=file]").unbind ("change");
			nf.children ("input[type=file]").bind ("change", uploadImagesDelayed);
			
    		nf.children ("div.img-frame").children ("img").remove ();
			nf.children ().removeClass ("hidden");
			nf.children ("span").addClass ("hidden");
    		file_ctl.after (nf);
    		
    		if (file_count + 1 >= file_max)
    			add_btn.attr ("style", "display:none;");
    			
    		return false;
    	});
    }
	WTF_give_me_last("#file_ctl > div").children ("input[type=file]").attr ("name", "f_"+newImageId ())
	var file_count = $("#file_ctl").children("div").length + $("div.p-item").length - 1;
	var file_max = $("#maximages").val ();
	if (file_count >= file_max)
		add_btn.attr ("style", "display:none;");
		
    $("a.del-img").click (function (){ return removeImage2 (this); });
	$("a.prev_a").click(function (){ return moveImage (this, -1); });
	$("a.next_a").click(function (){ return moveImage (this, 1); });
	
	$("#b_post").click (function ()
	{
		$("#file_ctl").find("input").attr ("disabled", "true");
		$("#b_post").attr ("disabled", "true");
		$("input#advform-cat").val("")
		$("#category_chooser").find("select").each(function(pos, ctl){
			var nc = $(ctl).val();
			if (nc && nc != "") 
				$("input#advform-cat").val(nc);
		});
		if (uploadCounter==0)
			$("#msg_form").submit ();
		else
		{
			var timer_id = window.setInterval (function()
			{
				if (uploadCounter==0)
					$("#msg_form").submit ();
				window.clearInterval(timer_id);
			}, 1000);
		}
	});
	
	$("div.p-item div.ititle").each(function(i, e){
		attachInlineEditor (e);
	});
/*	
	$("div.ititle").hover (function(){
		$(this).addClass ("hover");
	}, 
	function()
	{
		$(this).removeClass ("hover");
	});
*/	
}

function newImageId ()
{
	var images = $("input.i-id"), i, maxid = 0, cur, pos;
	___("Checking images: "+images.length);
	for (i = 0; i < images.length; i++)
	{
		cur = images[i].value;
		pos = cur.lastIndexOf("_");
		if (pos < 0) continue;
		cur = cur.substring (pos+1, cur.indexOf("."));
		cur = Number (cur);
		if (cur >= maxid)
			maxid = cur+1;
	}
	images = $("#file_ctl").find("input.file");
	for (i = 0; i < images.length; i++)
	{
		cur = images[i].name;
		pos = cur.lastIndexOf("_");
		if (pos < 0) continue;
		cur = cur.substring (pos+1);
		cur = Number (cur);
		if (cur >= maxid)
			maxid = cur+1;
	}
	___("New ID generated: "+maxid);
	return maxid;
}

function removeImage (ctl)
{
	___("Removing upload control");
	if ($("#file_ctl").children("div").length > 1)
	{
		$(ctl).parent ().remove ();
		___("extra file control removed");
	}
	else
	{
		$(ctl).parent ().children ("div.img-frame").children ("img").remove ();
		$(ctl).parent ().children ("span").text ("");
		$(ctl).parent ().children ("input[type=file]").val ("");
		$(ctl).parent ().children ("input[type=text]").val ("");
		$(ctl).parent ().children ().removeClass("hidden");
		$(ctl).parent ().children ("span").addClass("hidden");
		$(ctl).parent ().children ("input[type=hidden]").remove ();
		
		$(ctl).parent ().children ("input[type=file]").attr("name", "f_"+newImageId ());
	}
	WTF_give_me_last("#file_ctl > a").attr ("style", "display:inline;");
    return false;
}
function removeImage2 (a)
{
	var item = $(a).parent();
	var img_id = item.find("input.i-id").val();
	var adv_id = $("input[name=id]").val();
/*	
	if (adv_id && img_id && img_id.substr(0,1)=="n")
		$.getJSON ("/json/img_delete?id="+adv_id+"&img="+img_id, function (data){
			if (data.success == true)
			{
			}
		});
*/		
	item.remove ();
	WTF_give_me_last("#file_ctl > a").attr ("style", "display:inline;");
	$("#file_ctl").removeClass("hidden");
	$("#file_ctl").children ().removeClass ("hidden");
	$("#file_ctl").children ("span").text ("");
	$("#file_ctl").children ("span").addClass ("hidden");
	$("#b_upload").removeClass("hidden");
    $("#file_ctl input[type=file]").unbind("change");
    $("#file_ctl input[type=file]").bind ("change", uploadImagesDelayed);
	return false;
}

function regInputHandlers ()
{
	// Hint strings in input fields
	var fields = ["#search", "#login", "#category", "#search2", "input#inline-text", "#feedback", "#fb-email",
			".img-title", ".rule"];
	var i = 0;
	for (i = 0; i < fields.length; i++)
		regInputHandler (fields [i]);
		
	// Inline text editing
	$("input#apply").click (function()
	{
		$("div#inline-edit").css ("display","none");
		var ctl = $("input#inline-text");
		var tgt = ctl.data("tgt");
		if (!tgt)
			return;
		var txt = ctl.val();
		if (!txt || !txt.length)
			txt = "Подписать";
		$(tgt).children("p").text (txt);
		$(tgt).children("input").attr ("value",txt);
//		$(tgt).css("border","none");
	});
	
	$("input#close").click (function()
	{
		$("div#inline-edit").css ("display","none");
		var ctl = $("input#inline-text");
		var tgt = ctl.data("tgt");
		if (!tgt)
			return;
//		$(tgt).css("border","none");
	});
}

function attachInlineEditor (tgt)
{
	tgt = $(tgt);
	tgt.click (function()
	{
		var ctl = $(this);
		var pos = ctl.offset ();
		$("input#close").click();
		var edit_form = $("div#inline-edit");
		edit_form.css({"top":pos.top-12+"px", "left":pos.left+ctl.width()/2+4+"px", "display":"block"});
//		ctl.css("border", "1px solid #A15E1B");
		var txt = ctl.children("p").text();
		if (txt=="Подписать")
			txt = ""
		edit_form.children("#inline-text").val(txt).data("tgt", this).focus();
		return false;
	});
}

function regTreeDictHandlers ()
{
    var dict_ctl = $("div[class=dict_control]"); 
    if (!dict_ctl)
    	return;
    	
    var i = 0;
    for (i = 0; i < dict_ctl.length; i++)
    {
	    // Load top level
    	var cb_ctl = $(dict_ctl[i]).children ("div.dict_ctl").children ("select");
    	var slug = $(dict_ctl[i]).children ("div.dict_ctl:first").children("input#dict_id:first").val();
    	var use_id = $(dict_ctl[i]).children("div.dict_ctl:first").children("input#use_id:first").val();
    	if (use_id == "yes")
    		use_id = true;
    	if (cb_ctl && (cb_ctl.length > 0))
		{
			for (var j = 0; j < cb_ctl.length; j++)
    			loadDict ($(cb_ctl[j]), slug, use_id, 0, true);
		}
    }
}

function loadDict (cb_ctl, slug, use_id, node, use_parent)
{
	var loaderUrl = $("#loader_link").attr ("value");
	
	if (!loaderUrl || (slug == "classifier.ukrcity") || (slug=="classifier.autovendors"))
		loaderUrl = "/treeclf/children";
		
	var addOther = !(slug == "classifier.ukrcity") && (node != 0);
	
	var par_id = cb_ctl.parent().children("#par_id").val ();
	if (par_id && par_id != "" && use_parent)
		node = par_id;
	else par_id = false;
		
	$.getJSON (loaderUrl + "?slug=" + slug + "&node=" + node, function (data)
	{
		var i = 0;
		var val
		var cs = cb_ctl.children ();
		var child_id = 0;
		if (cs)
			cs = cs.attr ("value");
		
		cb_ctl.empty ();
		if (cb_ctl [0])
		{
			cb_ctl [0].my_data = data;
			cb_ctl [0].my_parent = node;
		}
		cb_ctl.append ("<option></option>");
		for (i = 0; i < data.length; i++)
		{
			if (use_id) 
				val = data [i].id;
			else
				val = data [i].data;
			str_opt = "<option value='" + data [i].id+","+data [i].data + "' id='" + i + "'";
			if (cs == val && val != "")
			{
				child_id = data [i].id;
				str_opt += " selected='True'";
			}
			str_opt +=">" + data [i].data + (data[i].leaf?"":" >") + "</option>";
//			if (data[i].leaf) cs = false;
			cb_ctl.append (str_opt);
			if (data [i].has_changes)
				cb_ctl.data ("reload", true);
		}
		if (addOther)
			cb_ctl.append ("<option value=''>Прочее</option>");

		cb_ctl.unbind ("change");
		cb_ctl.change (function ()
		{
			___("OnChange: "+slug+" ["+this.value+"]");
			if (cb_ctl.data("reload") && this.value.search($("input[name=cat]").val()+",") < 0 && this.value!="")
			{
				$("input[name=cat]").val(this.value);
				$("input[name=val]").val("no");
				$("#msg_form").submit ();
				return;
			}
			
			sel_pos = this.selectedIndex - 1;
			// Delete next choosers, if any
			var div = $(this).parent("div")
			div.nextAll ("div").children("select").unbind ("change");
			div.nextAll ("div").remove ();
			if ((this.selectedIndex != 0) && cb_ctl [0] && cb_ctl [0].my_data && (cb_ctl [0].my_data [sel_pos].leaf == false))
			{
				div_new = div.clone ();
				div_new.attr ("style", "display:none");
				div.parent ("div").children ("span[class=sandglass]").attr ("style", "display:block");
				// Create new chooser
				cb_new = div_new.children("select");
				cb_new.empty ();
				div.after (div_new);
				loadDict (cb_new, slug, use_id, cb_ctl [0].my_data [sel_pos].id);
			}
		});
		if (node != 0)
			cb_ctl.parent ("div").attr ("style", "display:inline");
		cb_ctl.parent ("div").parent ("div").children ("span[class=sandglass]").attr ("style", "display:none");

//		if (cs && !par_id)
//			loadDict (cb_ctl.parent("div").next("div").children("select"), slug, use_id, child_id);
		
		if (cb_ctl.parent("div").next("div").children("select").length == 0)
			cb_ctl.trigger ("change");
		
	});
}

function regTreeDictHandlers_qq ()
{
    var dict_ctl = $("div[class=dict_control]"); 
    if (!dict_ctl)
    	return;
    	
    var i = 0;
    for (i = 0; i < dict_ctl.length; i++)
    {
	    // Load top level
    	var cb_ctl = $(dict_ctl[i]).children ("div[class=dict_ctl]:first").children ("select:first");
    	var slug = $(dict_ctl[i]).children ("div[class=dict_ctl]:first").children ("input[id=dict_id]:first").val ();
    	var use_id = $(dict_ctl[i]).children ("div[class=dict_ctl]:first").children ("input[id=use_id]:first").val ();
    	if (use_id == "yes")
    		use_id = true;
    	if (cb_ctl && (cb_ctl.length > 0))
    		loadDict (cb_ctl, slug, use_id, 0);
    }
}

function loadDict_qq (cb_ctl, slug, use_id, node)
{
	var loaderUrl = $("#loader_link").attr ("value");
	
	if (!loaderUrl || (slug == "classifier.ukrcity"))
		loaderUrl = "/treeclf/children";
		
	$.getJSON (loaderUrl + "?slug=" + slug + "&node=" + node, function (data)
	{
		var i = 0;
		var val
		var cs = cb_ctl.children ();
		var child_id = 0;
		if (cs)
			cs = cs.attr ("value");
		
		cb_ctl.empty ();
		if (cb_ctl [0])
		{
			cb_ctl [0].my_data = data;
			cb_ctl [0].my_parent = node;
//			if (cb_ctl[0].my_data [cb_ctl [0].selectedIndex].leaf == true)
//				cs = false;
		}
		cb_ctl.append ("<option></option>");
		for (i = 0; i < data.length; i++)
		{
			if (use_id) 
				val = data [i].id;
			else
				val = data [i].data;
			str_opt = "<option value='" + val + "' id='" + i + "'";
			if (cs == val)
			{
				child_id = data [i].id;
				str_opt += " selected='True'";
			}
			str_opt +=">" + data [i].data + "</option>";
			cb_ctl.append (str_opt);
		}
		cb_ctl.unbind ("change");
		cb_ctl.change (function ()
		{
			sel_pos = this.selectedIndex - 1;
			// Delete next choosers, if any
			var div = $(this).parent("div")
			div.nextAll ("div").children("select").unbind ("change");
			div.nextAll ("div").remove ();
			if ((this.selectedIndex != 0) && cb_ctl [0] && (cb_ctl [0].my_data [sel_pos].leaf == false))
			{
				div_new = div.clone ();
				div_new.attr ("style", "display:none");
				div.parent ("div").children ("span[class=sandglass]").attr ("style", "display:block");
				// Create new chooser
				cb_new = div_new.children("select");
				cb_new.empty ();
				div.after (div_new);
				loadDict (cb_new, slug, use_id, cb_ctl [0].my_data [sel_pos].id);
			}
		});
		if (node != 0)
			cb_ctl.parent ("div").attr ("style", "display:inline");
		cb_ctl.parent ("div").parent ("div").children ("span[class=sandglass]").attr ("style", "display:none");

		if (cs)
			loadDict (cb_ctl.parent("div").next("div").children("select"), slug, use_id, child_id);
		if (cb_ctl.parent("div").next("div").children("select").length == 0)
			cb_ctl.trigger ("change");
	});
}

function regRegionHandlers ()
{
    var reg_btn = $("li[class=rc_btn]"); 
    if (!reg_btn)
    	return;
//	if (reg_btn.length == 0)
//		return;
    	
    var i = 0;
    for (i = 0; i < reg_btn.length; i++)
    {
    	var ctl = $(reg_btn[i]);
    	ctl.click (function ()
    	{
    		var btns = $("li[class=rc_caption]");
    		var i = 0;
    		for (i = 0; i < btns.length; i++)
    			$(btns[i]).attr ("class", "rc_btn");
	    	$(this).attr ("class", "rc_caption");
	    	cid = $(this).children ("a").attr ("id");
	    	var reg_ctl = $("div[class=region_ctl]").children("select");
	    	$("div[class=region_ctl]").nextAll("div").children("select").unbind ("change");
	    	$("div[class=region_ctl]").nextAll("div").remove ();
	    	if (cid == "ua")
	    		cid = 68;
	    	else
	    	if (cid == "ru")
	    		cid = 30667;
	    	else
	    	if (cid == "by")
	    		cid = 30668;
	    	else
	    		cid = 0;
			loadDict (reg_ctl, "classifier.ukrcity", true, cid);
			
			if ($.browser.msie && $.browser.version.substr(0,1) == "6")
			{
				reg_ctl.css ("display", "inline");
				$("select#search_cats").css ("display", "none");
			}
			
			reg_ctl = $("div[class=region_chooser]");
// 			reg_ctl.attr ("style", "display:block;");
			reg_ctl.css ("left", $(this).position ().left + "px");
			reg_ctl.css ("top", $(this).position ().top + $(this).height () + "px");
			reg_ctl.show ("fast");
    		return false;
    	});
    }
    $("div[class=region_chooser]").click (function () 
    {
    	return false;
    });
    $("body").click (function ()
    {
		$("div[class=region_chooser]").attr ("style", "display:none");
		if ($.browser.msie && $.browser.version.substr(0,1) == "6")
		{
			$("div[class=region_chooser]").children("div").children("select").css ("display", "none");
			$("select#search_cats").css ("display", "inline");
		}
		var btns = $("li[class=rc_caption]");
		var i = 0;
		for (i = 0; i < btns.length; i++)
			$(btns[i]).attr ("class", "rc_btn");
    });
}

function getHost (id)
{
	if (id == 68)
		return "stolbik.ua";
	else
	if (id == 30667)
		return "stolbik.ru";
	else
	if (id == 30668)
		return "stolbik.by";
	else
		return ""
}

function changeRegion (ctl)
{
	var cb_ctl = $(ctl).parent ("div").children("select");
	sel_pos = cb_ctl [0].selectedIndex - 1;
	if (sel_pos < 0)
		return;
	var cid = cb_ctl [0].my_data [sel_pos].id;
		
	// Determine new domain
	var id = $("div[class=region_chooser]").children ("div:first").children ("select:first") [0].my_parent;
	if (id == 0)
		id = $($("div[class=region_chooser]").children ("div")[1]).children ("select:first") [0].my_parent;
		
	var filter = "";
	var host = "";
	var url = parseUri (window.location);
	host = getHost (id);
	
	if (getHost (cid) == "")
		filter = cb_ctl [0].my_data [sel_pos].text;
	
	var cp = filter.indexOf (" ");
	if (cp > 0)
		filter = filter.substr (0, cp);
	
		
	if ((host == url.host) && (filter == window.currentFilter))
	{
		$("body").click ();
		return false;	// user choose region he already browsing, just close region chooser
	}
	
	var nl = "";
	if (window.currentFilter != "")
	{	
		// We are in some region page
		if (url.file.indexOf (window.currentFilter + ".") == -1)
		{
			// We can't open the same page with new region filter, so just open main page for selected region
			if (filter == "")
				nl = "http://" + host + "/";
			else
				nl = "http://" + host + "/" + filter + ".html"
		}
		else
		{
			// Filter string exists in current url
			var file = url.file
			if (filter == "")
				nl = "http://" + host + url.directory + file.replace (window.currentFilter + ".", "");
			else
				nl = "http://" + host + url.directory + file.replace (window.currentFilter + ".", filter + ".");
				
			// replace p<page number>. by p1., if any
			nl = nl.replace (/p[0-9]+\.html/, "p1.html");
		}
	}
	else
	{
		// We are on domain page
		if (url.directory.indexOf ("/catalog/") == 0)
		{
			// We are at category message list - 1st page of same category for selected region
			if (filter == "")
				nl = "http://" + host + url.directory + "p1.html"
			else
				nl = "http://" + host + url.directory + filter + ".p1.html"
		}
		else
		{
			// We can't open the same page with new region filter, so just open main page for selected region
			if (filter == "")
				nl = "http://" + host + "/";
			else
				nl = "http://" + host + "/" + filter + ".html"
		}
	}
//	alert (nl);
	window.location = nl;
	return false;
}

function chk_len (ctl, max)
{
	var text = ctl.value;
	if (text.length > max) 
		ctl.value = text.substr (0, max-1);
}

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};

function regFilterHandlers ()
{
    var btn = $("p[class=fc_btn]"); 
    if (!btn)
    	return;
	if (btn.length == 0)
		return;
	
	btn.click (function ()
	{
		var cat_id = $("#tgt_cat_id");
		if (cat_id.length == 0)
			return;
		cat_id = cat_id.attr ("value");
		if (cat_id.length == 0)
			return;
		$.getJSON ("/json/get_filters?cat=" + cat_id, function (data)
		{
			btn[0].my_data = data;
			fillFilters (btn[0].my_data);
			showFilters ($(btn[0]));
		});
		return true;
	});
    $("body").click (function ()
    {
		$("div[class=filter_chooser]").attr ("style", "display:none");
		var btns = $("p[class=fc_caption]");
		for (i = 0; i < btns.length; i++)
			$(btns[i]).attr ("class", "fc_btn");
    });
	sbtn = $("#btn_search").click (setSearchCategory);
	sbtn = $("#btn_save").click (setSearchCategory);
	sbtn = $("#btn_move").click (function ()
	{
		if (!confirm ("Вы уверены, что хотите перенести эти обьявления?"))
			return false;
		return setSearchCategory ();
	});
/*	
	sbtn = $("#btn_moveall").click (function ()
	{
		if (!confirm ("Вы уверены, что хотите перенести эти обьявления?"))
			return false;
		var cat_id = $("#tgt_cat_id");
		if (cat_id.length == 0)
			return false;
		cat_id = cat_id.attr ("value");
		if (cat_id.length == 0)
			return false;
		$.getJSON ("/json/apply_filters?cat=" + cat_id, function (data)
		{
			if (data && data.length > 0)
				alert (data[0]);
		});
		return false;
	});
*/	
}

function setSearchCategory ()
{
	$("#cat_id").attr ("value", 35);
	var cs = $("#category_chooser").children ("div");
	var i = 0;
	var val = "";
	for (i = 0; i < cs.length; i++)
	{
		val = $(cs [i]).children ("select:first").val ();
		if (val && (val.length > 0))
			$("#cat_id").attr ("value", val);
	}
	return true;
}

function fillFilters (data)
{
	var fc = $("#filter_chooser");
	if (fc.length == 0)
		return;
	template = fc.children ("a::first");
	if (template.length == 0)
		return;
		
	fc.empty ();
	fc.append (template);
	
	var i = 0;
	for (i = 0; i < data.length; i++)
	{
		var link = template.clone ();
		var href = template.attr ("href");
		if (data [i].query)
			href = href + "&q=" + data [i].query + "&cat=" + data [i].cat;
		if (data [i].filters)
		{
			var j = 0;
			for (j = 0; j < data [i].filters.length; j++)
				href = href + "&" + data [i].filters[j].id + "=" + data [i].filters[j].value;
		}
		link.attr ("href", href);
		link.empty ();
		link.append (data[i].name);
		fc.append ("<br>");
		fc.append (link);
		fc.append (" ("+data [i].count+")");
		link = template.clone ()
		href = template.attr ("href") + "&delfilter=" + data [i].id;
		link.attr ("href", href);
		link.empty ();
		link.append ("удалить");
		fc.append ("&nbsp;-&nbsp;");
		fc.append (link);
	}
}

function showFilters (btn)
{
	var ctl = $("#filter_chooser");
	btn.attr ("class", "fc_caption");
	ctl.css ("left", btn.position ().left + "px");
	ctl.css ("top", btn.position ().top + btn.height () + "px");
	ctl.show ("fast");
}

// Image preview script 
this.imagePreview = function(){	
	/* CONFIG */
		
		xOffset = 10;
		yOffset = 30;
		
		// these 2 variable determine popup's distance from the cursor
		// you might want to adjust to get the right result
		
	/* END CONFIG */
	$("a.preview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		arrImg = this.id.split("|");
//		alert(arrImg);
//		var c = (this.t != "") ? "<br/>" + this.t : "";
		var c = "";
		listImg = "";
		for (i = 0; i < arrImg.length; i++){
			listImg += "<img src='"+ arrImg[i] +"' alt='' />";
		}
		$("body").append("<p id='preview'>"+ listImg +"</p>");								 
/*		$("body").append("<p id='preview'><img src='"+ this.name +"' alt='' />"+ c +"</p>");								 */
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
    },
	function(){
		this.title = this.t;	
		$("#preview").remove();
    });	
	$("a.preview").mousemove(function(e){
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});			
};

