
var JSL_Debug=false;

function JSL_DebugMessage(message)
{
	if (JSL_Debug) alert(message);
	return false;
}

function JSL_InvalidAction(object,message,setfocus,setselect,setclear)
{
	if (message!="") alert(message);
	if (setclear) object.value="";
	if (setfocus) object.focus();
	if (setselect) object.select();
}

function JSL_Convert_upcase(strIn)
{
	return strIn.toUpperCase()
}

function JSL_Trim(strIn)
{
	var strOut="";
	var strOut2="";
	var i;
	for(i=0;i<strIn.length;i++)
	{
		var c=strIn.charAt(i);
		if (c != ' ')
		{
			strOut = strIn.substring(i,strIn.length);
			break;
		}
	}
	for(i=strOut.length-1;i>=0;i--)
	{
		var c=strOut.charAt(i);
		if (c != ' ')
		{
			strOut2 = strOut.substring(0,i+1);
			break;
		}
	}
	return strOut2;
}

function JSL_ValidateRegExp(object,expression,message,trim,setfocus,setselect,setclear,convert)
{
	var objectValue;
	if (object==null) return JSL_DebugMessage("JSL Debug:\nValidate function called with null object");
	if (object.type!="text" && object.type!="textarea")  return JSL_DebugMessage("JSL Debug:\nValidate function called with invalid object type");
	if (message==null) message="";
	if (trim==null) trim=true;
	if (setfocus==null) setfocus=true;
	if (setselect==null) setselect=true;
	if (setclear==null) setclear=false;
	if (convert==null) convert="";

	if (object.type.indexOf("select")>=0)
	{ 
		setselect=false;
		setclear=false;
		trim=false;
		convert="";
	}
	else
	{
		if (object.type!="hidden" && object.type!="text" && object.type!="textarea" && object.type!="password")  return JSL_DebugMessage("JSL Debug:\nValidate function called with invalid object type, " + object.type);
	}
	objectValue=object.value;

	if (object.type=="textarea")
	{
		var re;
		re = /\n/g;
		objectValue = objectValue.replace(re, "");
	}


	if (trim) objectValue=JSL_Trim(objectValue);
	object.value=objectValue;
	if (convert!="")
	{
		var conversionCall;
		var conversionResult;
		var objectType;
		eval("objectType=typeof("+convert+")");
		if (objectType!="function")
		{
			JSL_DebugMessage("JSL Debug:\nUndefined convert function used in validate");
			JSL_InvalidAction(object,message,setfocus,setselect,setclear);
			return false;
		}
		conversionCall="conversionResult="+convert+"(objectValue)";
		eval(conversionCall);
		if (conversionResult==null)
		{
			JSL_InvalidAction(object,message,setfocus,setselect,setclear);
			return false;
		}
		objectValue=conversionResult;
		object.value=conversionResult;
	}
	if (expression.test(objectValue)) return true;
	JSL_InvalidAction(object,message,setfocus,setselect,setclear);
	return false;
}

function JSL_ValidateNotEmpty(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^.+$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateTelephone(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^[0123456789 \(\)\-\+]{8,25}$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateEmail(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^.+@.+\.[a-zA-Z0-9]{2,}$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateCombo(object,message,invalidIndex,setFocus)
{
	if (object==null) return JSL_DebugMessage("JSL Debug:\nValidate function called with null object");
	if (invalidIndex==null) invalidIndex=0;
	if (message==null) message="";
	if (setFocus==null) setFocus=true;
	if (object.selectedIndex==invalidIndex)
	{
		JSL_InvalidAction(object,message,setFocus,false,false);
		return false;
	}
	return true;
}

function JSL_ValidateChecks(objectList,message,minSelected,maxSelected,setFocus)
{
	if (objectList==null) return JSL_DebugMessage("JSL Debug:\nValidate function called with null object");
	if (minSelected==null) minSelected=1;
	if (maxSelected==null) maxSelected=10000;
	if (message==null) message="";
	if (setFocus==null) setFocus=true;
	var sel=0;
	for (var i=0;i<objectList.length;i++)
	{
		if (objectList[i].checked) sel++;
	}
	if (sel<minSelected || sel>maxSelected)
	{
		JSL_InvalidAction(objectList[0],message,setFocus,false,false);
		return false;
	}
	return true;
}

function JSL_ValidateNumber(object,start,finish,message,trim,setfocus,setselect,setclear,convert)
{
	if (trim==null) trim=true;
	if (setfocus==null) setfocus=true;
	if (setselect==null) setselect=true;
	if (setclear==null) setclear=false;
	if (convert==null) convert="";
	if (start==null) start=0;
	if (JSL_ValidateRegExp(object,/^[-+]?[0-9]+$/,message,trim,setfocus,setselect,setclear,convert))
	{
		var i=parseInt(object.value);
		if (i<start) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		if (finish!=null)
			if (i>finish) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		return true;
	}
	return false;
}

function JSL_ValidateDate(object,message,trim,setfocus,setselect,setclear,convert)
{
	if (trim==null) trim=true;
	if (setfocus==null) setfocus=true;
	if (setselect==null) setselect=true;
	if (setclear==null) setclear=false;
	if (convert==null) convert="";
	if (JSL_ValidateRegExp(object,/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})$/,message,trim,setfocus,setselect,setclear,convert))
	{
		dd=parseInt(RegExp.$1);
		mm=parseInt(RegExp.$2);
		yy=parseInt(RegExp.$3);
		if (dd>31 || dd<1) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		if (mm>12 || mm<1) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		if (yy<1000)
		{
			if (yy<30) yy+=2000;
			else yy+=1900;
			object.value=RegExp.$1+'/'+RegExp.$2+'/'+yy;
		}
		if (dd==31 && ( mm==2 || mm==4 || mm==6 || mm==9 || mm==11)) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		if (dd==30 && mm==2) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		if (dd==29 && mm==2 && (yy%4)!=0) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
		return true;
	}
	return false;
}

