function is_disclose_valid(quantity, disclose) {
	result = true;
	if (parseInt(quantity) < parseInt(disclose) || !validator.isPositiveInt(disclose) && disclose != "0" && disclose != "") {
		result = false;
	} else if (bank_name == "fransi" && disclose >= 5000) {
		result = false;
	} else if (bank_name == "aljazira" && parseInt(disclose) > Math.floor(parseInt(quantity) / 2)) {
		result = false;
	}
	return result;
}


function make_visible(obj) {
	if (!obj) return;
	if (obj.tagName && obj.tagName.toLowerCase() == "div") {	//	only divs are expandable now
		if (obj.style.display == "none") {
			obj.style.display = "block";
		}
	}
	if (!obj.parentNode) return;
	else return make_visible(obj.parentNode);
}

function on_condition_keypress(obj, ev){
	var form=document.forms["tokens"];
	var error1 = false;	 //checked error condition
	var selects = form.getElementsByTagName("select");
	var ids = -1;
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "token_market_type[]") {
			ids++;
		}
	}

	if (ids == -1) {
		error1 = false;
	} else if (ids == 0) {
		error1 = form["token_error[]"].value == "1" ? true : false;
	} else {
		for (var i = 0; i <= ids; i++) {
			if (form["token_error[]"][i].value == "1") {
				error1 = true;
				break;
			}
		}
	}
	if (ev==27) {
		cancel_edit(obj);} //after the Escape key has been pressed
	if (ev==13) {				//after the Enter key has been pressed
		if (!error1){
			apply_edit(obj);
		}
	}
	return false;
}

function on_order_keypress(obj, ev){
	var form = document.forms["orders"];
	var error_in_ord = false;
	var selects = form.getElementsByTagName("select");
	var ids = -1;
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "order_direction[]") {
			ids++;
		}
	}
	if (ids == -1) {
		error_in_ord = false;
	} else if (ids == 0) {
		error_in_ord = form["order_error[]"].value == "1" ? true : false;
	} else {
		for (var i = 0; i <= ids; i++) {
			if (form["order_error[]"][i].value == "1") {
				error_in_ord = true;
				break;
			}
		}
	}



	if (ev==27) { cancel_edit(obj); return false;}
	if (ev==13) {
		if(!is_link_disabled('toolbutton_add_order')){
			apply_edit(obj);
		}
		else if (!(document.getElementById("toolbutton_save_all").style.display == "none")){
			if (!error_in_ord){
				save_all(properties.selected_group_id);
			}
		}
	}
	return false;
}

function on_order_type_change(obj) {	//	DO should be default TIF for limit orders
	var form = obj.form;
	var objs = form[obj.name];
	//	get index
	var index = -1;
	for (var i = 0; i < objs.length; i++) {
		if (objs[i] == obj) {
			index = i;
			break;
		}
	}

	var order_order_type = form["order_order_type[]"];
	var order_tif = form["order_tif[]"];
	if (index != -1) {
		order_order_type = order_order_type[index];
		order_tif = order_tif[index];
	}
	if (order_order_type.value == "limit") {
		order_tif.selectedIndex = "day";
//		var tif_options = order_tif.options;
	}

	on_order_change_by_index(form, index);
}

function on_order_change(obj) {
	var form = obj.form;
	var objs = form[obj.name];
	//	get index
	var index = -1;
	for (var i = 0; i < objs.length; i++) {
		if (objs[i] == obj) {
			index = i;
			break;
		}
	}

	on_order_change_by_index(form, index);
}

