//	Copyright: Well-connected Ltd (http://www.well-connected.net/), 2012. All rights reserved.

var type_numeric	= "0123456789";
var type_lowercase	= "abcdefghijklmnopqrstuvwxyz";
var type_uppercase	= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function serialise_form ( form_id ) {
	var s_form = "";
	for ( var i = 0; i < $(form_id).elements.length; i++ )
	{
		var e = $(form_id).elements[i];
		if ( e.type == "file" ||
		    e.type == "edit" ||
		    e.type == "text" ||
		    e.type == "textarea" ||
		    e.type == "select-one" ||
		    e.type == "hidden" ) {
			s_form += "&" + e.id + "=" + trim ( e.value );
		}
		else if ( e.type == "radio" || e.type == "checkbox" ) {
			s_form += "&" + e.id + "=" + ( e.checked ? 1: 0 );
		}
//		else if ( e.type == "button" );
//		else
//			alert ( "Field type not supported: type=" + e.type + ", id= " + e.id + "=" + e.value );
	}
	return s_form;
}

function post_form ( form_id, s_url ) {
/*	Submit form, facilitating multiple alternative form actions,
	and postponing the definition of the form action
	until after rendering of the HTML body has commenced.
*/
//	var s_form = serialise_form ( form_id );
//	alert ( s_url + "\n\n" + s_form );

	$(form_id).action = s_url;
	$(form_id).submit ();
}

function submit_enter ( e )
{
	var keycode;
	if ( window.event )
		keycode = window.event.keyCode;
	else if ( e )
		keycode = e.which;
	else
		return false;

	if ( keycode == 13 )
		return true;
	else
		return false;
}

//	Field validation
function is_type ( s_value, s_type )
{
	if ( s_value == "" )
		return true;

	for ( i=0; i < s_value.length; i++ )
	{
		if ( s_type.indexOf ( s_value.charAt (i), 0 ) == -1 )
			return false;
	}

	return true;
}
function is_numeric ( s_value )
{
	return is_type ( s_value, type_numeric );
}
function is_lowercase ( s_value )
{
	return is_type ( s_value, type_lowercase );
}
function is_uppercase ( s_value )
{
	return is_type ( s_value, type_uppercase );
}
function is_alphabetic ( s_value )
{
	return is_type ( s_value, type_lowercase + type_uppercase );
}
function is_alphanumeric ( s_value )
{
	return is_type ( s_value, type_lowercase + type_uppercase + type_numeric );
}
function is_leap_year ( year )
//	Purpose:	determine if year is a leap year; must be 4 digit.
//	Return:		true if year is a leap year; false otherwise
{
	if ( year % 400 == 0 )
		return true;
	else if	( year % 100  == 0 )
		return false;
	else if	( year % 4  == 0 )
		return true;
	else
		return false;
}
function check_date ( s_obj )
//	Purpose:	Check that s_obj contains a value in universal date format (yyyy-mm-dd)
//	Return:		True if s_obj passes the check; false otherwise
//	Remarks:	Leading zeros in day and month are not required.
//			2 digit year will be extended to 4 digit automatically.
{
	if ( s_obj.value.match ( /^(\d{2}|\d{4})[-\.\/]\d{1,2}[-\.\/]\d{1,2}$/ ) )
	{
		var a_days	= [31,28,31,30,31,30,31,31,30,31,30,31];
		var d		= s_obj.value.match ( /\d+/g );
		var year	= Number (d[0]);

		if ( year < 100 )
			year += Math.floor( new Date().getFullYear() / 100 ) * 100;

		if ( is_leap_year ( year ) )
			a_days[1] = 29;

		if ( d[1] <= 12 && d[2] <= a_days[d[1]-1] )
		{
			s_obj.value = year + "-" + d[1] + "-" + d[2];
			return true;
		}
	}
	s_obj.focus();
	s_obj.select();
	alert ( "Invalid date entered: '" + s_obj.value + "'\n\nPlease enter a proper date in yyyy-mm-dd format!" );
	return false;
}
function check_number ( s_obj )
{
	if ( isNaN ( s_obj.value ) )
	{
		s_obj.focus();
		s_obj.select();
		alert ( "Invalid number entered: '" + s_obj.value + "'\n\nPlease enter a proper integer number!" );
		return false;
	}
	else
		return true;
}

