/*
JSL_Validate. Copyright Inform Link Limited.
Redistribution prohibited without copyright owner consent.
Version 1.1
Boris Toupikov
25/06/2003
Added JSL_ValidateDate
*/

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="";
  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;
  }
  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_ValidateSelect(object,message)
{
  if (object==null) return JSL_DebugMessage("JSL Debug:\nValidate function called with null object");
  if (message==null) message="";

  
  if (object.value == "")
  {
	JSL_InvalidAction(object,message,false,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,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_ValidateMobile(object,message,trim,setfocus,setselect,setclear,convert)
{
  return JSL_ValidateRegExp(object,/0[0-9]{8,10}/,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_MakeDate(format,d,m,y)
{
  var t=format;
  t=t.replace(/dd/,d);
  t=t.replace(/mm/,m);
  t=t.replace(/yyyy/,y);
  t=t.replace(/yy/,y);
  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;
  if (message==null) message="";
  if (trim==null) trim=true;
  if (setfocus==null) setfocus=true;
  if (setselect==null) setselect=true;
  if (setclear==null) setclear=false;
  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,2}");
  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,2}");
  exprsearch=new RegExp("^"+strtestformat+"$");
  exprsearch.exec(object.value);
  d=parseInt(RegExp.$1,10);
  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,2}");
  exprsearch=new RegExp("^"+strtestformat+"$");
  exprsearch.exec(object.value);
  m=parseInt(RegExp.$1,10);
  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,2})");
  exprsearch=new RegExp("^"+strtestformat+"$");
  exprsearch.exec(object.value);
  y=parseInt(RegExp.$1,10);
  if (y<30) y=y+2000;
  else if (y<100) y=y+1900;

  if (d<0 || d>31 || m<1 || m>12) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
  if (m==2 && d>29) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
  if ((m==4 || m==6 || m==9 || m==11) && d>30) { JSL_InvalidAction(object,message,setfocus,setselect,setclear); return false; }
  if (m==2 && d==29 && (y%4)!=0 ) { 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_MakeDate(format,d,m,y);
  return true;
}