function on_order_change_by_index(form, index) {
	one_or_more_elements_has_errors = false;

	var order_id = form["order_id[]"];
	var order_order_type = form["order_order_type[]"];
	var order_price = form["order_price[]"];
//	var order_fill_type = form["order_fill_type[]"];
//	var order_min_fill = form["order_min_fill[]"];
	var order_quantity = form["order_quantity[]"];
	var order_disclose = form["order_disclose[]"];
	var order_tif = form["order_tif[]"];
	var order_tif_date = form["order_tif_date[]"];
	var error = form["order_error[]"];

	if (index != -1) {
		order_id = order_id[index];
		order_order_type = order_order_type[index];
		order_price = order_price[index];
//		order_fill_type = order_fill_type[index];
//		order_min_fill = order_min_fill[index];
		order_quantity = order_quantity[index];
		order_disclose = order_disclose[index];
		order_tif = order_tif[index];
		order_tif_date = order_tif_date[index];
		error = error[index];
	}

	if (!validator.isPositiveInt(order_quantity.value)) {
		set_element_error(order_quantity, language.please_input_valid_quantity);
	} else {
		clear_element_error(order_quantity);
	}

	if (order_order_type.value == "limit") {
		order_tif.previousSelectedIndex = order_tif.selectedIndex;
		var options = order_tif.options;
		for (var i = 0; i < options.length; i++) {
			var option = options[i];
			if (option.getAttribute("limit_only")) {
				option.style.color = "menutext";
			}
		}
		order_price.disabled = false;
		if (!validator.isPositiveStrict(order_price.value)) {
			set_element_error(order_price, language.please_input_valid_price);
		} else {
			clear_element_error(order_price);
		}
	} else {
		var options = order_tif.options;
		for (var i = 0; i < options.length; i++) {
			var option = options[i];
			if (option.getAttribute("limit_only")) {
				option.style.color = "graytext";
			}
		}
		if (options[order_tif.selectedIndex].getAttribute("limit_only")) {
			if (order_tif.previousSelectedIndex !== undefined && !options[order_tif.previousSelectedIndex].getAttribute("limit_only")) {
				order_tif.selectedIndex = order_tif.previousSelectedIndex;
			} else {
				var found = false;
				var initial_index = order_tif.selectedIndex;
				while (order_tif.selectedIndex < order_tif.options.length - 1) {
					order_tif.selectedIndex++;
					if (!options[order_tif.selectedIndex].getAttribute("limit_only")) {
						found = true;
						break;
					}
				}
				if (!found) {
					order_tif.selectedIndex = initial_index;
					while (order_tif.selectedIndex > 0) {
						order_tif.selectedIndex--;
						if (!options[order_tif.selectedIndex].getAttribute("limit_only")) {
							found = true;
							break;
						}
					}
				}
				if (!found) {
					order_tif.selectedIndex = -1;
				}
			}
		}

		order_tif.previousSelectedIndex = order_tif.selectedIndex;

		order_price.disabled = true;
		if (!order_price.getAttribute("new_order") || order_price.default_value_cleared) {
			clear_element_error(order_price);
			order_price.value = "";
		}
	}

	var order_tif_date_button = get_obj_by_path(order_tif_date, "next");
	if (order_tif.value == "tif_date") {
//		order_tif_date.style.visibility = "visible";
//		order_tif_date_button.style.visibility = "visible";
		order_tif_date.disabled = false;
		order_tif_date_button.disabled = false;
		var tif_date_parts = order_tif_date.value.split("-");
		var tif_date_ok = false;
		var minimum_tif_date = get_minimum_tif_date();
		var maximum_tif_date = get_maximum_tif_date();
		if (tif_date_parts.length == 3) {
			var tif_date = new Date(tif_date_parts[2], tif_date_parts[1] - 1, tif_date_parts[0]);
			tif_date_ok = tif_date >= minimum_tif_date && tif_date <= maximum_tif_date;
			if (!tif_date_weekend_allowed) {
				w = maximum_tif_date.getDay();
				if (w == 4 || w == 5) {
					tif_date_ok = false;
				}
			}
		}
		if (tif_date_ok) {
			clear_element_error(order_tif_date);
		} else {
			var tif_date_error_message;
			if (tif_date_weekend_allowed) {
				tif_date_error_message = language.tif_date_must_be_within;
			} else {
				tif_date_error_message = language.tif_date_must_be_within_weekend_not_allowed;
			}
			tif_date_error_message = tif_date_error_message.replace(/^(.*)%s(.*)%s(.*)$/, "$1" + minimum_tif_date.print("%d-%m-%Y") + "$2" + maximum_tif_date.print("%d-%m-%Y") + "$3");
			set_element_error(order_tif_date, tif_date_error_message);
		}
	} else {
//		order_tif_date.style.visibility = "hidden";
//		order_tif_date_button.style.visibility = "hidden";
		order_tif_date.disabled = true;
		order_tif_date_button.disabled = true;
		clear_element_error(order_tif_date);
	}
/*
	if (!validator.isPositiveInt(order_tif_days.value) || order_tif_days.value > maximum_tif_days) {
		set_element_error(order_tif_days, language.tif_must_be_within_1_and + " " + maximum_tif_days);
	} else {
		clear_element_error(order_tif_days);
	}
*/
/*
	if (order_fill_type.value == "minimum") {
		order_min_fill.disabled = false;
		if (!validator.isPositiveInt(order_min_fill.value)) {
			set_element_error(order_min_fill, language.please_input_valid_minimum_fill);
		} else {
			clear_element_error(order_min_fill);
		}
	} else {
		order_min_fill.disabled = true;
		order_min_fill.value = "0";
		clear_element_error(order_min_fill);
	}
*/
	if (in_array(bank_name, ["fransi", "aljazira"]) && order_quantity.value >= disclose_border) {
		order_disclose.disabled = false;
	} else {
		order_disclose.disabled = true;
		order_disclose.value = "0";
	}
/*
	if ((order_quantity.value >= disclose_border && disclose_border != -1) && !(validator.isPositiveInt(order_disclose.value) || order_disclose.value == "0" || order_disclose.value == "") || !(validator.isInteger(order_disclose.value) || order_disclose.value == "")  || order_disclose.value >= 5000) {
		set_element_error(order_disclose, language.please_input_valid_disclose);
	} else {
		clear_element_error(order_disclose);
	}
*/
	if (order_disclose.disabled || is_disclose_valid(order_quantity.value, order_disclose.value)) {
		clear_element_error(order_disclose);
	} else {
		set_element_error(order_disclose, language.please_input_valid_disclose);
	}

//	var save_link = get_obj_by_path(order_id, "parent 1 child child child");
	if (document.getElementById("orders").style.display == "none") {	//	edit all
		error.value = one_or_more_elements_has_errors ? "1" : "0";
		update_order_save_links(form);
	} else {
		var save_link = get_obj_by_path(order_id, "parent 2 next child child child");
		var save_and_resume_link = get_obj_by_path(save_link, "next");
		var save_and_submit_link = get_obj_by_path(save_and_resume_link, "next");
		var cancel_link = get_obj_by_path(save_and_submit_link, "next");	//	if it is null, then save_and_resume_link is cancel link actually
		if (one_or_more_elements_has_errors) {	//	turn save link into plain text
			disable_link(save_link);
			if (cancel_link) {
				disable_link(save_and_resume_link);
				disable_link(save_and_submit_link);
			}
			if (groups) {
				groups.get_selected().disable_links(["toolbutton_add_order"]);
			}
		} else {	//	take save link back
			enable_link(save_link);
			if (cancel_link) {
				enable_link(save_and_resume_link);
				enable_link(save_and_submit_link);
			}
			if (groups) {
				groups.get_selected().enable_links(["toolbutton_add_order"]);
			}
		}
	}
}

function on_token_change(obj) {
	var form = obj.form;
	if (form == null) form = document.form;
	var objs = form[obj.name];
	//	get index
	var index = -1;
	for (var i = 0; i < objs.length; i++) {
		if (objs[i] == obj) {
			index = i;
			break;
		}
	}
	on_token_change_by_index(form, index);
}

