// *** form control functions ***

var active_form;
var html_element;
var html_content;

var tab_menu = new Array();
                                
function load_form(){
			
	if(document.general_form){	

		active_form = new form_object();
        active_form.capture_form_elements();
						
		if(typeof form_data != "undefined")
                          		
			for(var element_no in form_data)
                                   		
				add_table_row(element_no);
						
		if(check_element("edit") != false){
			
			html_element = document.getElementById("edit").contentWindow.document;
			html_element.designMode = "on";
				
		}
					
	}
                                
}

function submit_form(){
	
	if(typeof(active_form) == "object"){
	
		switch(active_form.validate_form_elements()){
			
			case true:
				
				document.general_form.submit();
				
				break;
			
			case false:
				
				alert(active_form.get_feedback());
				
				break;
				
		}
		
	}

}

function focus_form_element(e){

	var src = get_event_element(e);
	
	// *** focus element and highlight ***
				
	if(typeof(active_form) == "object"){
	
		if(src.type == "text" || src.type == "textarea" || (src.type).indexOf("select") != -1){
						
			active_form.set_focused_element(src.name);
			
			src.style.background = "#FFFFCC";
			
		}

	}
              	
}

function blur_form_element(e){

	// *** 22/02/2008 - by resetting previous form_elements the blur function is no longer required ***

	//var src = get_event_element(e);

	// *** unhighlight ***
					
	//src.style.background = "#FFFFFF";

}

function get_event_element(e){

	var e = e || window.event;

	return e.srcElement || e.target;

}

// *** general variables ***

var validate_highlight = new Array("993366","20205D");
var day_list = new Array("sunday","monday","tuesday","wednesday","thursday","friday","saturday");
var month_list = new Array("january","february","march","april","may","june","july","august","september","october","november","december");

// *** browser identification functions ***

var nn4 = (document.layers)? true : false;
var ie = (document.all)? true : false;
var dom = (document.getElementId && !document.all)? true : false;

function check_browser(element){

        if(nn4) return document.layers[element];
        else if(ie) return document.all[element];
        else return check_element(element);

}

// *** event capture functions ***

var control_element = false;

var mouse_x = 0;
var mouse_y = 0;
var screen_scale = screen.width * 0.8;

function capture_mouse(e){

	var e = e || window.event;

    if(ie){
		
		mouse_x = (window.event.clientX + document.documentElement.scrollLeft);
        mouse_y = window.event.clientY + document.documentElement.scrollTop;
	
	}else{
		
        mouse_x = e.pageX;
        mouse_y = e.pageY;
		
    }
	
	mouse_x -= 180;
	mouse_y -= 90;
	
    if(mouse_x > screen_scale) 
	
		mouse_x = screen_scale;
		
	if (e.button == 0 || e.button == 1)
	
		if(typeof(control_element) == "object")

			control_element.width = mouse_x - control_element.offsetLeft;

}

function element_select(element){ control_element = element;}
function element_deselect(){ control_element = false;}

if(!ie) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = capture_mouse;

// *** data type functions ***

function is_html(val){ return ( val.replace(/<>/,"") == val)? false : true; }

function is_string(val){return (val == NaN)? false : (val != "")? true : false;}

function is_int(val){return (val == NaN)? false : (parseInt(val) == val)? true : false;}

function is_float(val){ return (val == NaN)? false : (parseFloat(val) == val)? true : false; }

function parse_color(color){ return color.replace(/[^0-9A-F]/i,""); }

// *** data sort ***

function numeric_sort(x,y){return(x-y);}

// *** general form functions ***

function check_element(element){

	if(!document.getElementById) return false;

	if(element.indexOf(":") != -1){
		
		var element_list = element.split(":");

		for(var element_no in element_list)
		
			if(document.getElementById(element_list[element_no])) 
			
				return document.getElementById(element_list[element_no]);
		
	}
	
	return (!document.getElementById(element))? false : document.getElementById(element);

}

function disable_element(element){

	var form_element = check_element(element);

	if(form_element != false) form_element.disabled = (form_element.disabledi == true)? false : true;

}

// *** select form functions ***

function get_select(element,data){

	return eval("element.options[element.selectedIndex]." + ((data==0)? "value" : "text" ));

}

function get_select_value(list){

	return (list.selectedIndex > 0)? list.options[list.selectedIndex].value : list.value;

}

function add_select_option(element,label,value,option_no,default_flag){

	element.options[option_no] = new Option(label,value,default_flag);

}

function add_select_range(element_name,start_value,end_value,increment){
	
	var element = check_element(element_name);
	var option_no = 0;	

	if(element != false){
			
        for(var option_value = start_value; option_value <= end_value; option_value += increment){
        		
			add_select_option(element,option_value,option_value,option_no,false);
			
			option_no++;
        	
		}

	}
}

