// Copyright 2007 Internetrix (http://www.internetrix.net)
// Standard operations used in the Freestyle backend

function validateEmail(addr)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return (filter.test(addr));
}


function set_disabled(element_name, value)
{
	var element = document.getElementById(element_name);

	if (element.tagName == 'TR' || element.tagName == 'TABLE' || element.tagName == 'DIV' )
	{
		var input_elements = element.getElementsByTagName('input');

		for (var i = 0; i < input_elements.length; i++)
		{
			input_elements[i].disabled = value;
		}
		
		var select_elements = element.getElementsByTagName('select');

		for (var i = 0; i < select_elements.length; i++)
		{
			select_elements[i].disabled = value;
		}

	} else {
		element.disabled = value;
	}
}

function show_hide_element(element_id)
{
	var element = document.getElementById(element_id);
	
	if (element)
	{
		element.style.display = element.style.display == 'none' ? '' : 'none';
	}
}

// Following 3 functions used on resource listing/associaton pages
function toggle_display_folder_row(id)
{
	var element = document.getElementById('folder_'+id+'_contents');
	var icon = document.getElementById('page_'+id+'_contents_arrow');
	var folder = document.getElementById('folder_'+id);
	
	if(element.style.display=='none')
	{
		element.style.display='';
		icon.src='/images/freestyle/admin/diary_arrow_down.gif';
		folder.src='/images/freestyle/admin/icon_folder.png';
	}
	else
	{
		element.style.display='none';
		icon.src='/images/freestyle/admin/diary_arrow.gif';
		folder.src='/images/freestyle/admin/icon_folder_closed.png';
	}
}

function toggle_folder_improved(folder_id, link_id) {
	if(document.getElementById(folder_id).style.display == 'none'){
		document.getElementById(folder_id).style.display = '';
		document.getElementById(link_id).className = '';
	}else{
		document.getElementById(folder_id).style.display = 'none';
		document.getElementById(link_id).className = 'closed_folder';
	}
}

function folder_row_highlight(row_id, checkbox_id)
{
	var row = document.getElementById(row_id);
	var checkbox = document.getElementById(checkbox_id);
	
	if(checkbox.checked){
		row.style.border = "1px solid #d79405";
		row.style.backgroundColor = "#ffedc5";
	}else{
		row.style.border = "1px solid white";
		if(row.className == 'link_grey_line')
			row.style.backgroundColor = "#ecf0f2";
		else
			row.style.backgroundColor = "white";
	}
}

function check_associations()
{
	var input_list = document.getElementsByTagName('input');
	var tmp;
	
	for(var i=0;i<input_list.length;i++){
		if(input_list[i].getAttribute('type') == 'checkbox' && input_list[i].id.split('_')[0] == 'link'){
			tmp = input_list[i].id.split('_')[1];
			folder_row_highlight('lib_row'+tmp,input_list[i].id);
		}
	}
}

// Following 3 functions used on resource listing/associaton pages
function toggle_display_rule_page_row(id)
{
	var element = document.getElementById('folder_'+id+'_contents');
	var icon = document.getElementById('page_'+id+'_contents_arrow');
	
	if(element.style.display=='none')
	{
		element.style.display='';
		icon.src='/images/freestyle/admin/diary_arrow_down.gif';
	}
	else
	{
		element.style.display='none';
		icon.src='/images/freestyle/admin/diary_arrow.gif';
	}
}

function check_numeric(e)
{
	var keynum;
	var keychar;
	var numcheck;

	if (window.event) 	// IE
	{
		if (!e) var e = window.event;
		keynum = e.keyCode;				
	}
	else			// FF
	{
		keynum = e.which;
	}

	keychar = String.fromCharCode(keynum);
	numcheck = /\d/;
	return numcheck.test(keychar);
}

function check_control(e)
{
	var keynum;
	var keychar;

	if (window.event) 	// IE
	{
		if (!e) var e = window.event;
		keynum = e.keyCode;				
	}
	else			// FF
	{
		keynum = e.which;
	}

	keychar = String.fromCharCode(keynum);
	return keynum == 8 || keynum == 37 || keynum == 39 || keynum == 9;
}