function on_token_change_by_index(form, index) {
	one_or_more_elements_has_errors = false;

	var div_control;
	var main_div;
	var indicator_control;
	var market_type;
	var token_indicators;
	var token_experimental_indicators;
	if (index == -1) {
		div_control = form["token_div_control[]"].value;
		main_div = form["token_id[]"].parentNode;
		indicator_control = form["token_indicator[]"].value;
		market_type = form["token_market_type[]"].value;
		token_indicators = form["token_indicator[]"];
		token_experimental_indicators = form["token_experimental_indicator[]"];
	} else {
		div_control = form["token_div_control[]"][index].value;
		main_div = form["token_id[]"][index].parentNode;
		indicator_control = form["token_indicator[]"][index].value;
		market_type = form["token_market_type[]"][index].value;
		token_indicators = form["token_indicator[]"][index];
		token_experimental_indicators = form["token_experimental_indicator[]"][index];
	}
	var child_divs = main_div.getElementsByTagName("div");
	var child_div, div_indicators, div_date, div_order, div_generic_indicators, div_trend_indicators, div_indicator_indicators, div_market_indicators, div_change_direction_indicators, div_value_indicators;
	for (var i = 0; i < child_divs.length; i++) {
		child_div = child_divs[i];
		if (child_div.className == "indicators") div_indicators = child_div;
		else if (child_div.className == "date") div_date = child_div;
		else if (child_div.className == "order") div_order = child_div;
		else if (child_div.className == "generic_indicators") div_generic_indicators = child_div;
		else if (child_div.className == "trend_indicators") div_trend_indicators = child_div;
		else if (child_div.className == "indicator_indicators") div_indicator_indicators = child_div;
		else if (child_div.className == "market_indicators") div_market_indicators = child_div;
		else if (child_div.className == "change_direction_indicators") div_change_direction_indicators = child_div;
		else if (child_div.className == "value_indicators") div_value_indicators = child_div;
	}
	if (div_control == "Indicators" || div_control == "Experimental") {
		div_indicators.style.display = "block";
		div_date.style.display = "none";
		div_order.style.display = "none";
		div_indicator_indicators.style.display = "block";
		div_market_indicators.style.display = "none";
		if (div_control == "Indicators") {
			token_indicators.style.display = "block";
			token_experimental_indicators.style.display = "none";
		} else {
			token_indicators.style.display = "none";
			token_experimental_indicators.style.display = "block";
		}
	} else if (div_control == "Date") {
		div_indicators.style.display = "none";
		div_date.style.display = "block";
		div_order.style.display = "none";
	} else if (div_control == "Order") {
		div_indicators.style.display = "none";
		div_date.style.display = "none";
		div_order.style.display = "block";
		div_indicator_indicators.style.display = "none";
	} else if (div_control == "Cash") {
		div_indicators.style.display = "block";
		div_date.style.display = "none";
		div_order.style.display = "none";
		div_indicator_indicators.style.display = "none";
		div_market_indicators.style.display = "none";
	} else if (div_control == "Market") {
		div_indicators.style.display = "block";
		div_date.style.display = "none";
		div_order.style.display = "none";
		div_indicator_indicators.style.display = "none";
		div_market_indicators.style.display = "block";
	}
	if (div_control == "Indicators" && indicator_control == "trend") {
		div_generic_indicators.style.display = "none";
		div_value_indicators.style.display = "none";
		div_trend_indicators.style.display = "block";
	} else {
		div_generic_indicators.style.display = "block";
		div_trend_indicators.style.display = "none";
		div_value_indicators.style.display = "block";
	}
	if ((div_control == "Indicators" && in_array(indicator_control, ["chg", "percent_chg"])) || (div_control == "Market" && in_array(market_type, ["chg", "percent_chg"]))) {
		div_change_direction_indicators.style.display = "block";
		div_generic_indicators.style.display = "none";
		div_value_indicators.style.display = "block";
	} else {
		div_change_direction_indicators.style.display = "none";
//		div_generic_indicators.style.display = "block";
//		div_value_indicators.style.display = "block";
	}

	var pvalue = form["token_pvalue[]"];
	var cdate = form["token_cdate[]"];
	var cdate_button = form["token_cdate_button[]"];

	var div_control = form["token_div_control[]"];
	var trend_type = form["token_trend_type[]"];
	var indicator = form["token_indicator[]"];
	var sorder_type = form["token_sorder_type[]"];
	var stock_id = form["token_stock_id[]"];
	var type = form["token_type[]"];
	var ctype = form["token_ctype[]"];
	var am_pm_type = form["token_am_pm_type[]"];
	var order_control = form["token_order_control[]"];
	var market_index = form["token_market_index[]"];
	var market_type = form["token_market_type[]"];
	var minutes = form["token_minutes[]"];
	var seconds = form["token_seconds[]"];
	var experimental_indicator = form["token_experimental_indicator[]"];

	var error = form["token_error[]"];

	if (index != -1) {
		pvalue = pvalue[index];
		cdate = cdate[index];
		cdate_button = cdate_button[index];

		div_control = div_control[index];
		trend_type = trend_type[index];
		indicator = indicator[index];
		sorder_type = sorder_type[index];
		stock_id = stock_id[index];
		type = type[index];
		ctype = ctype[index];
		am_pm_type = am_pm_type[index];
		order_control = order_control[index];
		market_index = market_index[index];
		market_type = market_type[index];
		minutes = minutes[index];
		seconds = seconds[index];
		experimental_indicator = experimental_indicator[index];

		error = error[index];
	}

	if (div_control.value == "Indicators") {
		if (in_array(indicator.value, ["chg", "percent_chg"])) {
			if (!validator.isPositive(pvalue.value)) {
				set_element_error(pvalue, language.please_input_valid_numeric_value);
			} else {
				clear_element_error(pvalue);
			}
		} else if (indicator.value != "trend") {
			if (!validator.isNumeric(pvalue.value)) {
				set_element_error(pvalue, language.please_input_valid_numeric_value);
			} else {
				clear_element_error(pvalue);
			}
		}
	} else if (div_control.value == "Experimental") {
		if (!validator.isNumeric(pvalue.value)) {
			set_element_error(pvalue, language.please_input_valid_numeric_value);
		} else {
			if (experimental_indicator.value == "rsi" && (pvalue.value < 0 || pvalue.value > 100)) {
				set_element_error(pvalue, language.rsi_must_be_within_0_and_100_interval);
			} else {
				clear_element_error(pvalue);
			}
		}
	} else if (div_control.value == "Date") {
		if (cdate.value == "") {
			set_element_error(cdate_button, language.please_select_valid_date);
		} else {
			clear_element_error(cdate_button);
		}
		if (minutes.value.search(/^\d{1,2}$/) == -1 || minutes.value > 59 || minutes.value < 0)  {
			set_element_error(minutes, language.please_enter_valid_minutes);
		} else {
			clear_element_error(minutes);
		}
		if (seconds.value.search(/^\d{1,2}$/) == -1 || seconds.value > 59 || seconds.value < 0)  {
			set_element_error(seconds, language.please_enter_valid_seconds);
		} else {
			clear_element_error(seconds);
		}
	} else if (div_control.value == "Order") {
		if (sorder_type.value == "") {
			set_element_error(sorder_type, language.please_select_order_type);
		} else {
			clear_element_error(sorder_type);
		}
	} else if (div_control.value == "Cash") {
		if (!validator.isPositive(pvalue.value)) {
			set_element_error(pvalue, language.please_input_valid_positive_numeric_value);
		} else {
			clear_element_error(pvalue);
		}
	} else if (div_control.value == "Market") {
		if (market_index == "") {
			set_element_error(market_index, language.please_select_market_index);
		} else {
			clear_element_error(market_index);
		}

		if (in_array(market_type.value, ["chg", "percent_chg"])) {
			if (!validator.isPositive(pvalue.value)) {
				set_element_error(pvalue, language.please_input_valid_numeric_value);
			} else {
				clear_element_error(pvalue);
			}
		} else {
			if (!validator.isNumeric(pvalue.value)) {
				set_element_error(pvalue, language.please_input_valid_numeric_value);
			} else {
				clear_element_error(pvalue);
			}
		}
	} else {
		set_element_error(div_control, language.please_select_token_type);
	}

	error.value = one_or_more_elements_has_errors ? "1" : "0";
	update_token_save_links(form);
}

