//***************************************************************************
//S-T-A-R-T													 GLOBAL VARIABLES
//***************************************************************************

var B_FORM_IS_SUBMITED = false;
var STR_COOKIE_LEGEND = "display_legend";
var HTML_TR_SELECTED_CLASS = "tr_selected";
var HTML_BTN_SUBMIT = "__btn_submit";
var HTML_BTN_SEARCH = "__btn_search";
var HTML_BTN_ACTION = "__btn_action";
var HTML_HID_SUBMIT_PRESSED = "__hid_submit_pressed";
var HTML_LIST_HIDDEN_ACTION = "__hid_action_string";
var HTML_LIST_HIDDEN_SEARCH = "__hid_search_string";
var HTML_LIST_CHECKBOX_ALL = "__chk_all";
var HTML_LIST_CHECKBOX_ITEM = "__chk_";
var HTML_LIST_TR_PREFIX = "__tr_";
var HTML_TR_LEGEND = "__tr_legend";
var HTML_IMG_HELP_ON = "__img_help_on";
var HTML_IMG_HELP_OFF = "__img_help_off";
var HTML_RADIO_SHOW = "__rad_show";
var HTML_RADIO_HIDE = "__rad_hide";

//***************************************************************************
//S-T-A-R-T													  SUBMIT HANDLING
//***************************************************************************

// DISABLE SUBMIT BUTTON AFTER SUBMITTING
function do_submit ()
{
	if (!B_FORM_IS_SUBMITED)
	{
	
		var index = 0;
		for (index = 0; index < document.getElementsByTagName ("input").length; index ++)
		{
			if (document.getElementsByTagName ("input").item (index).type == "submit")
			{
				document.getElementsByTagName ("input").item (index).disabled = true;
			}
		}
		
		if (get_element_by_id (HTML_HID_SUBMIT_PRESSED) != null)
			get_element_by_id (HTML_HID_SUBMIT_PRESSED).value = document.pressed;
		
		document.forms[0].submit ();
		B_FORM_IS_SUBMITED = true;
	}
	return false;
}

//***************************************************************************
//S-T-A-R-T										   REFERING ELEMENTS HANDLING
//***************************************************************************

// GET ELEMENT BY NAME
function get_element_by_name (str_ename)
{
	var obj;
	if (document.all)
		eval ("obj = document.all.item (\"" + str_ename + "\")");
	else if (document.layers)
		eval ("obj = document.layers [\"" + str_ename + "\"]");
	else	
		obj =  undefined;
	return obj;
}

// GET INPUT BY NAME
function get_input_by_name (str_fname, str_ename)
{
	var obj;
	eval ("obj = document.forms [\"" + str_fname + "\"]." + replace_char (str_ename, ':', '_') + ";");
	return obj;
}

// GET ELEMENT BY ID
function get_element_by_id (str_ename)
{
	var obj;
	if (document.all)
	{
		eval ("obj = document.all [\"" + str_ename + "\"]");
	}
	else if (document.layers)
	{		
		eval ("obj = document.layers [\"" + str_ename + "\"]");
	}
	else if (document.getElementById)
	{	
		eval ("obj = document.getElementById (\"" + str_ename + "\")");		
	}
	else	
		obj =  undefined;
	return obj;
}

//***************************************************************************
//S-T-A-R-T											  LINKS ELEMENTS HANDLING
//***************************************************************************

// BUILD LINK BASED ON URL RECEIVED
function build_link (str_url)
{
	return PATH + str_url;
}

// BUILD LINK BASED ON MODULE / PAGE / QS RECEIVED
function build_link_ex (str_module, str_page, str_qs)
{
	var str_link = "default.aspx?_init=" + str_module + "." + str_page;
	if (str_qs != null && str_qs.length > 0)
		str_link += str_qs;
	var str_lang = get_parameter ("lang")
	if ((str_lang != "fr") && (str_lang != "en"))
		str_lang = "en";
	str_link  = str_link + "&lang=" + str_lang;
	return build_link (str_link);
}

