//
// the nace Business category selector, wbshang @ 2009.4.21
// used in the index and search form
//

var NACE_get_selected_value = null;
var NACE_enable_selector = null;
var NACE_disable_selector = null;

(function() {

var bc_selector = null;
var current_level = -1;
var previous_selected = [null, null, null, null];
var bc_input = null;
var init_disabled = false;

function init() {
	bc_selector = document.getElementById("index_page_quick_search_businesscategory");
	if(!bc_selector)
		return;
	bc_input = bc_selector.getElementsByTagName("input")[0];
	var params = parse_location("search");
	if("businesscategory" in params)
		parse_previous_selected(params.businesscategory);
	do_request();
}

function reset() {
}

function parse_previous_selected(str) {
	// user input manually
	if(str.charAt(0) == '*') {
		init_disabled = true;
		return;
	}
	var code_lens = [1, 3, 5, 6];
	for (var i = 0; i < code_lens.length; i++) {
		if(str.length > code_lens[i])
			previous_selected[i] = str.substr(0, code_lens[i]);
	}
}

function do_request(code) {
	var params = [];
	params.push("lang=" + current_lang);
	if(code)
		params.push("id=" + code);
	params.push("from=index");
	doHttpRequest(generate_uri("contactmgr/conf/ajax_get_bc_list.php", params), null, ajax_callback, false);
}

function ajax_callback(response) {
	if("error" in response) {
		alert(response.error);
		return;
	}
	var level = current_level + 1;
	if(current_level < 3) {
		//refresh category
		// use a container to fix ie selection width
		var span = document.createElement("span");
		span.className = "select-box";
		var new_sel = document.createElement("select");
		new_sel.className = "bc-selector-select";
		// fix: ie can not use new Option(...)
		var opt = document.createElement("option");
		opt.setAttribute("value", "*");
		opt.appendChild(document.createTextNode("All"));
		new_sel.appendChild(opt);
		for (var i = 0; i < response.length; i++) {
			var opt = document.createElement("option");
			opt.setAttribute("value", response[i][0]);
			if(previous_selected[level] == response[i][0])
				opt.setAttribute("selected", "selected");
			opt.appendChild(document.createTextNode(response[i][0] + " " + response[i][1]));
			new_sel.appendChild( opt );
		}
		new_sel.setAttribute("level", level);
		span.appendChild(new_sel);
		bc_selector.appendChild(span);
		// very strange: can not use bc.selector.appendChild(br)
		if(level > 0)
			bc_selector.insertBefore(document.createElement("br"), span);
		// fix ie selection width
		FixIESelectWidth(new_sel);
		new_sel.onchange = onchange_handler;
		if(previous_selected[level] != null) {
			// reset previous selected
			previous_selected[level] = null;
			onchange_handler.call(new_sel);
		}
		if(init_disabled) {
			NACE_disable_selector();
			init_disabled = false;
		}
	}
}

function onchange_handler() {
	current_level = parseInt(this.getAttribute("level"));
	//clear sublevels
	while(this.parentNode.nextSibling)
		bc_selector.removeChild(this.parentNode.nextSibling);
	// set the text input value
	if(this.value == '*') {
		var value = get_selected_value();
		bc_input.value = (value == '*' ? '' : value + '*');
	}
	else {
		bc_input.value = this.value + '*';
		if(current_level < 3)
			do_request(this.value);
	}
}

NACE_get_selected_value = function get_selected_value() {
	if(!bc_selector)
		return '*';
	var sels = bc_selector.getElementsByTagName("select");
	var value = '*';
	for (var i = 0; i < sels.length; i++) {
		if(sels[i].value == '*')
			break;
		else
			value = sels[i].value;
	}
	return value;
};

NACE_enable_selector = function enable_selector() {
	var sels = bc_selector.getElementsByTagName("select");
	for (var i = 0; i < sels.length; i++) {
		sels[i].removeAttribute('disabled');
	}
};

NACE_disable_selector = function disable_selector() {
	var sels = bc_selector.getElementsByTagName("select");
	for (var i = 0; i < sels.length; i++) {
		sels[i].setAttribute('disabled', 'disabled');
	}
};

addEvent(window, 'load', init, false);

})();