function update_order_save_links(form) {
	var error = false;
	var selects = form.getElementsByTagName("select");
	var ids = -1;
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "order_direction[]") {
			ids++;
		}
	}
	if (ids == -1) {
		error = false;
	} else if (ids == 0) {
		error = form["order_error[]"].value == "1" ? true : false;
	} else {
		for (var i = 0; i <= ids; i++) {
			if (form["order_error[]"][i].value == "1") {
				error = true;
				break;
			}
		}
	}
//	var save_link = document.getElementById("toolbutton_save_all");
	if (error) {	//	disable save link
//		disable_link(save_link);
		groups.get_selected().disable_links(["toolbutton_save_all"]);
	} else {	//	enable save link
//		enable_link(save_link);
		groups.get_selected().enable_links(["toolbutton_save_all"]);
	}
}

function update_token_save_links(form) {
	var error = false;
	var selects = form.getElementsByTagName("select");
	var ids = -1;
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "token_market_type[]") {
			ids++;
		}
	}
	if (ids == -1) {
		error = false;
	} else if (ids == 0) {
		error = form["token_error[]"].value == "1" ? true : false;
	} else {
		for (var i = 0; i <= ids; i++) {
			if (form["token_error[]"][i].value == "1") {
				error = true;
				break;
			}
		}
	}

//	var path_to_save_link = "parent 1 prev child 1 1 0";
	var path_to_save_link = "parent 1 prev child 1 0 0";
	if (form["condition_id[]"].value == "new") {
		path_to_save_link = "parent 1 prev child 1 0 0";
	}
	var save_link = get_obj_by_path(form, path_to_save_link);
//	var save_and_add_condition_link = get_obj_by_path(save_link, "next");
	var order = groups.get_selected().orders.elements[form["condition_order_id[]"].value];
//	order.enable_links(["order_add_condition"]);
	var add_condition_link = order.get_link("order_add_condition");
	if (error) {	//	disable save link
		disable_link(save_link);
//		disable_link(save_and_add_condition_link);
		disable_link(add_condition_link);
	} else {	//	enable save link
		enable_link(save_link);
//		enable_link(save_and_add_condition_link);
		enable_link(add_condition_link);
	}
}
/*
function validate_submit() {
	var form = document.form;
	var validation_result;

	if (window.custom_validate) {
		validation_result = custom_validate();
		if (validation_result["error_message"] != "") {
			alert(validation_result["error_message"]);
			validation_result["erroneous_element"].focus();
			return false;
		}
	}

	for (var index = 1; index < form["order_id[]"].length; index++) {
		validation_result = validate_by_index(form, index);
		if (validation_result["error_message"] != "") {
			make_visible(validation_result["erroneous_element"]);
			alert(validation_result["error_message"]);
			validation_result["erroneous_element"].focus();
			return false;
		}
	}

	for (var index = 1; index < form["token_id[]"].length; index++) {
		validation_result = validate_token_by_index(form, index);
		if (validation_result["error_message"] != "") {
			make_visible(validation_result["erroneous_element"]);
//			check_and_fix_nasty_mozilla_bug();
			alert(validation_result["error_message"]);
			validation_result["erroneous_element"].focus();
			return false;
		}
	}

	form.submit();
	return true;
}

function validate_by_index(form, index) {
	var result = new Object();
	result["error_message"] = "";
	return result;

	var quantity;
	var min_fill;
	var disclose;
	var price;
	var order_type;
	var fill_type;

	if (index == -1) {
		quantity = form["order_quantity[]"];
		min_fill = form["order_min_fill[]"];
		disclose = form["order_disclose[]"];
		price = form["order_price[]"];
		order_type = form["order_order_type[]"];
		fill_type = form["order_fill_type[]"];
	} else {
		quantity = form["order_quantity[]"][index];
		min_fill = form["order_min_fill[]"][index];
		disclose = form["order_disclose[]"][index];
		price = form["order_price[]"][index];
		order_type = form["order_order_type[]"][index];
		fill_type = form["order_fill_type[]"][index];
	}

	if (order_type.value == "limit" && !validator.isPositiveStrict(price.value)) {
		if (!result["erroneous_element"]) result["erroneous_element"] = price;
		result["error_message"] += language.please_input_valid_price + ".\n";
	}

	if (!validator.isPositiveInt(quantity.value)) {
		if (!result["erroneous_element"]) result["erroneous_element"] = quantity;
		result["error_message"] += language.please_input_valid_quantity + ".\n";
	}
//	if ((quantity.value >= disclose_border && disclose_border != -1) && !validator.isPositiveInt(disclose.value) || !validator.isInteger(disclose.value) || disclose.value >= 5000) {
	if (!disclose.disabled && !is_disclose_valid(quantity.value, disclose.value)) {
		if (!result["erroneous_element"]) result["erroneous_element"] = disclose;
		result["error_message"] += language.please_input_valid_disclose + ".\n";
	}
	if (fill_type.value == "minimum" && !validator.isPositiveInt(min_fill.value)) {
		if (!result["erroneous_element"]) result["erroneous_element"] = min_fill;
		result["error_message"] +=  language.please_input_valid_minimum_fill + ".\n";
	}
	return result;
}
*/

