function autoTab(input,len, e) 
{
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
var keyCode = (isNN) ? e.which : e.keyCode; 
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
if(input.value.length >= len && !containsElement(filter,keyCode)) {
input.value = input.value.slice(0, len);
input.form[(getIndex(input)+1) % input.form.length].focus();
}
function containsElement(arr, ele) {
var found = false, index = 0;
while(!found && index < arr.length)
if(arr[index] == ele)
found = true;
else
index++;
return found;
}
function getIndex(input) {
var index = -1, i = 0, found = false;
while (i < input.form.length && index == -1)
if (input.form[i] == input)index = i;
else i++;
return index;
}
return true;
}


function isValidDateIntervel(dateStr1, dateStr2) {
// Checks for the following valid date formats:
// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
// First separate date into month, day, and year variables and validate it

	var datePattern = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

// To require a 4 digit year entry, use this line instead:
// var datePattern = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArrayFrom = dateStr1.match(datePattern); // Check whether the format ok? / not
	var matchArrayTo = dateStr2.match(datePattern); // Check whether the format ok? / not

	if (matchArrayFrom == null || matchArrayTo == null) 
	{
		return false;
	}
	monthFrom = matchArrayFrom[1]; // parse date into variables
	dayFrom = matchArrayFrom[3];
	yearFrom = matchArrayFrom[4];

	monthTo = matchArrayTo[1]; // parse date into variables
	dayTo = matchArrayTo[3];
	yearTo = matchArrayTo[4];

	if ((yearFrom.length == 2) && (yearFrom <= 50))
	{
		yearFrom = '20' + yearFrom
	}
	if ((yearFrom.length == 2) && (yearFrom > 50))
	{
		yearFrom = '19' + yearFrom
	}
	if ((yearTo.length == 2) && (yearTo <= 50))
	{
		yearTo = '20' + yearTo
	}
	if ((yearTo.length == 2) && (yearTo > 50))
	{
		yearTo = '19' + yearTo
	}

	if (dayFrom.length == 1)
		dayFrom = '0' + dayFrom;
	if (dayTo.length == 1)
		dayTo = '0' + dayTo;
	if (monthFrom.length == 1)
		monthFrom = '0' + monthFrom;
	if (monthTo.length == 1)
		monthTo = '0' + monthTo;

	if (yearTo < yearFrom)
		return false;
	if (yearTo > yearFrom)
		return true;

	if ((dayTo < dayFrom)) // && (yearFrom == yearTo))
	{
		if ((monthFrom == monthTo) && (yearFrom == yearTo))
		{
			return false;
		}
	}
	if ((dayTo == dayFrom) && (monthTo < monthFrom) && (yearFrom == yearTo))
	{
		return false;
	}
	if ((dayTo == dayFrom) && (monthTo < monthFrom))
	{
		return false;
	}
	if ((monthTo < monthFrom) && (yearFrom <= yearTo))
	{
		return false;
	}
/*	if ((dayTo > dayFrom) && (monthTo >= monthFrom) && (yearTo < yearFrom))
	{
		return false;
	}*/
	return true;   //date intervel is valid
}
/*  Date From To Validation Complete */


function isValidDate(dateStr) {
// Checks for the following valid date formats:
// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
// First separate date into month, day, and year variables and validate it

	var datePattern = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

// To require a 4 digit year entry, use this line instead:
// var datePattern = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePattern); // Check whether the format ok? / not

	if (matchArray == null) 
	{
//		alert("Date is not in a valid format.")
		return false;
	}
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) // check month range
	{
//		alert("Month must be between 1 and 12.");
		return false;
	}
	if (day < 1 || day > 31) 
	{
//		alert("Day must be between 1 and 31.");
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
//		alert("Month "+month+" doesn't have 31 days!")
		return false;
	}
	if (month == 2) // check for february 29th
	{
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
//			alert("February " + year + " doesn't have " + day + " days!");
			return false;
		}
	}
	return true;   //date is valid
}

function isInteger( vbl )
{
	var ctr;
	vbl += "";
	// Cycle through each character, seeing if it is a non-digit
	for( ctr = 0; ctr < vbl.length; ++ctr )
	{
		// Is the character at index ctr a digit?
		if( "1234567890".indexOf( vbl.substring( ctr, ctr + 1 ) ) == -1 )
		{
			// Have found a non-integer character
			return false;
		}
	}
	return true;
}