function load_list(view,list_type){
	
	if(list_type.indexOf(":")!=-1){
		 
		var list_elements = list_type.split(":");
		var list_object = list_elements[1];
		var reference = list_elements[0]+"_"+list_elements[1]+"_id";
		
		var list = eval(list_elements.pop());

	}else{
	
		if(list_type.indexOf(",")!=-1){

        	var list_elements = list_type.split(",");
        	var list_object = list_elements[1];
        	var reference = list_elements[0];

		}else{
		
			var list_object = list_type;
			var reference = list_type+"_id";
		}
		
		var list = eval(list_object);
	
	}
	
	var element_object = check_element("num0_"+reference+":num1_"+reference);
    
	var option_no = 1;

    if(element_object != false){
		
		var list_title = list_object.split("_");
	
		for(var element in list_title)
		
			list_title[element] = list_title[element].charAt(0).toUpperCase() + list_title[element].substring(1,list_title[element].length);
		
		var list_label = "Choose a "+list_title.join(" ");
		var list_default_id = 0;

        element_object.options.length = 0;
        
		add_select_option(element_object,list_label,"",0,true);

        for(var element in list){
            
			var active_element = list[element];
			var option_display = true;
			
			switch(view){
				
				case 1:
				
					// *** load list elements by foreign key relation ***
				
					if(active_element.get_fkey())
						
						if(element_id != active_element.get_fkey())
						
							option_display = false;
					
					break;
				
				case 2:
					
					// *** load list elements be direct key relation ***
					
					if(active_element.get_pkey() == element_id)
					 
						list_default_id = element_id;

					break;
					
				case 3:
				
					// *** load list elements by foreign key to foreign key relation, used for internal page reference.  Cannot reference itself ***
					
					if(active_element.get_fkey())
						
						if(list[element_id].get_fkey() != active_element.get_fkey() || element_id == active_element.get_pkey())
						
							option_display = false;
					
					break;		
		
			}
                       
			if(option_display == true){
				
				eval("add_select_option(element_object,active_element."+list_object+"_title,active_element."+list_object+"_id,option_no,false);");
               	
				option_no++;
                	
			}
			
		}
		
		if(list_default_id != 0)
		
			element_object.value = list_default_id;
	
	}

}

function remove_select_options(form_element,secure_level){
	
	var element = check_element(form_element);

	if(element != false && secure_level != 1) 
	
		for(var option_no = (secure_level-1); option_no >= 1; option_no--) 
		
			element.remove(option_no);

}

// *** radio form functions ***

function get_radio_value(form_element){

	var element_options = (document.getElementsByName(form_element)).length;

	for(var option_no = 0; option_no < element_options; option_no++){
		
		var element = check_element(form_element + option_no);
		
		if(element.checked) 	
			
			return element.value;
		
	}

}

// *** cookie functions ***

function toggle_sort(form,name){
	
	var direction = 0;
	
	// *** default sort to DESC ***
	
	var sort_cookie = form + "_order";
	var sort_order = new Array("DESC","ASC");
	var sort_column = read_cookie(sort_cookie);
	
	if(sort_column !== false)
	
		direction = (sort_column.indexOf(name) != -1)? ((sort_column.indexOf("ASC") != -1)? 0 : 1) : 0;

	// *** each statistics form needs to have is own order cookie ***

	create_cookie(sort_cookie,name+" "+sort_order[direction],1);
	
	// *** reload page and avoid data repost ***

	if((window.location.toString()).indexOf("statistics") != -1) window.location.reload(); else window.location = window.location;
	
}

function read_cookie(name){

	var elements = document.cookie.split(';');
	
	for(var element in elements){
	
		var cookie_element = elements[element];
	
		if(cookie_element.indexOf(name) != -1)
		
			return cookie_element.substring(cookie_element.indexOf("=") + 1,cookie_element.length);

	}
	
	return false;

}

function create_cookie(name,value,days) {

	var expire_date = new Date();
	expire_date.setTime(expire_date.getTime()+(((days)? days : 1) * 24 * 60 * 60 * 1000));

	document.cookie = name + "=" + value + "; expires=" + expire_date.toGMTString() + "; path=/";

}

function delete_cookie(name) {
	
	create_cookie(name,"",-1);

}


// *** navigation functions ***

function load_page(page_name,key_type){
	
	var element = check_element("record_id");

    if(element.value != false && element.value != -1){
		
		if(typeof form_data == "object"){
				
			var location_param = (key_type==1)? form_data[element.value].get_fkey() : form_data[element.value].get_id();
			
		}else{
			
			var location_param = element.value;
			
		}
		
		location.href = page_name+"/"+((key_type==1)? location_param+"/"+key_type : location_param);
        
	}

}

// *** error functions ***

window.onerror = error_handler;
function error_handler(){return true;}