function validate_token_by_index(form, index) {
	var result = new Object();
	result["error_message"] = "";
	return result;

	var pvalue = form["token_pvalue[]"];
	var cdate = form["token_cdate[]"];
	var cdate_button = form["token_cdate_button[]"];

	var div_control = form["token_div_control[]"];
	var trend_type = form["token_trend_type[]"];
	var indicator = form["token_indicator[]"];
	var sorder_type = form["token_sorder_type[]"];
	var stock_id = form["token_stock_id[]"];
	var type = form["token_type[]"];
	var ctype = form["token_ctype[]"];
	var am_pm_type = form["token_am_pm_type[]"];
	var order_control = form["token_order_control[]"];
	var market_index = form["token_market_index[]"];

	var minutes = form["token_minutes"];
	var seconds = form["token_seconds"];

	if (index != -1) {
		pvalue = pvalue[index];
		cdate = cdate[index];
		cdate_button = cdate_button[index];

		div_control = div_control[index];
		trend_type = trend_type[index];
		indicator = indicator[index];
		sorder_type = sorder_type[index];
		stock_id = stock_id[index];
		type = type[index];
		ctype = ctype[index];
		am_pm_type = am_pm_type[index];
		order_control = order_control[index];
		market_index = market_index[index];

		minutes = minutes[index];
		seconds = seconds[index];
	}

	if (div_control.value == "Indicators") {
		if (indicator.value != "trend") {
//			if (!validator.isPositive(pvalue.value)) {
			if (!validator.isNumeric(pvalue.value)) {
				if (!result["erroneous_element"]) result["erroneous_element"] = pvalue;
				result["error_message"] += language.please_input_valid_numeric_value + ".\n";
			}
		}
	} else if (div_control.value == "Date") {
		if (cdate.value == "") {
			if (!result["erroneous_element"]) result["erroneous_element"] = cdate_button;
			result["error_message"] += language.please_select_valid_date + ".\n";
		}
		if (minutes.value.search(/^\d{1,2}$/) == -1 || minutes.value > 59 || minutes.value < 0)  {
			if (!result["erroneous_element"]) result["erroneous_element"] = minutes;
			result["error_message"] += language.please_enter_valid_minutes + ".\n";
		}
		if (seconds.value.search(/^\d{1,2}$/) == -1 || seconds.value > 59 || seconds.value < 0)  {
			if (!result["erroneous_element"]) result["erroneous_element"] = seconds;
			result["error_message"] += language.please_enter_valid_seconds + ".\n";
		}
	} else if (div_control.value == "Order") {
		if (sorder_type.value == "") {
			if (!result["erroneous_element"]) result["erroneous_element"] = sorder_type;
			result["error_message"] += language.please_select_order_type + ".\n";
		}
	} else if (div_control.value == "Cash") {
		if (!validator.isPositive(pvalue.value)) {
//		if (!validator.isNumeric(pvalue.value) || pvalue.value<0) {
			if (!result["erroneous_element"]) result["erroneous_element"] = pvalue;
			result["error_message"] += language.please_input_valid_positive_numeric_value + ".\n";
		}
	} else if (div_control.value == "Market") {
		if (market_index == "") {
			if (!result["erroneous_element"]) result["erroneous_element"] = market_index;
			result["error_message"] += language.please_select_market_index + ".\n";
		}
		if (!validator.isNumeric(pvalue.value)) {
			if (!result["erroneous_element"]) result["erroneous_element"] = pvalue;
			result["error_message"] += language.please_input_valid_numeric_value + ".\n";
		}
	} else {
		if (!result["erroneous_element"]) result["erroneous_element"] = div_control;
		result["error_message"] += language.please_select_token_type + ".\n";
	}
	return result;
}

function get_dependencies_container(obj) {
	return not_text_child_by_index(obj, 1);
}
function get_main_row_container(obj) {
	return not_text_child_by_index(obj.parentNode, 0);
}

function on_first_cell_click(obj, mode) {
	var div;
	if (mode == undefined) {
		div = get_dependencies_container(obj.parentNode.parentNode);
	} else {
		div = get_dependencies_container(obj);
	}
	if (div.style.display == "none") {
		div.style.display = "block";
	} else {
		div.style.display = "none";
	}
	if (mode == undefined) {
		check_and_fix_nasty_mozilla_bug(obj.parentNode.parentNode)
	}
}

function check_and_fix_nasty_mozilla_bug(obj) {
	return;
	if (document.all) {
		return;
	}
	var div = get_dependencies_container(obj);
	if (div.className.search(/order/gi) != -1) {
		var next_div = not_text_next_subling_by_index(div.parentNode, 0);
		if (next_div) {
			on_first_cell_click(next_div, true);
			on_first_cell_click(next_div, true);
		}
	}
}

function on_add_token_click(obj) {
	return add_token(obj.parentNode.parentNode.parentNode);
}

function get_condition_div(obj) {
	return not_text_child_by_index(obj, 0);
}

