// $Id: form_scripts.js 2461 2006-11-04 09:51:40Z zeke $

var onload_handlers = new Array();
var timeout;

//
// Show/hide any tag by its id.
// parameters:
// id - element id
function fn_show_tag(id, status, stop_listen)
{
	if (document.getElementById(id)) {
		if (status == true || status == false) {
			document.getElementById(id).style.display = (status == true)?"none":"";
		} else {
			document.getElementById(id).style.display = (document.getElementById(id).style.display == "")?"none":"";
		}
	}

	if (stop_listen == true) {
		window.onscroll = '';
	}
}

//
// Select text in text input
//
function fn_select_input(select)
{
	select.select();
}

//
// Disable/enable all form elements inside the tag 
// @id - element id
// @status - boolean (true to disable and false to enable)
function fn_disable_elements(id, status)
{

	node = document.getElementById(id);
	// Process INPUT types...
	inputs = node.getElementsByTagName('INPUT');
	for (i=0;i<inputs.length;i++) {
		node.getElementsByTagName('INPUT')[i].disabled = status;
	}

	// Process TEXTAREA type...
	texts = node.getElementsByTagName('TEXTAREA');
	for (i=0;i<texts.length;i++) {
		node.getElementsByTagName('TEXTAREA')[i].disabled = status;
	}

	// Process SELECT type...
	selects = node.getElementsByTagName('SELECT');
	for (i=0;i<selects.length;i++) {
		node.getElementsByTagName('SELECT')[i].disabled = status;
	}
}

