var JSL_Debug=false;

function JSL_SQL_Str(txt, q)
{
	var re = /\'/g;
	var t = txt;
	if (t != "")
		t = t.replace(re, "''");

	if (q)
		t = "'" + t + "'";

	return t;
}

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_FirstCap(strIn)
{
	strIn=JSL_Trim(strIn);
	var strOut=strIn.charAt(0).toUpperCase()+strIn.substring(1,strIn.length);
	return strOut;
}

function JSL_ValidateRegExp(object,expression,message,trim,setfocus,setselect,setclear,convert,cond)
{
	var objectValue;
	if (object==null) return JSL_DebugMessage("JSL Debug:\nValidate function called with null object");
	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 (cond==null) cond=true;

	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 (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;
	}


	var res = !(expression.test(objectValue) ^ cond);

	if (res)
		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_ValidateCombo(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^\s*NULL\s*/i,message,trim,setfocus,setselect,setclear,convert, false);	
	//return JSL_ValidateRegExp(object,/^(?!NULL).+$/i,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateRadio(object,message,trim,setfocus,setselect,setclear,convert)
{
	var f=0;

	if (object.length)
	{
		for (var i=0; i<object.length; i++)
		{
			if (object[i].checked==true)
			{
				f=1;
				break;
			}
		}
	}
	
	if (f==0)
	{
		JSL_InvalidAction(object,message,false,false,false); 
		return false; 
	}
	return true;
}

function JSL_ValidateName(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^[a-z A-Z\-\']*$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateEmail(object,message,trim,setfocus,setselect,setclear,convert)
{
	//return JSL_ValidateRegExp(object,/^[0-9a-zA-Z\-_.]+@.+\..+$/,message,trim,setfocus,setselect,setclear,convert);
	var objectValue=object.value;
	if (objectValue.length>50)
	{
		JSL_InvalidAction(object,"Sorry, the maximum length email address we can accept is 50 characters - please contact us to create a new account or use a shorter email address",setfocus,setselect,setclear);
		return false;
	}
	return JSL_ValidateRegExp(object,/^(("[^"\f\n\r\t\v\b]+")|([[A-Za-z0-9_!#\$%&'*\+\-=?~\/\^`\|{}]+(\.[A-Za-z0-9_!#$%&'*+\-=?~\/\^`\|{}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((((([A-Za-z0-9])([A-Za-z0-9\-])*([A-Za-z0-9]))|(([A-Za-z0-9])+))\.)+[A-Za-z\-]+))$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidatePhone(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateRegExp(object,/^[0-9() +-]{10,20}$/,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateNumber(object,start,finish,message,trim,setfocus,setselect,setclear,convert)
{
	if (start==null) start=0;
	if (JSL_ValidateRegExp(object,/^[-+]?[0-9]+$/,message,trim,setfocus,setselect,setclear,convert))
	{
		var i=parseInt(object.value,10);
		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_ValidateInteger(object,start,finish,message,trim,setfocus,setselect,setclear,convert)
{
	if (start==null) start=0;
	if (JSL_ValidateRegExp(object,/^[-+]?[0-9]+(\.[0-9]+)?$/,message,trim,setfocus,setselect,setclear,convert))
	{
		var i=parseInt(object.value,10);
		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_ValidateDay(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateNumber(object,1,31,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateMonth(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateNumber(object,1,12,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateYear(object,start,finish,message,trim,setfocus,setselect,setclear,convert)
{
	if (start==null) start=1800;
	if (finish==null)
	{
		var d=new Date();
		finish=d.getFullYear();
		delete d;
	}
	return JSL_ValidateNumber(object,start,finish,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateHour(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateNumber(object,0,23,message,trim,setfocus,setselect,setclear,convert);
}

function JSL_ValidateMinute(object,message,trim,setfocus,setselect,setclear,convert)
{
	return JSL_ValidateNumber(object,0,59,message,trim,setfocus,setselect,setclear,convert);
}

/*function JSL_ValidateTime(object,format,separators,adjust,message,trim,setfocus,setselect,setclear,convert)
{
	if (format==null) format="hh:mm";
	if (separators=null) separators=":.- ~";
	if (adjust=null) adjust=true;
	var strtestformat;
	var optsep="";
	if (separators.indexOf("~")!=-1) optsep="?";
	strtestformat="^([0-9]{1,2})(["+separators+"]"+optsep+")([0-9]{1,2})$";
	var exprsearch=new RegExp(strtestformat)
	if (!JSL_ValidateRegExp(object,exprsearch,message,trim,setfocus,setselect,setclear,convert)) return false;
	exprsearch.exec(object.vlaue);
	var hr;
	var m;
	if (RegExp.$2=="")
	{
		if (object.value.length)<4) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
	}
	hr=parseInt(RegExp.$1);
	m=parseInt(RegExp.$3);
	if (hr<0 || hr>23 || m<0 || m>59) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
	if (adjust) object.value=JSL_MakeTime(format,RegExp.$1,RegExp.$3);
	return true;
}

function JSL_MakeTime(format,h,m)
{
	var t=format;
	t=t.replace(/hh/,h);
	t=t.replace(/mm/,m);
	return t;
}

function JSL_ValidateDate(object,format,separators,adjust,message,trim,setfocus,setselect,setclear,convert)
{
	if (format==null) format="dd/mm/yyyy";
	if (separators=null) separators="/:.- ~";
	if (adjust=null) adjust=true;
	var strtestformat=format;
	var optsep="";
	if (separators.indexOf("~")!=-1) optsep="?";
	strtestformat=strtestformat.replace(/[^dmy]/g,"["+separators+"]"+optsep+"");
	strtestformat=strtestformat.replace(/dd/,"[0-9]{1,2}");
	strtestformat=strtestformat.replace(/mm/,"[0-9]{1,2}");
	strtestformat=strtestformat.replace(/yyyy/,"[0-9]{1,4}");
	strtestformat=strtestformat.replace(/yy/,"[0-9]{1,4}");
	var exprsearch=new RegExp("^"+strtestformat+"$")
	if (!JSL_ValidateRegExp(object,exprsearch,message,trim,setfocus,setselect,setclear,convert)) return false;
	var d;
	var m;
	var y;
	strtestformat=format;
	strtestformat=strtestformat.replace(/[^dmy]/g,"["+separators+"]"+optsep+"");
	strtestformat=strtestformat.replace(/dd/,"([0-9]{1,2})");
	strtestformat=strtestformat.replace(/mm/,"[0-9]{1,2}");
	strtestformat=strtestformat.replace(/yyyy/,"[0-9]{1,4}");
	strtestformat=strtestformat.replace(/yy/,"[0-9]{1,4}");
	exprsearch=new RegExp("^"+strtestformat+"$");
	exprsearch.exec(object.vlaue);
	d=RegExp.$1;
	strtestformat=format;
	strtestformat=strtestformat.replace(/[^dmy]/g,"["+separators+"]"+optsep+"");
	strtestformat=strtestformat.replace(/dd/,"[0-9]{1,2}");
	strtestformat=strtestformat.replace(/mm/,"([0-9]{1,2})");
	strtestformat=strtestformat.replace(/yyyy/,"[0-9]{1,4}");
	strtestformat=strtestformat.replace(/yy/,"[0-9]{1,4}");
	exprsearch=new RegExp("^"+strtestformat+"$");
	exprsearch.exec(object.vlaue);
	m=RegExp.$1;
	if (RegExp.$2=="")
	{
		if (object.value.length)<4) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
	}
	hr=parseInt(RegExp.$1);
	m=parseInt(RegExp.$3);
	if (hr<0 || hr>23 || m<0 || m>59) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
	if (adjust) object.value=JSL_MakeTime(format,RegExp.$1,RegExp.$3);
	return true;
}

*/


function JSL_ValidateDate(object,cancelEvent,message,trim,setfocus,setselect,setclear,convert)
{
	if (!object)
		return true;
  var ds = object.value;
  // bail if the date parameter is empty
  if (ds == "")
	 return true;

  if (cancelEvent==null)
	  cancelEvent = true;


	if (setfocus==null) setfocus=true;
	if (setselect==null) setselect=true;
	if (setclear==null) setclear=false;
	if (convert==null) convert="";


  // declare local variables
  var err = 0;  // error flag
  var p1 = 0;
  var dd = 0;
  var ddi,mmi,yyi;
  var mm = 0;
  var yy=0;

  // strip leading and trailing spaces
  while (ds.charAt(0) == " ") {
		ds = ds.substring(1,ds.length);
		object.value = ds;
  }
  while (ds.charAt(ds.length-1) == " ") {
		ds = ds.substring(0,ds.length-1);
		object.value = ds;
  }

  // handle common data-entry shortcuts
  p1=ds.indexOf("/");
  if (p1<0)
  {
	dd=ds.substring(0,2);
	mm=ds.substring(2,4);
	yy=ds.substring(4,6);
  }
  else
  {
  dd=ds.substring(0,p1);
  mm=ds.substring(p1+1,ds.length);
  p1=mm.indexOf("/");
  yy=mm.substring(p1+1,mm.length);
  mm=mm.substring(0,p1);
  }
  ddi=parseInt(dd,10);
  mmi=parseInt(mm,10);
  yyi=parseInt(yy,10);
  if (isNaN(ddi) || ddi<1 || ddi>31) err=1;
  if (isNaN(mmi) || mmi<1 || mmi>12 ) err=1;
  if (isNaN(yyi) || yyi<0 || yyi>3000) err=1;
  if (yyi<30) yyi+=2000;
  if (yyi<100) yyi+=1900;
  
  
  // verify the date components
	 if (mmi == 4 || mmi == 6 || mmi == 9 || mmi == 11) {
		if (ddi == 31) err=1;
	 }
	 // check February and leap years
	 if (mmi == 2) {
		if (ddi > 29) err=1;
		if (ddi == 29 && ( (yyi % 4) != 0) ) err=1;
	 }

  // finally, test whether the input string can be Date.parsed
  dd=(ddi<10)?("0"+ddi):ddi;
  mm=(mmi<10)?("0"+mmi):mmi;
  yy=yyi;

  if (err==1 || dd==0 || mm==0) 
  {
	JSL_InvalidAction(object,message,setfocus,setselect,setclear);

	 if (cancelEvent)
	  {
		 window.event.returnValue=false;
	  }
	 
	 return false;
  }

  ds=dd+"/"+mm+"/"+yy;
  object.value=ds;
  return true;
}


function formatNumber(nm)
{
	var nmStr = "";
	var sg = "";
	var a = "";
	var dv = "";
	var rm = "";
	var rm3 = 0;
	var dvNum = 0;
	var rmStr = "";
	var rmNum = 0;
	var res = "";
	var n = 0;
	var i = 0;

	if (nm == null) return "";
	nmStr = nm.toString();

	sg = "";
	if (nm < 0) sg = "-";


	a = nmStr.indexOf(".");

	dv = "0";
	rm = "00";


	if (a == -1)
	{
		dv = nmStr;
		rm = "00";
	}
	else
	{
		dv = nmStr.substr(0, a);
		dvNum = parseInt(dv);

		dvNum = Math.abs(dvNum);


		rmStr = nmStr.substr(a+1, 3) + "000";

		rm = rmStr.substr(0, 2);
		rmNum = parseInt(rm);

		rm3 = parseInt(rmStr.substr(2, 1));
		if (rm3 >= 5) rmNum ++;

		if (rmNum >= 100)
		{
			dvNum ++;
			rm = "00";
		}
		else
		{
			rm = rmNum.toString();
			if (rm.length < 2) rm = "0" + rm;
		}

		dv = sg + dvNum.toString();

	}

	res = "";
	n = dv.length;
	for (i=0; i<n; i++)
	{
		res = res + dv.substr(i, 1);
		if (((n-i-1) % 3)==0 && i != (n-1)) res = res + ",";
	}
	return res + "." + rm;
}

function getChecked(collection_obj)
{

var obj = false;

for (var i = 0; i < collection_obj.length; i++)
{
	var a=collection_obj[i].checked;
if (collection_obj[i].checked == true)
	{
	obj=collection_obj[i];
	break;
	}	
}
return obj
}

/*
Changes made
01/03/05	3.1
IL-0123/0007 - changing email address validation, it should now be as close to rfc 3696 as reasonable.
02/03/05	3.2
bug fixed - \w used in email validation seems to be not supported by IE5.x for mac.
10/03/05	3.3
IL-0124/0006 - email length check added
29/09/05	3.4
Alexaner Lokhman - function formatNumber added
20/04/2006	3.5
Tatiana Motova - function JSL_ValidateRadio added
*/