function isNumber( vbl )
{
	var ctr;
	vbl += "";
	// Cycle through each character, seeing if it is a non-digit
	for( ctr = 0; ctr < vbl.length; ++ctr )
	{
		// Is the character at index ctr a digit?
		if( "1234567890.".indexOf( vbl.substring( ctr, ctr + 1 ) ) == -1 )
		{
			// Have found a non-integer character
			return false;
		}
	}
	return true;
}

function IsValidEmail (emailStr) {

var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

if (user.match(userPat)==null) {
    return false
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
		return false
	    }
    }
    return true
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
    return false
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length

if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   return false
}

if (len<2) {
   return false
}

return true;
}

function OpenWindow( sLink )
{
  window.open(sLink, "", "directories=0, location=0,menubar=1,status=0,toolbar=0,hotkeys=0, resizable=1, scrollbars=1, titlebar=0, height=400, width=650, left=125, top=100")
}

function OpenWindowFS( sLink )
{
  var vMaxHeight, vMaxWidth, sScreenProperties;
  vMaxHeight = screen.availHeight-30;
  vMaxWidth = screen.availWidth-10;

  sScreenProperties = 'hotkeys=0,resizable=1,directories=0,titlebar=0,location=0,menubar=1,status=0,toolbar=0,scrollbars=1,left=0, top=0,width=' + vMaxWidth + ',height=' + vMaxHeight
  window.open(sLink, "", sScreenProperties)
//  window.open (sReportURL, 'ReportWindow', sScreenProperties);
}


function Len(str)
        /***
                IN: str - the string whose length we are interested in

                RETVAL: The number of characters in the string
        ***/
        {  return String(str).length;  }


function Mid(str, start, len)
        /***
                IN: str - the string we are LEFTing
                    start - our string's starting position (0 based!!)
                    len - how many characters from start we want to get

                RETVAL: The substring from start to start+len
        ***/
        {
                // Make sure start and len are within proper bounds
                if (start < 0 || len < 0) return "";

                var iEnd, iLen = String(str).length;
                if (start + len > iLen)
                        iEnd = iLen;
                else
                        iEnd = start + len;

                return String(str).substring(start,iEnd);
        }


// Keep in mind that strings in JavaScript are zero-based, so if you ask
// for Mid("Hello",1,1), you will get "e", not "H".  To get "H", you would
// simply type in Mid("Hello",0,1)

// You can alter the above function so that the string is one-based.  Just
// check to make sure start is not <= 0, alter the iEnd = start + len to
// iEnd = (start - 1) + len, and in your final return statement, just
// return ...substring(start-1,iEnd)

function InStr(strSearch, charSearchFor)
/*
InStr(strSearch, charSearchFor) : Returns the first location a substring (SearchForStr)
                           was found in the string str.  (If the character is not
                           found, -1 is returned.)
                           
Requires use of:
	Mid function
	Len function
*/
{
	for (i=0; i < Len(strSearch); i++)
	{
	    if (charSearchFor == Mid(strSearch, i, 1))
	    {
			return i;
	    }
	}
	return -1;
}

function MoveAvailEntDbObjectsStringRight(u,v){var bSelected = false;if (u.length ==0){alert ('There are no objects in left List Box');return false;}if (u.selectedIndex < 0){alert('Please choose an object from left List Box');return false;}for (var i=0; i < u.length; i++){if ( u(i).selected == true ){o1=document.createElement ("option");o1.text = u(i).text;o1.value = u(i).value;v.add(o1);}}for (var i = u.length -1; i>=0 ; i--)if ( u(i).selected == true )u.remove(i);}function MoveAvailEntDbObjectsStringleft(u,v){var bSelected = false;if (v.length ==0){alert ('There are no objects in right List Box');return false;}if (v.selectedIndex < 0){alert('Please choose an object from right List Box');return false;}for (var i=0; i < v.length; i++)if ( v(i).selected == true ){o1=document.createElement ("option");o1.text = v(i).text;o1.value = v(i).value;u.add(o1);}for (var i = v.length -1; i>=0 ; i--)if ( v(i).selected == true )v.remove(i);}