//
// Open pop-up window with detailed image
//
function fn_open_popup_image(popup_script, image_width, image_height)
{
	if (image_width == 0) {
		image_width = 400;
	}
	if (image_height == 0) {
		image_height = 400;
	}
	image_width += 10;
	image_height += 10;

	if ((typeof(handle_popup_image)!='undefined') && (handle_popup_image.closed == false)) {
		handle_popup_image.close();
	}
    handle_popup_image = window.open(popup_script, 'popup_image', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,left=200,top=100,width=' + image_width + ',height=' + image_height + ',resizable=yes');
}

function fn_escape_url(query) 
{
	var start = query.substr(0, query.indexOf('?'));
	var search = query.substr(query.indexOf('?'));
	if (search) {
		var srch_array = search.split("&");
		var temp_array = new Array();
		for (var i = 0; i < srch_array.length; i++) {
			temp_array = srch_array[i].split("=");
			start += temp_array[0] + '=' + escape(unescape(temp_array[1])) + '&'
		}
	}
	return start;
}

//
// Perform request via <SCRIPT> tag
//
function fn_http_request(script_id, url, show_status)
{
    var agt=navigator.userAgent.toLowerCase();
    var needs_escaping = ((agt.indexOf("msie") != -1) || (agt.indexOf("opera") != -1));

	if (needs_escaping) { 
		url = fn_escape_url(url);
	}

	if (typeof(show_status) == "undefined") {
		show_status = true;
	}

	if (show_status == true){
		fn_switch_loading_msg(false);
	}

	var now = new Date();
	url = url + '&prevent_cache='+now.getTime(); // Prevent script from caching

	var script_tag = document.getElementById(script_id);
	if (script_tag) {
		script_tag.parentNode.removeChild(script_tag);
	}

	script_tag = document.createElement('SCRIPT');
	script_tag.type = 'text/javascript';
	script_tag.language = 'javascript';
	script_tag.id = script_id;
    script_tag.src = url;
	document.body.appendChild(script_tag);
}

//
// String utility functions
//

// extract front part of string prior to searchString
function fn_str_get_front(mainStr,searchStr)
{
	foundOffset = mainStr.indexOf(searchStr)
	if (foundOffset == -1) {
		return null
	}
	
	return mainStr.substring(0,foundOffset)
}

// extract back end of string after searchString
function fn_str_get_end(mainStr,searchStr) 
{
	foundOffset = mainStr.indexOf(searchStr)
	if (foundOffset == -1) {
		return null
	}
	
	return mainStr.substring(foundOffset+searchStr.length,mainStr.length)
}

// insert insertString immediately before searchString
function fn_str_insert_string(mainStr,searchStr,insertStr) 
{
	var front = fn_str_get_front(mainStr,searchStr)
	var end = fn_str_get_end(mainStr,searchStr)

	if (front != null && end != null) {
		return front + insertStr + searchStr + end
	}
	
	return null
}

// remove deleteString
function fn_str_delete_string(mainStr,deleteStr) 
{
	return fn_str_replace_string(mainStr,deleteStr,"");
}

// replace searchString with replaceString
function fn_str_replace_string(mainStr,searchStr,replaceStr) 
{
	var front = fn_str_get_front(mainStr,searchStr)
	var end = fn_str_get_end(mainStr,searchStr)

	if (front != null && end != null) {
		return front + replaceStr + end
	}
	
	return mainStr;
}

// Compare 2 strings
// @haystack - where search
// @needle - what search
// @strict - exact compare or partial
function fn_compare_strings(haystack, needle, strict)
{
	if (strict == true) {
		return (haystack == needle);
	} else {
		return (haystack.indexOf(needle) == -1) ? false : true;
	}
}


//
// Check / uncheck all checkboxes in form
// @form_name - form name whose checkboxes should be checked or unchecked
// @checkbox_id - tag identifier of checkboxes that should be checked or unchecked
// @flag - can be true or false
function fn_check_all_checkboxes(form_name, flag, checkbox_id, strict)
{
	if (!checkbox_id) {
		checkbox_id = 'delete_checkbox';
	}

	if (typeof(strict) == 'undefined') {
		strict = true;
	}

	if(!(d_form = document.forms[form_name]))
		return false;

	for(i=0; i < d_form.length; i++) {
		if (fn_compare_strings(d_form.elements[i].id, checkbox_id, strict) && !d_form.elements[i].disabled)
			d_form.elements[i].checked = flag;
	}
	return true;
}

// Check email address for validity
function fn_check_email(email, msg) {

	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	if (filter.test(email)) {
		return true;
	} else{
		alert(msg);
		return false;
	}
}

//
// This function checks required fields and set a mark if something wrong
//
function fn_check_fields(form_name, extra_ids)
{
	var is_ok = true;
	var seqb_exists = document.getElementById('seqb');
	var error_fields = new Array();

	if (!document.forms[form_name]) {
		return false;
	}
	
	var is_ok = true;
	var set_mark = false;

	elms = document.forms[form_name].elements;
	for (i=0; i<elms.length; i++) {
		set_mark = false;

		// Check the email field
		if (typeof(extra_ids) != 'undefined' && extra_ids[elms[i].id] == 'E') {
			if (fn_check_email(elms[i].value, email_invalid) == false) {
				if (required_fields[elms[i].id] == 'Y' || fn_is_blank(elms[i].value) == false) {
					is_ok = false;
					set_mark = true;
				}
			}
		// Check for integer field
		} else if (typeof(extra_ids) != 'undefined' && extra_ids[elms[i].id] == 'I') {
			if (fn_is_integer(elms[i].value) == false) {
				if (required_fields[elms[i].id] == 'Y' || fn_is_blank(elms[i].value) == false) {
					is_ok = false;
					set_mark = true;
				}
			}
		// Check for phone number
		} else if (typeof(extra_ids) != 'undefined' && extra_ids[elms[i].id] == 'P') {
			if (fn_is_phone(elms[i].value) == false) {
				if (required_fields[elms[i].id] == 'Y' || fn_is_blank(elms[i].value) == false) {
					is_ok = false;
					set_mark = true;
				}
			}
		// Check for blank value
		} else {

			if (required_fields[elms[i].id] == 'Y' && fn_is_blank(elms[i].value) == true) {
				is_ok = false;
				set_mark = true;
				error_fields[elms[i].id] = true;
				if (seqb_exists && document.getElementById('seqb').checked == true && typeof(fn_check_if_shipping) == 'function' && fn_check_if_shipping(elms[i].id)) {
					document.getElementById('seqb').click();
				}
			}
		}
		if (document.getElementById('status_'+elms[i].id)) {
			document.getElementById('status_'+elms[i].id).innerHTML = (set_mark == true)? warning_mark : "&nbsp;";
		}
	}

	if (is_ok == false) {
		alert(message);
	}
	return is_ok;
}

//
// Checks if the value is blank
//
function fn_is_blank(val){
	if (val==null){
		return true;
	}
	for (var i=0; i<val.length; i++) {
		if((val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){
			return false;
		}
	}
	return true;
}

//
// Checks if the value is integer
//
function fn_is_integer(val)
{
	if(fn_is_blank(val)){
		return false;
	}
	for(var i=0; i<val.length; i++){
		if (!fn_is_digit(val.charAt(i))) {
			return false;
		}
	}
	return true;
}

//
// Checks if the value is digit
//
function fn_is_digit(num)
{
	if(num.length>1){
		return false;
	}
	var string="1234567890";
	if (string.indexOf(num)!=-1){
		return true;
	}
	return false;
}


//
// Checks if the value is phone number
//
function fn_is_phone(phone)
{
	return phone.match(/^\(?\d{3}\)?[ ]?[\d-]*$/gi) ? true : false;
}

//
// Execute functions on page load
//
function fn_load_handlers()
{
	var i=0;
	for (i=0; i<onload_handlers.length; i++) {
		eval(onload_handlers[i]);
	}

	// If selected_section parameter is passed, add location hash
	var re = new RegExp();
	re.compile("selected_section=\(\\w\)+", "g");
	var m = location.href.match(re);
	if (m) {
		var hash = m[0].split('=');
		location.hash = '#'+hash[1];
	}
}

function fn_show_section(id, scts, redraw_all)
{

	// Fix bug with changing hash string in opera 8.5+
	/*if (is_opera && document_loaded == false) {
		onload_handlers.push("fn_show_section('"+id+"', sections ,'"+separate_form+"', "+redraw_all+");");
		return;
	}*/

	for (i in scts)
	{
		if (i == id) {
			if (document.getElementById('content_'+i)) {
				document.getElementById('content_'+i).style.display = '';
			}
			document.getElementById('tab_'+i+'_bg').className = 'section-active-tab-bg';
			document.getElementById('tab_'+i+'_left').src = tab_left_active_image_path;
			document.getElementById('tab_'+i+'_right').src = tab_right_active_image_path;
			if (document.getElementsByName('selected_section')) {
				elms = document.getElementsByName('selected_section');
				for (var k=0; k<elms.length; k++) {
					elms[k].value = id;
				}
				location.hash = '#'+id;
			}
		} else {
			if (document.getElementById('tab_'+i+'_bg').className == 'section-active-tab-bg' || redraw_all) {
				if (document.getElementById('content_'+i)) {
					document.getElementById('content_'+i).style.display = 'none';
				}
				document.getElementById('tab_'+i+'_bg').className = 'section-inactive-tab-bg';
				document.getElementById('tab_'+i+'_left').src = tab_left_image_path;
				document.getElementById('tab_'+i+'_right').src = tab_right_image_path;
			}
		}
	}
}

function fn_get_window_sizes()
{
	var wnd_arr = new Array();

	if (window.height) {
		wnd_arr['offset_x'] = self.pageXOffset;
		wnd_arr['offset_y'] = self.pageYOffset;
		wnd_arr['view_height'] = self.innerHeight;
		wnd_arr['view_width'] = self.innerWidth;
		wnd_arr['height'] = window.height;
		wnd_arr['width'] = window.width;
	} else {
		wnd_arr['offset_x'] = document.body.scrollLeft;
		wnd_arr['offset_y'] = document.body.scrollTop;
		wnd_arr['view_height'] = document.body.clientHeight;
		wnd_arr['view_width'] = document.body.clientWidth;
		wnd_arr['height'] = document.body.scrollHeight;
		wnd_arr['width'] = document.body.scrollWidth;
	}

	return wnd_arr;
}

function fn_switch_loading_msg(status)
{
	var dlg = document.getElementById('dialog_bg');
	var msg = document.getElementById('dialog_msg');

	var wnd_sizes = fn_get_window_sizes();
	dlg.style.left = 0;
	dlg.style.top = 0;
	dlg.style.width=wnd_sizes['width'];
	dlg.style.height=wnd_sizes['height'];

	msg.style.left = wnd_sizes['offset_x'];
	msg.style.top = wnd_sizes['offset_y'];
	msg.style.width = wnd_sizes['view_width'];
	msg.style.height = wnd_sizes['view_height'];

	fn_show_tag('dialog_bg', status);
}

function fn_check_selected(form_name, checkbox_id, no_alert, strict)
{
	if (typeof(strict) == 'undefined') {
		strict = true;
	}
	
	if (!checkbox_id) {
		checkbox_id = 'delete_checkbox';
	}

	if(!(d_form = document.forms[form_name])) {
		return false;
	}

	for(i=0; i < d_form.length; i++) {
		if (fn_compare_strings(d_form.elements[i].id, checkbox_id, strict)) {
			if (d_form.elements[i].checked) {
				return true;
			}
		}
	}
	if (!no_alert) {
		alert(error_no_items_selected);
	}
	return false;
}

function fn_delete_selected(form_name, mode_value, no_confirmation, checkbox_id, elm_name, strict) 
{

	if (typeof(strict) == 'undefined') {
		strict = true;
	}
	if (!fn_check_selected(form_name, checkbox_id, '', strict)) {
		return false;
	}
	if (!no_confirmation) {
		if (!confirm(text_delete_confirmation)) {
			return false;
		}
	}

	if (typeof(elm_name)== 'undefined' || elm_name.length == 0) {
		elm_name = mode_name;
	}

	document.forms[form_name].elements[elm_name].value = mode_value;
	document.forms[form_name].submit();
	return true;
}

function fn_ajax_update_vars(page, url, msg)
{
	// Set page input field to current page
	if (page.length > 0) {
		elms = document.getElementsByName('page');
		if (elms.length>0) {
			for (var i=0; i<elms.length; i++) {
				elms[i].value=page;
			}
		}
	}

	if (url.length > 0) {
		elms = document.getElementsByName('redirect_url');
		if (elms.length>0) {
			for (var i=0; i<elms.length; i++) {
				elms[i].value=url;
			}
		}
	}

	if (msg.length > 0) {
		window.onscroll = fn_align_element;
		document.getElementById('ajax_message').innerHTML = msg;
		fn_align_element();
		fn_show_tag('ajax_message', false);
		window.setTimeout("fn_show_tag('ajax_message', true, true);", 3000);
	}

	if (typeof(fn_check_all_exceptions) == 'function') {
		fn_check_all_exceptions(false);
	}

	fn_switch_loading_msg(true);
}

function fn_align_element()
{
	var wnd_sizes = fn_get_window_sizes();
	msg = document.getElementById('ajax_message');
	msg.style.top = wnd_sizes['offset_y'] + (wnd_sizes['view_height'] - parseInt(msg.style.height)) / 2;
	msg.style.left = wnd_sizes['offset_x'] + (wnd_sizes['view_width'] - parseInt(msg.style.width)) / 2;
}

function fn_format_num(expr, decplaces, primary)
{
	var num = '';
	var decimals =  '';
	var tmp = 0;
	var k = 0;
	var i = 0;
	var thousands_separator = (primary == true) ? primary_thousands_separator : secondary_thousands_separator;
	var decimals_separator = (primary == true) ? primary_decimals_separator : secondary_decimals_separator;
	decplaces = (expr % 1 == 0) ? 0 : 2;

	expr = fn_format_price(expr, decplaces);
	frac_part = expr.substr(expr.indexOf('.')+1) + '0000';
	num = parseInt(expr).toString();

	// Separate thousands
	if (num.length >= 4 && thousands_separator != '') {
		tmp = new Array();
		for (var i=num.length-3; i>-4 ; i=i-3) {
			k = 3;
			if (i<0) {
				k = 3 + i;
				i=0;
			}
			tmp.push(num.substr(i,k));
			if (i==0) {
				break;
			}
		}
		num = tmp.reverse().join(thousands_separator);
	}

	// Add decimals
	if (decplaces > 0) {
		num += decimals_separator + frac_part.substr(0, decplaces);
	}
	
	return num;
}

function fn_blink(cycle)
{
	if (cycle > 6) {
		be.style.visibility = 'visible';
		clearTimeout(timeout);
		return;
	}
	cycle++;
	if (be = document.getElementById('blinking_elm')) {
		be.style.visibility = (be.style.visibility == 'visible') ? 'hidden' : 'visible';
		timeout = window.setTimeout('fn_blink('+cycle+')', 500);
	}
}

function fn_form_get_request(form_name)
{
	var i = 0;
	var url = index_script + '?';

	if (document.forms[form_name]) {
		elms = document.forms[form_name].elements;
		for (i = 0; i < elms.length ; i++) {
			if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked == false) || elms[i].disabled == true) {
				continue;
			}
			url += elms[i].name + '=' + elms[i].value + '&'
		}

		return url;
	}

	return false;
}

function fn_format_price(value, decplaces)
{
	if (typeof(decplaces) == 'undefined') {
		decplaces = 2;
	}

	value = parseFloat(value.toString()) + 0.00000000001;
	return value.toFixed(decplaces);
}