// BUILD IMAGE LINK
function build_image_link (str_url)
{
	return IMAGE_PATH + str_url;
}

// GET KEY FROM URL
function get_parameter (str_url_key)
{
	var str_url = window.location.search;
	var str_begin = str_url.indexOf (str_url_key) + (str_url_key.length + 1);
	var str_end = str_url.indexOf ("&amp;", str_begin);

	if (str_end == -1)
		str_end = str_url.length;

	return str_url.substring (str_begin, str_end);
}

//***************************************************************************
//S-T-A-R-T													   POPUP HANDLING
//***************************************************************************

// POP-UP NEW WINDOW
function pop_up (str_page)
{
	window.open (str_page, 'i', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width=650, height=500, left=100, top=100');
}

//***************************************************************************
//S-T-A-R-T													  STRING HANDLING
//***************************************************************************

// TRIM SPECIFIED STRING
function trim (str)
{
	if (str == null)
		return "";
	var index_a, index_b, str;
	i_length = str.length;
	index_a = 0;
	if (i_length == 0)
		return "";
	while ((str.substr (index_a, 1) == " ") && (index_a < i_length))
		index_a ++;
	if (index_a > 0) 
	{
		str = str.substr (index_a);
		i_length = i_length - index_a;
	}
	index_b = i_length - 1;
	while ((str.substr (index_b, 1) == " ") && (index_b > 0))
		index_b --;
	if (index_b < i_length - 1)
		str = str.substr (0, index_b + 1);
	return str;
}

// CHECK IF A STRING IS ALPHA NUMERIC
function is_alfa_num (str) 
{
  var str_valid_chars = "abcdefghijklmnopqrstuvwxyz01234567890_";
  
  if (trim (str).length == 0)
	return false;
	
  for (var index = 0; index < str.length; index ++) 
  {
    var chr_letter = str.charAt (index).toLowerCase ();
    if (str_valid_chars.indexOf (chr_letter) == -1)
		return false;
  }
  return true;
}

// CHECK IF A STRING IS ALPHA
function is_alpha (str) 
{
  var str_valid_chars = "abcdefghijklmnopqrstuvwxyz";
  
  if (trim (str).length == 0)
	return false;
	
  for (var index = 0; index < str.length; index ++) 
  {
    var chr_letter = str.charAt (i).toLowerCase ();
    if (str_valid_chars.indexOf (chr_letter) == -1)
		return false;
  }
  return true;
}

// CHECK IF A STRING IS NUMERIC
function is_num (str) 
{
  var str_valid_chars = "0123456789";
  
  if (trim (str).length == 0)
	return false;
	
  for (var index = 0; index < str.length; index ++) 
  {
    var chr_letter = str.charAt (index).toLowerCase ();
    if (str_valid_chars.indexOf (chr_letter) == -1)
		return false;
  }
  return true;
}

// REPLACE ALL INSTANCES OF A CHARACTER INSIDE A STRING
function replace_char (str, char_in, char_out)
{
	while (str.indexOf (char_in) > 0)
		str = str.replace (char_in, char_out);
	return str;
}

// CHECK IF A STRING LENGTH IS LIMITED
function is_limited (str, i_min, i_max)
{
	if ((trim (str).length > i_min) && (trim (str).length < i_max))
		return true;
	else
		return false;
}

// GENERATE RANDOM STRING
function generate_random ()
{
	var str_random = new String (Math.random ()).replace ("0.", "").substr (0,5);
	return str_random;
}

// VALIDATE IF STRING IS EMPTY
function is_empty (str)
{
	var b_empty = false;
	
	if ((trim (str).length == 0) || (str == null))
		b_empty = true;
	
	return b_empty;
}

// VALIDATE IF OBJECT CONTAINS NUMERIC CHARACTERS
function validate_num (obj)
{
	if (obj != null)
	{
		var str_valid_chars = "0123456789.";

		for (var index = 0; index < obj.value.length; index ++) 
		{
			var chr_letter = obj.value.charAt (index).toLowerCase ();
			if (str_valid_chars.indexOf (chr_letter) == -1)
				obj.value = obj.value.replace (chr_letter, '');
		}
	}
}

// VALIDATE IF OBJECT CONTAINS ALPHA CHARACTERS
function validate_alpha (obj)
{
	if (obj != null)
	{
		 var str_valid_chars = "abcdefghijklmnopqrstuvwxyz";

		for (var index = 0; index < obj.value.length; index ++) 
		{
			var chr_letter = obj.value.charAt (index).toLowerCase ();
			if (str_valid_chars.indexOf (chr_letter) == -1)
				obj.value = obj.value.replace (chr_letter, '');
		}
	}
}

//***************************************************************************
//S-T-A-R-T												   CHECK ALL HANDLING
//***************************************************************************

var arr_class_name = new Array;
var b_initialized = false;
var b_action_selected = false;
var b_record_selected = false;

// SAVE LIST ORIGINAL CLASSES
function init_clases (str_ids)
{
	if (!b_initialized)
	{
		var str_ids_split = str_ids.split ('#'); 
		var index = 0;

		while (index < str_ids_split.length - 1)
		{
			arr_class_name[str_ids_split[index]] = get_element_by_id (HTML_LIST_TR_PREFIX + str_ids_split[index]).className;
			index ++;
		}
		b_initialized = true;
	}
}

// CHECK ALL ITEMS
function check_all (str_ids)
{
	var str_ids_split = str_ids.split ('#'); 
	var index = 0;
	init_clases (str_ids);
	
	while (index < str_ids_split.length - 1)
	{
		if (get_element_by_id (HTML_LIST_CHECKBOX_ALL).checked == true)
		{	
			get_element_by_id (HTML_LIST_CHECKBOX_ITEM + str_ids_split[index]).checked = true;
			get_element_by_id (HTML_LIST_TR_PREFIX + str_ids_split[index]).className = HTML_TR_SELECTED_CLASS;
			
			b_record_selected = true;
			
			if (b_action_selected)
			{
				get_element_by_id (HTML_BTN_ACTION).disabled = false;
				get_element_by_id (HTML_BTN_ACTION).title = "";
			}
		}
		else
		{
			get_element_by_id (HTML_LIST_TR_PREFIX + str_ids_split[index]).className = arr_class_name[str_ids_split[index]];
			get_element_by_id (HTML_LIST_CHECKBOX_ITEM + str_ids_split[index]).checked = false;
			
			b_record_selected = false;
			
			get_element_by_id (HTML_BTN_ACTION).disabled = true;
		}
		index ++;
	}
}

// CHECK ITEM
function check_item (str_ids, str_tr_id)
{
	init_clases (str_ids);
	
	if (get_element_by_id (HTML_LIST_CHECKBOX_ITEM + str_tr_id).checked == true)
	{
		get_element_by_id (HTML_LIST_TR_PREFIX + str_tr_id).className = HTML_TR_SELECTED_CLASS;
		
		b_record_selected = true;
		if (b_action_selected)
		{
			get_element_by_id (HTML_BTN_ACTION).disabled = false;
			get_element_by_id (HTML_BTN_ACTION).title = "";
		}
	}
	else
		get_element_by_id (HTML_LIST_TR_PREFIX + str_tr_id).className = arr_class_name[str_tr_id];
	
	var str_ids_split = str_ids.split ('#'); 
	var index = 0;
	var checked_count = 0;
	while (index < str_ids_split.length - 1)
	{
		if (get_element_by_id (HTML_LIST_CHECKBOX_ITEM + str_ids_split[index]).checked == true)
			checked_count ++;
		index ++;
	}
	if (checked_count == str_ids_split.length - 1)
		get_element_by_id (HTML_LIST_CHECKBOX_ALL).checked = true;
	else
	{
		get_element_by_id (HTML_LIST_CHECKBOX_ALL).checked = false;
		
		if (checked_count == 0)
		{
			get_element_by_id (HTML_BTN_ACTION).disabled = true;
			b_record_selected = false;
		}
	}
}

// SAVE PAGE ACTION
function save_page_action (i_action_value)
{
	if (i_action_value != -1)
	{
		b_action_selected = true;
		if (b_record_selected)
		{
			get_element_by_id (HTML_BTN_ACTION).disabled = false;
			get_element_by_id (HTML_BTN_ACTION).title = "";
		}
	}
	else
	{
		b_action_selected = false;
		get_element_by_id (HTML_BTN_ACTION).disabled = true;
	}
	
	get_element_by_id (HTML_LIST_HIDDEN_ACTION).value = i_action_value;
}

//***************************************************************************
//S-T-A-R-T													  SELECT HANDLING
//***************************************************************************

// HIDE ALL 'SELECT' ELEMENTS FROM PAGE
function hide_selects (b_visibility_status)
{
	var index = 0;
	for (index = 0; index < document.getElementsByTagName ("select").length; index++)
		document.getElementsByTagName ("select").item (index).style.visibility = b_visibility_status;
}

// SET SELECT OPTION
function set_select (obj, str_val)
{
	if (obj != null)
	{
		var index = 0; 
		while (index < obj.length)
		{
			if (obj.options [index].value == str_val)
			{
				obj.options [index].selected = true;
			}
			index ++;
		}
	}
}

// GET THE TEXT FROM SELECTED OPTION
function get_select_text (obj, str_val)
{
	if (obj != null)
	{
		var index = 0; 
		while (index < obj.length)
		{
			if (obj.options[index].value == str_val)
			{
				return obj.options[index].text;
			}
			index ++;
		}
		return "[Undefined]";
	}
}

//***************************************************************************
//S-T-A-R-T													TEXTAREA HANDLING
//***************************************************************************

// INSERT TEXT AT CURSOR POSITION INSIDE TEXTAREA
function insert_into_textarea (obj_textarea, str_text)
{
	if (obj_textarea != null)
	{
		if (obj_textarea.createTextRange && obj_textarea.caretPos)
		{
			var caretPos = obj_textarea.caretPos;
			caretPos.text = caretPos.text.charAt (caretPos.text.length - 1) == ' ' ? str_text + ' ' : str_text;
			obj_textarea.focus ();
		}
		else 
		{
			obj_textarea.value += str_text;
			obj_textarea.focus ();
		}
    }
}

// STORE CARET  
function store_caret (str_text) 
{
	if (str_text.createTextRange) 
	{
		str_text.caretPos = document.selection.createRange ().duplicate ();
	}
}

// COUNT REMAINING CHARACTERS
function count_limit (obj, i_limit, b_show_remaining) 
{
	if (obj != null)
	{
		store_caret (obj);
		
		if (obj.value.length > i_limit)
			obj.value = obj.value.substring (0, i_limit);
		else  
		{
			obj_spn = obj.id.replace ("tpl_", "spn_");
			if (get_element_by_id (obj_spn) != null)
			{
				str_inner_html = get_element_by_id (obj_spn).innerHTML;
				get_element_by_id (obj_spn).innerHTML = "&nbsp;[" + (i_limit - obj.value.length) + "]";
				set_visible (get_element_by_id (obj_spn), b_show_remaining);
			}
		}
	}
}

//***************************************************************************
//S-T-A-R-T											 TEXT DISPLAYING HANDLING
//***************************************************************************

// BLINK FORM ELEMENT
b_blink_on_off = false;
function do_blink (obj, i_timer)
{
	if (obj != null)
	{
		b_blink_on_off = !b_blink_on_off;	
		
		if (blink_onoff == false)
		{
			get_element_by_id (obj).style.display = "none";
		}
		else
		{
			get_element_by_id (obj).style.display = "";
		}
		setTimeout ("do_blink ();", i_timer);
	}
}

// SET FORM ELEMENT VISIBLE
function set_visible (obj, b_visible)
{
	if (obj != null)
	{
		if (b_visible == true)
			obj.style.display = "";
		else 
			obj.style.display = "none";
	}
}

//***************************************************************************
//S-T-A-R-T													  LEGEND HANDLING
//***************************************************************************

// SHOW / HIDE LEGEND
var b_show_legend = true;
function show_legend ()
{
	set_visible (get_element_by_id (HTML_TR_LEGEND), b_show_legend);
	set_visible (get_element_by_id (HTML_IMG_HELP_ON), b_show_legend);
	set_visible (get_element_by_id (HTML_IMG_HELP_OFF), !b_show_legend);
	b_show_legend = !b_show_legend;
}

// SAVE NEW LEGEND SETTINGS
function save_legend_settings (b_show)
{
	if (b_show)
	{
		obj_COOKIE.set_cookie (STR_COOKIE_LEGEND, "1", 10);
		b_show_legend = false;
		set_visible (get_element_by_id (HTML_IMG_HELP_ON), !b_show_legend);
		set_visible (get_element_by_id (HTML_IMG_HELP_OFF), b_show_legend);
	}
	else
	{
		set_visible (get_element_by_id (HTML_TR_LEGEND), false);
		obj_COOKIE.set_cookie (STR_COOKIE_LEGEND, "2", 10);
		b_show_legend = true;
		set_visible (get_element_by_id (HTML_IMG_HELP_OFF), b_show_legend);
		set_visible (get_element_by_id (HTML_IMG_HELP_ON), !b_show_legend);
	}
}

// SHOW OR HIDE LEGEND BASED ON COOKIE INFORMATION
function handle_legend ()
{
	if (get_element_by_id (HTML_TR_LEGEND) != null)
	{
		if (obj_COOKIE.get_cookie (STR_COOKIE_LEGEND))
		{
			if (obj_COOKIE.get_cookie (STR_COOKIE_LEGEND) == 1)
			{
				set_visible (get_element_by_id (HTML_TR_LEGEND), true);
				b_show_legend = false;
				get_element_by_id (HTML_RADIO_SHOW).checked = true;
				set_visible (get_element_by_id (HTML_IMG_HELP_ON), true);
			}
			else if (obj_COOKIE.get_cookie (STR_COOKIE_LEGEND) == 2)
			{
				set_visible (get_element_by_id (HTML_TR_LEGEND), false);
				b_show_legend = true;
				get_element_by_id (HTML_RADIO_HIDE).checked = true;
				set_visible (get_element_by_id (HTML_IMG_HELP_OFF), true);
			}
		}
		else
		{
			set_visible (get_element_by_id (HTML_TR_LEGEND), true);
			b_show_legend = false;
			get_element_by_id (HTML_RADIO_SHOW).checked = true;
			set_visible (get_element_by_id (HTML_IMG_HELP_ON), true);
		}
	}
}

//***************************************************************************
//S-T-A-R-T													   FOCUS HANDLING
//***************************************************************************

// SET FOCUS ON FIRST INPUT TYPE=TEXT FROM PAGE
function handle_focus ()
{
	var index = 0;
	var b_input_has_focus = false;

	while ((index < document.getElementsByTagName ("input").length) && (!b_input_has_focus))
	{
		try
		{
			if (document.getElementsByTagName ("input").item (index).type == "text")
			{
				document.getElementsByTagName ("input").item (index).focus ();
				b_input_has_focus = true;
			}
		}
		catch (e)
		{
			// IF DISABLED OR CANNOT FOCUS, MOVE TO THE NEXT INPUT TYPE=TEXT
		}
		index ++;
	}
}

// SET FOCUS
function set_focus (obj)
{
	if (obj != null)
		obj.focus();
}