function add_token(obj) {
	if (window.custom_on_add_token_click) {
		custom_on_add_token_click();
	}

	var container = get_dependencies_container(obj);

	var condition_id, order_id, stock_id;
	var condition_div = get_condition_div(container.parentNode);
	var order_div = get_main_row_container(container.parentNode.parentNode);
	var inputs = condition_div.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "condition_id[]") {
			condition_id = inputs[i].value;
		}
	}

	inputs = order_div.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "order_id[]") {
			order_id = inputs[i].value;
			break;
		}
	}
	var selects = order_div.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "order_stock_id[]") {
			stock_id = selects[i].value;
		}
	}

	var default_token;	//	get default token
	var form = document.form;
	if (form["token_id[]"].length)
		default_token = form["token_id[]"][0].parentNode;
	else
		default_token = form["token_id[]"].parentNode;

	var new_token = default_token.cloneNode(true);

	//	some adjustments of the new_token
	//	condition_id
	inputs = new_token.getElementsByTagName("input");
	var cdate_id = "cdate_new_token_" + new_token_id;
	var cdate_button_id = "cdate_button_new_token_" + new_token_id;
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "token_condition_id[]") {
			inputs[i].value = condition_id;
		} else if (inputs[i].name == "token_cdate[]") {
			inputs[i].id = cdate_id;
		} else if (inputs[i].name == "token_cdate_button[]") {
			inputs[i].id = cdate_button_id;
		}
	}

	//	text in the first cell
	var first_cell;
	var child_divs = new_token.getElementsByTagName("div");
	for (var i = 0; i < child_divs.length; i++) {
		if (child_divs[i].className.search(/first/) != -1) {
			first_cell = child_divs[i];
			break;
		}
	}
	first_cell.innerHTML = "New Token #" + new_token_id;
	new_token_id++;

	//	remove one option from the sorder_type
	var selects = new_token.getElementsByTagName("select");
	var sorder_type;
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "token_sorder_type[]") {
			sorder_type = selects[i];
		} else if (selects[i].name == "token_stock_id[]") {
			selects[i].value = stock_id;
		}
	}
	for (var i = 0; i < sorder_type.options.length; i++) {
		if (sorder_type.options[i].value == order_id) {
			sorder_type.options[i] = null;
		}
	}

	container.appendChild(new_token);

	//	date picker
	Calendar.setup({inputField:cdate_id,ifFormat:"%d-%m-%Y",button:cdate_button_id});

	on_token_change(new_token.getElementsByTagName("input")[0]);
	make_visible(new_token);	//	ensure new_token is visible
}

function on_delete_token_click(obj) {
//	alert(obj.parentNode.parentNode.parentNode.innerHTML);
	obj.parentNode.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode.parentNode);
//	delete obj.parentNode.parentNode;
	if (window.custom_on_delete_token_click) {
		custom_on_delete_token_click();
	}
}

function on_add_condition_click(obj) {
	var container = get_dependencies_container(obj.parentNode.parentNode.parentNode);

	var order_id;
	var order_div = obj.parentNode.parentNode;
	var inputs = order_div.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "order_id[]") {
			order_id = inputs[i].value;
			break;
		}
	}

	var default_condition;	//	get default token
	var form = document.form;
	if (form["condition_id[]"].length)
		default_condition = form["condition_id[]"][0].parentNode.parentNode;
	else
		default_condition = form["condition_id[]"].parentNode.parentNode;

	var new_condition = default_condition.cloneNode(true);

	//	some adjustments of the new_condition
	//	order_id
	inputs = new_condition.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "condition_order_id[]") {
			inputs[i].value = order_id;
		} else if (inputs[i].name == "condition_id[]") {
			inputs[i].value = "new_condition_" + new_condition_id;
		}
	}

	//	text in the first cell
	var first_cell;
	var child_divs = new_condition.getElementsByTagName("div");
	for (var i = 0; i < child_divs.length; i++) {
		if (child_divs[i].className.search(/first/) != -1) {
			first_cell = child_divs[i];
			break;
		}
	}
	first_cell.innerHTML = "New Condition #" + new_condition_id;
	new_condition_id++;

	container.appendChild(new_condition);

	add_token(new_condition);// add a token for a new condition
	check_and_fix_nasty_mozilla_bug(obj.parentNode.parentNode.parentNode);
}

function on_delete_condition_click(obj) {
	obj.parentNode.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode.parentNode);
	if (window.custom_on_delete_condition_click) {
		custom_on_delete_condition_click();
	}
}

function on_duplicate_order_click(obj) {
	var container = obj.parentNode.parentNode.parentNode.parentNode;
	var default_order = obj.parentNode.parentNode.parentNode;
	var new_order = default_order.cloneNode(true);

	//	we should replace sorder_type dropdown with default one

	var default_token_sorder_type;	//	get default token_sorder_type
	var form = document.form;
	if (form["token_sorder_type[]"].length)
		default_token_sorder_type = form["token_sorder_type[]"][0];
	else
		default_token_sorder_type = form["token_sorder_type[]"];

	var new_selects = new_order.getElementsByTagName("select");
	var default_selects = default_order.getElementsByTagName("select");
	for (var i = new_selects.length - 1; i >= 0; i--) {
		if (new_selects[i].name == "token_sorder_type[]") {
			var value = default_selects[i].value;
			var next_node = not_text_next_subling_by_index(new_selects[i], 0);
			var new_token_sorder_type = default_token_sorder_type.cloneNode(true);
			new_token_sorder_type.value = value;
			var parent = new_selects[i].parentNode;
			parent.removeChild(new_selects[i]);
			parent.insertBefore(new_token_sorder_type, next_node);
		}
	}

	//	after cloneNode child selects always have their first option selected
	for (var i = 0; i < default_selects.length; i++) {
		new_selects[i].value = default_selects[i].value;
	}
	if (document.all) {
		var default_inputs = default_order.getElementsByTagName("input");
		var new_inputs = new_order.getElementsByTagName("input");
		for (var i = 0; i < default_inputs.length; i++) {
			if (default_inputs[i].type.toLowerCase() == "checkbox") {
				//	delete checkbox
				var checkbox_container = new_inputs[i].parentNode;
				checkbox_container.removeChild(new_inputs[i]);
				var new_checkbox = document.createElement(default_inputs[i].outerHTML);
				checkbox_container.appendChild(new_checkbox);
			}
		}
	}

	add_order(container, new_order);
}

