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

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 = $("#curr_ctl > div[class=curr_ctl]:first");
    		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 = $("#curr_ctl > div[class=curr_ctl]:first");
    		if (curr_ctl)
    		{
    			def_btn = $("#curr_ctl > input[type=checkbox]"); 
    			if (def_btn && !def_btn.attr("checked"))
	    			curr_ctl.children ("select").attr ("disabled", false);
    		}
    	})
    }
}

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

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 regFileUploadHandlers ()
{
	//TODO: Add handler to every file upload field
	// (possibly it implemented by jsquery and so - already done)
    var add_btn = $("#file_ctl > a:last"); 
    if (add_btn)
    {
    	add_btn.click (function () 
    	{
    		var file_ctl = $("#file_ctl > div:last");
    		var file_count = $("#file_ctl").children("div").length;
    		var file_max = $("#maximages").val ();
			if (file_count >= file_max)
				return false;
    			
    		nf = file_ctl.clone ();
    		nf.children ("input[type=file]").val ("");
    		nf.children ("input[type=hidden]").remove ();
    		nf.children ("img").remove ();
    		file_ctl.after (nf);
    		
    		if (file_count + 1 >= file_max)
    			add_btn.attr ("style", "display:none;");
    			
    		return false;
    	});
    }
	var file_count = $("#file_ctl").children("div").length;
	var file_max = $("#maximages").val ();
	if (file_count >= file_max)
		add_btn.attr ("style", "display:none;");
    
    var fc = $("#file_ctl input[type=file]");
    fc.change (function ()
    {
		$(this).parent ().children ("img").remove ();
		$(this).parent ().children ("input[type=hidden]").remove ();
    });
}
function removeImage (ctl)
{
	if ($("#file_ctl").children("div").length > 1)
	{
		$(ctl).unbind ("click");
		$(ctl).parent ().remove ();
	}
	else
	{
		$(ctl).parent ().children ("img").remove ();
		$(ctl).parent ().children ("input[type=file]").val ("");
		$(ctl).parent ().children ("input[type=hidden]").remove ();
	}
	$("#file_ctl > a:last").attr ("style", "display:block;");
    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[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 (cb_ctl, slug, use_id, node)
{
	$.getJSON ("/treeclf/children?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='" + 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.change (function ()
		{
			sel_pos = this.selectedIndex - 1;
			// Delete next choosers, if any
			var div = $(this).parent("div")
			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;
    	
    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").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;
		
	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*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};