function getCookieVal (offset) {  
var endstr = document.cookie.indexOf (";", offset);  
if (endstr == -1)    
endstr = document.cookie.length;  
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {  
var arg = name + "=";  
var alen = arg.length;  
var clen = document.cookie.length;  
var i = 0;  
while (i < clen) {    
var j = i + alen;    
if (document.cookie.substring(i, j) == arg)      
return getCookieVal (j);    
i = document.cookie.indexOf(" ", i) + 1;    
if (i == 0) break;   
}  
return null;
}
function SetCookie (name, value) {  
var argv = SetCookie.arguments;  
var argc = SetCookie.arguments.length;  
var expires = (argc > 2) ? argv[2] : null;  
var path = (argc > 3) ? argv[3] : null;  
var domain = (argc > 4) ? argv[4] : null;  
var secure = (argc > 5) ? argv[5] : false;  
document.cookie = name + "=" + escape (value) + 
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
((path == null) ? "" : ("; path=" + path)) +  
((domain == null) ? "" : ("; domain=" + domain)) +    
((secure == true) ? "; secure" : "");
}
function DeleteCookie (name) {  
var exp = new Date();  
exp.setTime (exp.getTime() - 1);  
var cval = GetCookie (name);  
document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

function IsValidVINNumber(sVINNumber)
{
	var ctr;
	var nCheckSum;
	var nCheckDigit;
	var nCheckChar;
  var lsVINNumber = sVINNumber.toUpperCase();

	for( ctr = 0; ctr < lsVINNumber.length; ++ctr )
	{
		if( "IOQ".indexOf( lsVINNumber.substring( ctr, ctr + 1 ) ) != -1 )
		{
			return 'IOQ';
		}
	}
  nCheckSum = 0;
	for( ctr = 0; ctr < 17; ++ctr )
	{
	  if (ctr != 8)
	    {
        nCheckSum = nCheckSum + (GetNumericalValue(lsVINNumber.substring( ctr, ctr + 1 )) * GetWeightFactor(ctr + 1));
      }
	}

  nCheckDigit = nCheckSum % 11;

  if (nCheckDigit <= 9)
    {
      nCheckChar = nCheckDigit.toString();
    }
  else
    {
      nCheckChar = 'X';
    }

  if (lsVINNumber.substring( 8, 9) != nCheckChar )
    {
      return 'CHECKSUM';
    }
  else
    {
      return '';
    }
}

function GetNumericalValue(sString)
{
  if (isInteger(sString))
    {
      return sString;
    }
  else
  {
    switch(sString)
    {
    case 'A':
      return 1;
      break;    
    case 'B':
      return 2;
      break;    
    case 'C':
      return 3;
      break;    
    case 'D':
      return 4;
      break;    
    case 'E':
      return 5;
      break;    
    case 'F':
      return 6;
      break;    
    case 'G':
      return 7;
      break;    
    case 'H':
      return 8;
      break;    
    case 'J':
      return 1;
      break;    
    case 'K':
      return 2;
      break;    
    case 'L':
      return 3;
      break;    
    case 'M':
      return 4;
      break;    
    case 'N':
      return 5;
      break;    
    case 'P':
      return 7;
      break;    
    case 'R':
      return 9;
      break;    
    case 'S':
      return 2;
      break;    
    case 'T':
      return 3;
      break;    
    case 'U':
      return 4;
      break;    
    case 'V':
      return 5;
      break;    
    case 'W':
      return 6;
      break;    
    case 'X':
      return 7;
      break;    
    case 'Y':
      return 8;
      break;    
    case 'Z':
      return 9;
      break;
    } 
  }
}

function GetWeightFactor(sPosition)
{
  switch(sPosition)
    {
      case 1:
        return 8;
        break;
      case 2:
        return 7;
        break;
      case 3:
        return 6;
        break;
      case 4:
        return 5;
        break;
      case 5:
        return 4;
        break;
      case 6:
        return 3;
        break;
      case 7:
        return 2;
        break;
      case 8:
        return 10;
        break;
      case 10:
        return 9;
        break;
      case 11:
        return 8;
        break;
      case 12:
        return 7;
        break;
      case 13:
        return 6;
        break;
      case 14:
        return 5;
        break;
      case 15:
        return 4;
        break;
      case 16:
        return 3;
        break;
      case 17:
        return 2;
        break;
    }
}