function check_space(e)
{
	var keynum;
	var keychar;

	if (window.event) 	// IE
	{
		if (!e) var e = window.event;
		keynum = e.keyCode;				
	}
	else			// FF
	{
		keynum = e.which;
	}

	keychar = String.fromCharCode(keynum);
	return keynum == 32;
}

var end_altered = false;

function update_time(name)
{
	var date_field = $(name+'_date');
	var date_obj;
	
	if(date_field.value=='')
	{
		date_obj=new Date();
		var today_string = date_obj.getDate() + '/' + (date_obj.getMonth()+1) + '/' + date_obj.getFullYear();
		date_field.value = today_string;
	}
	else
	{
		var date_string = date_field.value;
		var date_array = date_string.match(/(\d+)\D(\d+)\D(\d+)/);
		
		date_obj=new Date(date_array[3],date_array[2]-1,date_array[1]);
	}
	
	if(name == 'end')
	{
		end_altered = true;
	}
	if(name == 'start' && ! end_altered)
	{
		var time_string = document.getElementById(name+'_time').value;
		var time_array = time_string.match(/(\d+):(\d+) (\S+)/);
		
		time_array[1] = time_array[1] % 12;
		
		if(time_array[3].match(/pm/i)) { 
			time_array[1] += 12
		}
		
		date_obj.setHours(time_array[1]);
		date_obj.setMinutes(Number(time_array[2]) + 30);	//Add half an hour (=30 mins) to the start time to get the end time
		
		var end_date_field = $('end_date');
		if(end_date_field.value=='')
		{
			end_date_field.value=date_obj.getDate() + '/' + (date_obj.getMonth()+1) + '/' + date_obj.getFullYear();
		}
		var hours = date_obj.getHours();
		var division = hours>11 ? ' PM' : ' AM';
		hours = hours % 12;
		if(hours==0){hours = 12;}
		
		var minutes = date_obj.getMinutes().toString();
		if(minutes.length==1){minutes='0'+minutes};
		
		$('end_time').value=hours+':'+minutes+division;
	}
}


// Checks the time is valid, if its not it converts to the nearest valid time
// e.g 3:96 PM becomes 4:36 PM
function validate_time(name) {

	var date_obj = new Date();
	var time_string = document.getElementById(name+'_time').value; 	//Gets value from html
	var time_array = time_string.match(/(\d+)\D(\d+) *(\S*)/);		//Split time string
	if(!time_array){time_array=['12:00 PM','12','00','PM'];}
	if(time_array[1] == 12){time_array[1] = 0;}
	
	if(time_array[3].match(/pm/i)) { 
		time_array[1] = Number(time_array[1]) + 12;		//Gah - stupid numeric addition having the same operator as string concat
	}
	
	date_obj.setHours(Number(time_array[1]));								// Now put the time into a date object, which will convert it to a valid time
	date_obj.setMinutes(Number(time_array[2]));
	
	var hours = date_obj.getHours();
	var division = hours>11 ? ' PM' : ' AM';
	hours = hours % 12;
	
	if(hours==0) {
		hours = 12;
	}
	
	var minutes = date_obj.getMinutes().toString();
	if(minutes.length==1){minutes='0'+minutes};

	$(name + '_time').value=hours+':'+minutes+division;
}

function set_time(name, value)
{
	$(name+'_time').value=value;
	update_time(name);
	layer_display('');
}

function MM_showHideLayers() { //v6.0
	var i,p,v,obj,args=MM_showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3) 
	{
	  	if ((obj=MM_findObj(args[i]))!=null) 
		{ 
			v=args[i+2];
	    	if (obj.style) 
			{ 
				obj=obj.style; 
				v=(v=='show')?'block':(v=='hide')?'none':v;
			}
	    	obj.display=v; 
		}
	}
}
function MM_findObj(n, d) { //v4.01
	var p,i,x;  
	if(!d) d=document; 
  	if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; 
		n=n.substring(0,p);
	}
  	if(!(x=d[n])&&d.all) x=d.all[n]; 
	for (i=0;!x&&i<d.forms.length;i++) 
		x=d.forms[i][n];
  	for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
		x=MM_findObj(n,d.layers[i].document);
  	if(!x && d.getElementById) 
		x=d.getElementById(n); 
	return x;
}