function on_add_order_click(obj) {
	var container = obj.parentNode.parentNode.parentNode;

	var default_order;	//	get default order
	var form = document.form;
	if (form["order_id[]"].length)
		default_order = form["order_id[]"][0].parentNode.parentNode;
	else
		default_order = form["order_id[]"].parentNode.parentNode;

	var new_order = default_order.cloneNode(true);
	add_order(container, new_order);
}

function add_order(container, new_order) {
	var form = document.form;
	//	some adjustments of the new_order
	//	order_id
	inputs = new_order.getElementsByTagName("input");
	var new_id = "new_order_" + new_order_id;

	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "order_id[]") {
			inputs[i].value = new_id;
		} else if (inputs[i].name == "order_auto_reset[]") {
			inputs[i].value = new_id;
		}
	}

	//	text in the first cell
	var first_cell;
	var child_divs = new_order.getElementsByTagName("div");
	for (var i = 0; i < child_divs.length; i++) {
		if (child_divs[i].className.search(/first/) != -1) {
			first_cell = child_divs[i];
			break;
		}
	}
	first_cell.innerHTML = "New Order #" + new_order_id;
	new_order_id++;

	var new_token_ids = new Array();

	//	child conditions
	var child_condition, condition_inputs, condition_id;
	var child_token, token_inputs, token_id;
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "condition_order_id[]") {
			//	condition_order_id
			inputs[i].value = new_id;

			condition_id = "new_condition_" + new_condition_id;
			child_condition = inputs[i].parentNode.parentNode;

			//	text in the first cell
			child_divs = child_condition.getElementsByTagName("div");
			for (var j = 0; j < child_divs.length; j++) {
				if (child_divs[j].className.search(/first/) != -1) {
					first_cell = child_divs[j];
					break;
				}
			}
			first_cell.innerHTML = "New Condition #" + new_condition_id;
			new_condition_id++;

			condition_inputs = child_condition.getElementsByTagName("input");
			for (var j = 0; j < condition_inputs.length; j++) {
				if (condition_inputs[j].name == "condition_id[]") {
					condition_inputs[j].value = condition_id;
				} else if (condition_inputs[j].name == "token_condition_id[]") {
					//	token_condition_id
					condition_inputs[j].value = condition_id;

					token_id = "new_token_" + new_token_id;
					child_token = condition_inputs[j].parentNode;

					//	text in the first cell
					child_divs = child_token.getElementsByTagName("div");
					for (var k = 0; k < child_divs.length; k++) {
						if (child_divs[k].className.search(/first/) != -1) {
							first_cell = child_divs[k];
							break;
						}
					}
					first_cell.innerHTML = "New Token #" + new_token_id;

					var cdate_id = "cdate_new_token_" + new_token_id;
					var cdate_button_id = "cdate_button_new_token_" + new_token_id;

					new_token_ids[new_token_ids.length] = new_token_id;

					new_token_id++;

					token_inputs = child_token.getElementsByTagName("input");
					for (var k = 0; k < token_inputs.length; k++) {
						if (token_inputs[k].name == "token_id[]") {
							token_inputs[k].value = token_id;
						} else if (token_inputs[k].name == "token_cdate[]") {
							token_inputs[k].id = cdate_id;
						} else if (token_inputs[k].name == "token_cdate_button[]") {
							token_inputs[k].id = cdate_button_id;
						}
					}
				}
			}
		}
	}

	//	update all selects with name "token_sorder_type[]"
	var selects = form.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++) {
		if (selects[i].name == "token_sorder_type[]") {
			var option = new Option(new_id, new_id);
			selects[i].options[selects[i].options.length] = option;
		}
	}
	container.appendChild(new_order);

	//	calendar setup
	for (var i = 0; i < new_token_ids.length; i++) {
		Calendar.setup({inputField:"cdate_new_token_" + new_token_ids[i], ifFormat:"%d-%m-%Y", button:"cdate_button_new_token_" + new_token_ids[i]});
	}

	on_order_change(new_order.getElementsByTagName("input")[0]);
}

function on_delete_order_click(obj) {
	var order_id;
	var order_div = obj.parentNode.parentNode;
	var inputs = order_div.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "order_id[]") {
			order_id = inputs[i].value;
			break;
		}
	}

	//	update all selects with name "token_sorder_type[]"
	var form = document.form;
	var selects = form.getElementsByTagName("select");
	var tbd_tokens = new Array();
	for (var i = selects.length - 1; i >= 0; i--) {
		if (selects[i].name == "token_sorder_type[]") {
			var options = selects[i].options;
			for (var j = 0; j < options.length; j++) {
				if (options[j].value == order_id) {
					if (options[j].selected) {
						var types = selects[i].parentNode.parentNode.parentNode.getElementsByTagName("select");
						for (var k = 0; k < types.length; k++) {
							if (types[k].name == "token_div_control[]" && types[k].value == "Order") {
								tbd_tokens[tbd_tokens.length] = selects[i].parentNode;
							}
						}
					}
					options[j] = null;
					break;
				}
			}
		}
	}
	for (var i = 0; i < tbd_tokens.length; i++) {
		on_delete_token_click(tbd_tokens[i]);
	}
	obj.parentNode.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode.parentNode);
	delete_conditions_without_tokens();

	if (window.custom_on_delete_order_click) {
		custom_on_delete_order_click();
	}
}

function delete_conditions_without_tokens() {
	var form = document.form;
	for (var i = form["condition_id[]"].length - 1; i > 0; i--) {
		var condition = form["condition_id[]"][i];
		var container = get_dependencies_container(condition.parentNode.parentNode);
		if (!not_text_child_length(container)) {
			condition.parentNode.parentNode.parentNode.removeChild(condition.parentNode.parentNode);
		}
	}
}