var displayed_layer = '';
var just_displayed = false;
function layer_display(id,classname)
{
	if(just_displayed && id=='')
	{
		just_displayed = false;
		return;
	}
	if(displayed_layer != '')
	{
		update_from_layer(displayed_layer);
		MM_showHideLayers(displayed_layer+'_dropdown', '', 'hide');
		if(id=='')
		{
			hide_me = document.getElementsByTagName('select');
			for(var i=0; i<hide_me.length; i++)
			{
					hide_me[i].style.display='';
			}
		}
	}
	
	if(id != '')
	{
		just_displayed = true;
		MM_showHideLayers(id+'_dropdown', '', 'show');
		if(displayed_layer=='')
		{
			hide_me = document.getElementsByTagName('select');
			for(var i=0; i<hide_me.length; i++)
			{
				if (classname)
				{
					if (hide_me[i].className.match(classname)) hide_me[i].style.display='none';
				}
				else
				{
					hide_me[i].style.display='none';
				}
			}
		}
	}
	displayed_layer = id;
}

function update_from_layer(id)
{
	var inputs = document.getElementById(id+'_dropdown').getElementsByTagName('input');
	var value_array = new Array();
	var j = 0;
	for(var i=0; i<inputs.length; i++)
	{
		if(inputs[i].checked)
		{
			value_array[j++] = inputs[i].value;
		}
	}
	var dest = document.getElementById(id);
	if(!dest) {return};
	dest.value=value_array.join();
	
	var text_field = document.getElementById(id+'_text');
	if(text_field)
	{
		var key = id;
		var string = '';
		if(id == 'cc' || id == 'to')
		{
			id='emails';
		}
		for(var i=0; i<value_array.length; i++)
		{
			if(i!=0)
			{
				string = string+', ';
			}
			string = string+(dropdowns[id][value_array[i]] || dropdowns['staff_email'][value_array[i]]);
		}
		text_field.value = string;
	}
}


// Old original function still hanging around
function toggle_display(id)
{
	var element = document.getElementById(id);
	var icon = document.getElementById(id+'_arrow');
	if(element.style.display=='none')
	{
		element.style.display='';
		icon.src='/images/freestyle/admin/diary_arrow_down.gif';
	}
	else
	{
		element.style.display='none';
		icon.src='/images/freestyle/admin/diary_arrow.gif';
	}
}

function check_child_rules(row_id, object_type, checkbox_id) {
	var rows = document.getElementsByClassName('checkbox_'+object_type+ '_'+row_id);
	var rule_id;
	var checkbox = $(checkbox_id);
	
	for(var i = 0;i < rows.length; i++){
		rule_id = rows[i].parentNode.parentNode.id.split('_')[3];
		
		if(checkbox.checked) {
			rows[i].checked = 'true';
			rows[i].disabled = 'true';
		}
		else {
			rows[i].checked = '';
			rows[i].disabled = '';
		}
		
		folder_row_highlight('rule_row_' + object_type + '_' + rule_id, 'rule_'+rule_id);
	}
}

/* 
 * Based on code from http://guymal.com/mycode/iframe_size/
 */
function resize_iframe_height(iframe_id)
{
	var the_frame = document.getElementById(iframe_id);
	var height = the_frame.contentWindow.document.body.scrollHeight;
	the_frame.height = height;	
}

function resize_window(window, width)
{
	var height = window.document.body.scrollHeight + 80;
	window.resizeTo(width, height);
}


/*
 * Algorithm by Mark "Tarquin" Wilton-Jones at
 * http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
 * 
 */

function get_window_width() {
	var myWidth = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
	}

	return myWidth;
}

function get_window_height() {
	var myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myHeight = document.body.clientHeight;
	}

	return myHeight;
}