function set_order_status(id, status, help) {
	var obj = get_obj_by_path(document.getElementById("order_status_" + id), "child");
	if (!obj) {
		return;
	}
	if (!obj.old_innerHTML) {
		obj.old_innerHTML = obj.innerHTML;
		obj.old_onclick = obj.onclick;
		obj.old_cursor = obj.style.cursor;
	}
	obj.innerHTML = status;
	if (help === undefined) {
		obj.onclick = disabled_onclick;
		obj.style.cursor = "default";
	} else {
		var onclick_string = "obj.onclick = function() { show_help('" + help + "'); return false; }";
		eval(onclick_string);
		obj.style.cursor = "pointer";
	}
}

function restore_order_status(id) {
	var obj = get_obj_by_path(document.getElementById("order_status_" + id), "child");
	if (!obj) {
		return;
	}
	if (obj.old_innerHTML) {
		obj.innerHTML = obj.old_innerHTML;
		obj.old_innerHTML = null;
		obj.onclick = obj.old_onclick;
		obj.old_onclick = null;
		obj.style.cursor = obj.old_cursor;
		obj.old_cursor = null;
	}
}



// links begin

function disable_link(obj) {
	if (!obj) {
		return;
	}
	if (typeof obj.join == "function") {
		for (var i = 0; i < obj.length; i++) {
			disable_link(obj[i]);
		}
	} else if (obj.old_className === undefined) {
		var class_name_tokens = obj.className.split(" ");
		for (var i = 0; i < class_name_tokens.length; i++) {
			if (class_name_tokens[i] == "disabled") {
				class_name_tokens[i] = null;
				i--;
			}
		}
		obj.old_onclick = obj.onclick;
		obj.old_className = class_name_tokens.join(" ");
		obj.onclick = disabled_onclick;
		class_name_tokens.push("disabled");
		obj.className = class_name_tokens.join(" ");
		obj.old_onmouseover = obj.onmouseover;
		obj.old_onmouseout = obj.onmouseout;
		obj.onmouseover = disabled_onmouseover;
		obj.onmouseout = disabled_onmouseout;
		if (obj.old_onmouseout) {
			obj.old_onmouseout();
		}
	}
}

function disabled_onclick() {
	return false;
}

function disabled_onmouseover() {
}

function disabled_onmouseout() {
}

function enable_link(obj, tags) {
	if (!obj) {
		return;
	}
	if (typeof obj.join == "function") {
		for (var i = 0; i < obj.length; i++) {
			enable_link(obj[i]);
		}
	} else if (obj.old_className !== undefined) {
		obj.onclick = obj.old_onclick;
		obj.className = obj.old_className;
		obj.onmouseover = obj.old_onmouseover;
		obj.onmouseout = obj.old_onmouseout;
		obj.old_onclick = undefined;
		obj.old_className = undefined;
		obj.old_onmouseover = undefined;
		obj.old_onmouseout = undefined;
	}
}

function disable_links(obj, tags) {
	enable_or_disable_links(obj, tags, false);
}

function enable_links(obj, tags) {
	enable_or_disable_links(obj, tags, true);
}

function enable_or_disable_links(obj, tags, enable) {
	if (tags && typeof tags != "object") {
		tags = [ tags ];
	}
	var links = obj.getElementsByTagName("a");
	var tag_attribute;
	var match;
	for (var i = 0; i < links.length; i++) {
		match = true;
		if (tags) {
			tag_attribute = links[i].attributes.getNamedItem("tag");
			if (!tag_attribute) {
				match = false;
			} else if (array_search(tag_attribute.nodeValue, tags) === false) {
				match = false;
			}
		}
		if (match) {
			if (enable) {
				enable_link(links[i]);
			} else {
				disable_link(links[i]);
			}
		}
	}
}

function is_link_disabled(link) {
	if (typeof link != "object") {
		link = document.getElementById(link);
	}
	if (!link) {
		return null;
	} else if (link.old_onclick) {
		return true;
	} else {
		return false;
	}
}

function get_link_statuses() {
	var result = {};
	for (var i = 0; i < arguments.length; i++) {
		result[arguments[i]] = is_link_disabled(arguments[i]);
	}
	return result;
}

function set_link_statuses(statuses) {
	for (var i in statuses) {
		if (statuses[i] === true) {
			disable_link(document.getElementById(i));
		} else if (statuses[i] === false) {
			enable_link(document.getElementById(i));
		}
	}
}

// links end


function get_minimum_tif_date() {
	var minimum_tif_date = get_market_date();
	if (bank_name == "samba") {
		minimum_tif_date.setDate(minimum_tif_date.getDate() + 1);
	}
	if (!tif_date_weekend_allowed) {
		w = minimum_tif_date.getDay();
		if (w == 4) {
			minimum_tif_date.setDate(minimum_tif_date.getDate() + 2);
		} else if (w == 5) {
			minimum_tif_date.setDate(minimum_tif_date.getDate() + 1);
		}
	}
	minimum_tif_date.setHours(0, 0, 0, 0);
	return minimum_tif_date;
}

function get_maximum_tif_date() {
	var maximum_tif_date = get_market_date();
	if (bank_name == "alahli") {
		maximum_tif_date.setDate(maximum_tif_date.getDate() + 6);
	} else if (bank_name == "alrajhi") {
		maximum_tif_date.setDate(maximum_tif_date.getDate() + 30);
	} else if (bank_name == "fransi") {
		maximum_tif_date.setDate(maximum_tif_date.getDate() + 29);
	} else if (bank_name == "samba") {
		maximum_tif_date.setDate(maximum_tif_date.getDate() + 30);
	}
	if (!tif_date_weekend_allowed) {
		w = maximum_tif_date.getDay();
		if (w == 4) {
			maximum_tif_date.setDate(maximum_tif_date.getDate() - 1);
		} else if (w == 5) {
			maximum_tif_date.setDate(maximum_tif_date.getDate() - 2);
		}
	}
	maximum_tif_date.setHours(23, 59, 59, 999);
	return maximum_tif_date;
}
