var isNS6 = navigator.userAgent.toLowerCase().indexOf("gecko") == -1 ? false : true;


popup_options="toolbar=no,location=no,status=no,scrollbars=yes,menubar=no,resizable=yes,width=600,height=450,top=100,left=300";

function popup(url,name)
{
    var pop = window.open(url,name,popup_options);
    pop.opener = self;
}

function getClientTime()
{
    var da= new Date().toString();
    da.match(/(\S+)\s(\d+)\s(\d+):(\d+):(\d+)\s(\S+)\s(\d+)$/);
    return RegExp.$1+" "+RegExp.$2+", "+RegExp.$7+" GMT "+RegExp.$3+":"+RegExp.$4+":"+RegExp.$5;
}

function isValidDate(value){
    return value.match( /^\d{2}\/\d{2}\/\d{4}$/ );
	//retrun d.test(value);
   //return true;
}


function helpPop(url)
{
    var wid = screen.availWidth;
    var wWid = 550;
    var lef = wid-wWid-8;
    var w = window.open(url,'help','menubar=no,scrollbars=yes,resizable=yes,width='+wWid +',height=600, top=0,left='+ lef);
    w.focus();
}


function save()
{
    	document.forms[0].event.value="Save";
	document.forms[0].submit();
}



function cancelForm()
{
    	document.forms[0].reset();
}



function selRadio(form,p)
{
    var l=form.elements.length,i,nm,v;
    var id = -1;
    for(i=0;i < l; i++)
    {
	    nm=form.elements[i].name;
	    if(nm.indexOf(p)!=-1 )
	    {
		    if(form.elements[i].checked)
		    {
		        return form.elements[i].value;
		    }
		}
	}
	return id;
}


function getTagValuesByName(tagname, name)
{
    var list = document.getElementsByTagName(tagname);
    var result ="";
    var sep="|";

    for(var i = 0; i < list.length;i++)
    {
        if(list[i].name.indexOf(name) > -1 )
        {
            result += list[i].value + sep;
        }
    }

    return result;
}

    function valid(field)
    {
        var ip = /(&|\?|%|<|>|`|~)+/;

        if(field == "" || field==" " || ip.test(field) )
        {
            return false;
        }else
        {
            return true;
        }

    }

    function noWild(field)
    {
        var ip = /(&|\?|%|<|>)+/;

        if( ip.test(field) )
        {
            return false;
        }else
        {
            return true;
        }

    }



	function getElementByFormAndName(formName,elementName)
	{
		var form= eval("document." + formName);
		var l = form.elements.length,i;
		for(i=0;i<l;i++)
		{
			if(form.elements[i].name ==  elementName) return form.elements[i];
		}
	}

	function getElementsByFormAndName(formName,elementName)
	{
		var form= eval("document." + formName);
		var l = form.elements.length,i;
		var A = new Array();
		for(i=0;i<l;i++)
		{
			if(form.elements[i].name ==  elementName) A[A.length]= form.elements[i];
		}
		return A;
	}
	function getElementByFormAndPattern(formName,pattern)
	{
		var form= eval("document." + formName);
		var l = form.elements.length,i;
		for(i=0;i<l;i++)
		{
			if(pattern.test(form.elements[i].name)) return form.elements[i];
		}
    return false;
	}

    function isBlank(field)
    {
        if( field =="")
        {
            return true;
        }

        for(var i = 0; i < field.length;i++)
        {
            if (field.charAt(i) !=' ' )
            {
                return false;
            }

        }

        return true;
    }
    
function isvalidzipcode (field)
{

    	
    	var validzip = "0123456789-";
    	var hyphencount = 0;
    	
    	if (field.value.length!=5 && field.value.length!=10 ) {
		    	alert ("please enter your 5 digit or 5 digit+4 zip code.");
		    	return false;
	    	}
	    	
	for (var i=0; i < field.value.length; i++) {
	temp = "" + field.value.substring(i, i+1);
	if (temp == "-") hyphencount++;
	if (validzip.indexOf(temp) == "-1") {
	alert("Invalid characters in your zip code.  Please try again.");
	return false;
	}
	
	if ((hyphencount > 1) || ((field.value.length==10) && ""+field.value.charAt(5)!="-")) {
	alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
	return false;
	   }
	}
	  	
    	return true;    	
}

function checkemail (field) {

//var emailFilter=/^.+@.+\..{2,3}$/;
var emailFilter=/^.@..{2,3}$/;
if (!(emailFilter.test(field.value))) { 
       alert ("Please enter a valid email address.\n");
       return false;
	}
var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
if (field.value.match(illegalChars)) {
   alert ("The email address contains illegal characters.\n");
   return false;
	}
return true; 
}

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- .";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function checkphone (field)
{
	
	if (checkInternationalPhone(field.value)==false){
		alert("Please Enter a Valid Phone Number");
		field.focus();
		return false;
	}

return true; 	
	
}
function iscardNumber(field)
{
if(isNaN(field.value))  {
	alert("The card number contains invalid characters.  Please try again"); 
	return false;
	}
return true; 	
}

    
function isDigital(field)
{
if(field=="." || field=="")
{
  return false;
}
var d = /^\d*\.?\d*$/;
return d.test(field);
}
function isInteger(field)
{
var d = /^\d+$/;
return d.test(field);
}

function isValidIP(field)
{
  var ipArray = field.match(ipPattern);
  if ( ipArray == null ) 
     return false;
  // ipArray[0] is the same as the field value
  for ( i = 1 ; i <= 4 ; i++ ) {
     if ( ipArray[i] > 255 ) 
        return false; 
  }
  return true;
}

function isValidNetmask(field)
{
  var ipArray = field.match(ipPattern);
  if ( ipArray == null ) {
     //alert("could not match pattern"); 
     return false;
  }
  for ( i = 1 ; i <= 4 ; i++ ) {
     if ( ipArray[i] > 255 ) 
        return false; 
  }
  var IP1 = ipArray[1];
  var IP2 = ipArray[2];
  var IP3 = ipArray[3];
  var IP4 = ipArray[4]; 
  var IPX =5;
  // Determine where IP changes
  if (IP1 < 255) {
    if((IP2 > 0) || (IP3 > 0) || (IP4 > 0)) { return false; }
    IPX = IP1;
  } else {
      if (IP2 < 255) {
        if((IP3 > 0) || (IP4 > 0)) { return false; }
        IPX = IP2;
      } else {
        if (IP3 < 255) {
          if ((IP4 > 0)) { return false; }
	  IPX = IP3;
        } else { IPX = IP4; }
      }
  }
  //alert ( IP1 + " " + IP2 + " " + IP3 + " " + IP4 );
  // Determine if IPX is good
  switch (IPX) {
      case "255":
      case "128":
      case "192":
      case "224":
      case "240":
      case "248":
      case "252":
      case "254":
      case "0":
        return true;
      default:
        return false;
  } 
  return true;
}

function isValidPrefix2(field)
{
   // alert(field);
   if(field=="") return true;
  var ip = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/;

  if( field!="" && !ip.test(field) )
  {

    return false;
  }else
  {
    var A=field.split("/");
    var n = parseInt(A[1]);
    if(n<0 || n>32) return false;
    var B=A[0].split(".");
    var m=0;
    for(var i=0;i<4;i++)
    {

      if(B[i].charAt(0)=='0')
      {
	if(B[i] != "0") return false;
      }else
      {
	m=parseInt(B[i]);
	if(m<1 || m>255) return false;
      }
    }
  }
  return true;
}

function apply(cmd)
{
  var locTime = (new Date()).getTime();
  var url1 = "apply.do?command=" +cmd+"&tm=" + locTime;
  var nm = "Apply" + cmd;
      var pop1 = window.open(url1,nm,"menubar=no,scrollbars=yes,resizable=yes,width=430,height=500, top=0,left=20");
    pop1.opener = self;
}

function dnsPopup(prefix)
{
  var url1 = "dns.jsp?prefix=" +prefix;
  var nm = "DNS";
      var pop1 = window.open(url1,nm,"menubar=no,scrollbars=yes,resizable=yes,width=430,height=500, top=0,left=20");
    pop1.opener = self;
}
function trimm(str)
{
  if(str == "") return "";
  var c;
  var end = str.length-1;;
  for(var i=str.length-1;i>=0;i--)
  {
    c=str.charAt(i);
    if(c!=' ') break;
	--end;
  }
  return str.substring(0,end+1);;
}

var check_notEmpty = 1;
var check_integer = 2;
var check_date = 4;
var check_noWhiteSpaces = 8;
var check_float = 16;
var check_prefix = 32;
var check_netmask = 64;
var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
//Modify by david 2005/12/07
function checkSelect(fname, field, type, label)
{
    var el = getElementByFormAndName(fname,field);
    if((type & check_notEmpty)>0 && trimm(el.value) == "")
    {
      alert("Select " + label);
      el.focus();

      return false;
    }
    return true;
}
//Modify by david 2005/12/07
function checkField(fname, field, type, label)
{
    var el = getElementByFormAndName(fname,field);
    if((type & check_notEmpty)>0 && trimm(el.value) == "")
    {
      alert("Enter " + label);
      el.focus();

      return false;
    }

	if( (type & check_date)>0 && el.value != "" && !isValidDate(el.value)){
	    alert(label + " is not of correct format");
	    return false;
   }

    if((type & check_integer) > 0 && el.value!="" && !isInteger(trimm(el.value)))
    {
      alert(label + " is not valid");
      el.focus();
      el.select();
      return false;
    }else
    {
      el.value=trimm(el.value);
    }

    if((type & check_noWhiteSpaces) > 0 && (el.value == "" || el.value.indexOf(' ')!=-1 || el.value.indexOf('\t')!=-1))
    {
      alert(label + " should not contain white spaces");
      el.focus();
      el.select();
      return false;
    }

    if((type &  check_float) > 0 && !isDigital(el.value))
    {
      alert(label + " is not valid");
      el.focus();
      el.select();
      return false;
    }else
    {
      el.value=trimm(el.value);
    }
    if (field == "landmark.zip"){
      if (el.value.length == 0){
          return true;
      }
      if (el.value.length != 5){
         alert("The zip code must be 5 digits");
         return false;
      }
    }
    return true;
}

function checkRange(fname, field, a,b, label)
{
    var el = getElementByFormAndName(fname,field);
    var n;
    if(el.value.length > 1 && el.value.charAt(0)=='0')
    {
    	var x = el.value.substring(1,el.value.length);
    	n = parseInt(x);
    	
    	/*
      alert(label + " is not valid");
      el.focus();
      el.select();
      return false;
      */
    }else{
    	n = parseInt(el.value);
    }
    if(n<a || n>b)
    {
      alert(label + " is not in valid range");
      el.focus();
      el.select();
      return false;
    }
    return true;
}
function checkRangeFloat(fname, field, a,b, label)
{
    var el = getElementByFormAndName(fname,field);
    var n = parseFloat(el.value);
    if(n<a || n>b)
    {
      alert(label + " is not in valid range");
      el.focus();
      el.select();
      return false;
    }
    return true;
}

var onloadFlag = false;
var onloadFlag2 = false;
function onloadCall()
{
  if(onloadFlag)
  {
    onloadImpl();
  }
  if(onloadFlag2)
  {
    onloadImpl2();
  }
}
function trimmm(f)
{
	var s0=f.value;
	alert(s0);
	var start=0,end=s0.length-1;
var i=0;
	for(i=s0.length-1;i>=0;i--)
{
	if(s0.charAt(i) != ' ') break;
	end--;
}
	f.value=s0.substring(start,end+1);
}

var ms=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var ds = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday", "Saturday");
var msF=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
function suff(n)
{
	if(n > 3 && n < 21) return "th";
	 var n2 = n % 10;
	 if(n2 == 1) return "st";
	 if(n2 == 2) return "nd";
	 if(n2 == 3) return "rd";
	 return "th";
}

function build()
{
}

function getUpdate(t, formname)
{
	if(t == 0) return "";
	var s="";
	var i=0;
	var dt = new Date();
	var defaultValue=0;
	if(t == 1)
	{
		s+="<select name=\"period\" onchange=\"update2(1,parseInt(this.options[this.selectedIndex].value),this.form.name);\">";
		s+="<option value=\"1\">Last hour</option>";
		s+="<option value=\"2\">Last 2 hours</option>";
		s+="<option value=\"3\">Last 3 hours</option>";
		s+="<option value=\"6\">Last 6 hours</option>";
		s+="<option value=\"12\">Last 12 hours</option>";
		s+="<option value=\"24\">Last 24 hours</option>";
		s+="</select>";
		
		defaultValue = 1;
	}else if(t == 2)
	{
		s+="<select name=\"period\" onchange=\"update2(2,parseInt(this.options[this.selectedIndex].value),this.form.name);\">";
		s+="<option value=\"1\">Today</option>";
		var tms = dt.getTime();
		//dt
		for(i=2;i<16;i++)
		{
			tms-=3600000*24;
			var dt2 = new Date(tms);
			s+="<option value=\"" + i + "\">" +ms[dt2.getMonth()] +" "+ (dt2.getDate() )+ suff(dt2.getDate() ) + "</option>";
		}
		s+="</select>";
		defaultValue=1;

	}else if(t == 3)
	{
		s+="<select name=\"period\" onchange=\"update2(3,parseInt(this.options[this.selectedIndex].value),this.form.name);\">";
		s+="<option value=\"1\">This week</option>";
		var d = dt.getDay();
		var hr = dt.getHours();
		var tms = dt.getTime() - (24*d + hr)*3600000;
		var tms2=tms;
		//dt
		for(i=2;i<6;i++)
		{
			tms-=3600000*24*7;
			var dtFrom = new Date(tms);
			var dtTo = new Date(tms2 - 24*3600000);
			s+="<option value=\"" + i + "\">" +(dtFrom.getMonth()+1) +"/"+ dtFrom.getDate() + " - " + (dtTo.getMonth()+1) +"/"+ dtTo.getDate() + "</option>";
			tms2 = tms;
		}
		s+="</select>";
		defaultValue =1;

	}else if(t == 4)
	{
		s+="From:&nbsp;<input name=\"calField_c1\" type=text  size=\"18\" value=\"\" readonly onclick=\"javascript:c1.refreshCal(this.value);c1.showCal();\"><span id=\"calDispl_c1\" style=\"position:absolute;z-index:3;background-color:#FFFFFF;\"></span>";
		s+="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To:&nbsp;";
		s+="<input name=\"calField_c2\" type=text  size=\"18\" value=\"\" readonly onclick=\"javascript:c2.refreshCal(this.value);c2.showCal();\"><span id=\"calDispl_c2\" style=\"position:absolute;z-index:3;background-color:#FFFFFF;\"></span>";
	}else if(t == 5)
	{
		s+="<select name=\"period\" onchange=\"update2(5,parseInt(this.options[this.selectedIndex].value),this.form.name);\">";
		s+="<option value=\"1\">This month</option>";
		var d = dt.getDate();
		var hr = dt.getHours();

		var tms = dt.getTime() - (24*(d-1) + hr)*3600000 ;
		var dt2= new Date(tms);
		var month = dt2.getMonth();
		var year = dt2.getYear();
		var month2 = 0;
		var year2 = 0;
		var tms2=tms;
		//dt
		for(i=2;i<13;i++)
		{
			//tms-=3600000*24*20;
			if(month - i + 1 < 0)
			{
			  month2 = 12 + month - i + 1;
			  year2 = year -1;
			}
			else
			{
			  month2 = month - i + 1;
			  year2 = year;
			}
			var dtFrom = new Date(tms);
			//var dtTo = new Date(tms2 - 24*20*3600000);
			s+="<option value=\"" + i + "\">" +ms[month2] +" "+ year2 + "</option>";
			tms2 = tms;
		}
		s+="</select>";
		defaultValue =1;

	}
	// after the first drop-down changed, change the second according to the default.
	update2(t, defaultValue, formname);
	return s;

}
function update(t, formname)
{
	document.getElementById("idd").innerHTML = getUpdate(t,formname);
	if(t==4)
	{
	  document.getElementById('calDispl_c1').style.border="thin solid #666666";
	  document.getElementById('calDispl_c2').style.border="thin solid #666666";
	  c1.attach();
	  c2.attach();
	}
}
function update2(t,t2,form)
{
	if(t == 0) return;
	var dt = new Date();
	var secs = Math.floor((dt.getTime())/1000);
	var startT = getElementByFormAndName(form,"startSec");
	var endT = getElementByFormAndName(form,"endSec");
	if(t == 1)
	{
		var del = secs % 3600;
		startT.value=secs - (t2-1)*3600 - del;
		endT.value=secs;
	}else if(t == 2)
	{
		var del = 3600*dt.getHours()+60*dt.getMinutes()+dt.getSeconds();
		startT.value=secs - (t2-1)*(3600*24) - del;
		endT.value=(t2 == 1 ? secs : (secs - (t2-2)*(3600*24) - del -1));;
	}else if(t == 3)
	{
		var del =3600*24*dt.getDay() +3600*dt.getHours()+60*dt.getMinutes()+dt.getSeconds();
		startT.value=secs - (t2-1)*(3600*24*7) - del;
		endT.value=(t2 == 1 ? secs : (secs - (t2-2)*3600*24*7 - del -1));
	}else if(t == 5)
	{
		var del =3600*24*(dt.getDate()-1) +3600*dt.getHours()+60*dt.getMinutes()+dt.getSeconds();
		if(t2==1)
		{
		  startT.value=secs  - del;
		  endT.value=secs;
		}else
		{
		  var month = dt.getMonth();
		  var year = dt.getYear();
		  var month2 = 0;
		  var year2 = 0;
		  var month3 = 0;
		  var year3 = 0;
		  if(month - t2 + 1< 0)
		  {
		    month2 = 12 + month - t2 + 1;
		    year2 = year -1;
		  }
		  else
		  {
		    month2 = month - t2 + 1;
		    year2 = year;
		  }

		  if(month - t2 + 2< 0)
		  {
		    month3 = 12 + month - t2 +2;
		    year3 = year -1;
		  }
		  else
		  {
		    month3 = month - t2 + 2;
		    year3 = year;
		  }

		  startT.value=Math.floor((( new Date(year2,month2,1,0,0,0,0)).getTime())/1000);
		  endT.value=Math.floor((( new Date(year3,month3,1,0,0,0,0)).getTime())/1000);
		}
	}
	
	//alert("update2 startT:"+startT.value);


}

function selectPeriods(perType,per,form)
{
  var perTypeV = getElementByFormAndName(form,"periodType");

  var t = selByValue(perTypeV,perType);
  update(parseInt(perTypeV.options[perTypeV.selectedIndex].value),form);
  if(parseInt(perTypeV.options[perTypeV.selectedIndex].value)!=4)
  {
    var perV = getElementByFormAndName(form,"period");
    var t2 = selByValue(perV,per);
    update2(t,t2,form);
  }
}

function selByValue(sel,value)
{
    var l = sel.options.length,i;
    for(i=0;i<l;i++)
    {
      if(sel.options[i].value == value)
      {
	sel.selectedIndex = i;
	return i;
      }
    }
}

function tgl(el)
{
  el.style.display = (el.style.display == "none" ? "inline" : "none");
}

function tgl2(el,flag)
{
  el.style.display = (flag ? "inline" : "none");
}

function Reorder(pos,type,up)
{
  this.pos=pos;
  this.up=up;
  this.type=type;
}


function changeOrder(index)
{
  var r = rs[index];
  reorderR(r.pos,r.type,r.up);
  showOrder(index);
  rs[index].up = !r.up;
}

function showOrder(index)
{
    for(var i=0;i<rs.length;i++)
    {
	if(document.getElementById("arr_"+i))
	{
	    document.getElementById("arr_"+i).innerHTML="";
	}
    }
    if(document.getElementById("arr_"+index))
    {
	document.getElementById("arr_"+index).innerHTML="<img border=\"0\" src=\"../images/subSort"+(rs[index].up ? "Up" : "Down")+".gif\">";
    }
}
 function reorderR(pos,tp,up)
 {

  var R = new Array();
  var pp = pos.split(".");

  var posN=new Array();
  var i;
  for(i=0;i<pp.length;i++) posN[posN.length]=parseInt(pp[i]);

  var startR = document.getElementById("startR");
  var endR = document.getElementById("endR");
  var par = startR.parentNode;
  var children = par.childNodes;
  var ch;

  var curr=startR;
  var st = false;
  while(true)
  {
    ch=curr.nextSibling;
		if(st)
		{
			par.removeChild(curr);
		}
    if(ch.nodeName == "TR")
    {
		if(ch.id == "endR") break;
		R[R.length]=ch;
    }

		st=true;
		curr=ch;
  }


  var i,j,v,n=R.length;
  for(i=1;i<n;i++)
  {
    v=R[i];
    j=i;
    while(less(v,R[j-1],posN,tp))
    {
      R[j]=R[j-1];
      j=j-1;
      if(j<=0) break;
    }
    R[j]=v;
  }

  if(up)
  {
    for(i=0;i<n;i++) par.insertBefore(R[i],endR);
  }else
  {
    for(i=n-1;i>=0;i--) par.insertBefore(R[i],endR);
  }

 }



 ////////////////

 function less(r1,r2,pn,tp)
 {
 var r=false;
  var x1=r1,x2=r2;
  var d1,d2;
  for(var i=0;i<pn.length;i++)
  {
	//alert(x1.childNodes.length + " children");
    d1=x1.childNodes[pn[i]];
    d2=x2.childNodes[pn[i]];
    x1=d1;
    x2=d2;
  //  alert("*** "+ x1.nodeType+ "," + x2.nodeType);
/*
    if(x1.nodeType == 3)
    {
  //  alert("text");

    }else
    {
	//	alert(x1.nodeName+ "," + x2.nodeName);
	}
*/
  }

  if ( tp=="prefix" ) { 
     if ( x1 == null ) 
        return true;
     if ( x2 == null ) 
        return false;
     var pref1 = x1.value.split("/");
     var netw1=parseInt(pref1[0]);
     var mask1=parseInt(pref1[1]);
     var pref2 = x2.value.split("/");
     var netw2=parseInt(pref2[0]);
     var mask2=parseInt(pref2[1]);
     if ( netw1 < 0 ) {
        netw1 += 4294967296;
     }
     if ( netw2 < 0 ) {
        netw2 += 4294967296;
     }
     //alert(pref+","+netw+","+mask);
     if ( netw1 < netw2 ) 
        return true;
     else
        return false;
     //return ( v1 < v2 ? true: false);
  } 

  var v1=(x1== null ? "" : x1.data),v2=(x2 == null ? "" : x2.data) ;
  //alert(v1+ "," + v2 )

  if(tp=="String")
  {
	r =(v1 < v2 ? true : false);
  }
  if ( v1 == "NA" ) 
     return true;
  if ( v2 == "NA" ) 
     return false;
  if(tp=="int")
  {
    var n1= (v1 == "" ? 0 : parseInt(v1));
    var n2= (v2 == "" ? 0 : parseInt(v2));
    r = (n1<n2 ? true : false);
  }
  if(tp=="float")
  {
    var n1= (v1 == "" ? 0 : parseFloat(v1));
    var n2= (v2 == "" ? 0 : parseFloat(v2));
    r = (n1<n2 ? true : false);
  }
  //alert(r);
  return r;
 }

function showLoadingImage() {
   document.getElementById('waitcontent').style.visibility='visible';
   document.getElementById('reportcontent').style.visibility='hidden';
}
<!-- Original:  Simon Tneoh (tneohcb@pc.jaring.my) -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
  
  var Cards = new makeArray(5);
  Cards[0] = new CardType("VI", "4", "13,16");
  var VI = Cards[0]
  Cards[1] = new CardType("MA", "51,52,53,54,55", "16");
  var MA = Cards[1];
  Cards[2] = new CardType("DI", "6011", "16");
  var DI = Cards[2];
  Cards[3] = new CardType("AX", "34,37", "15");
  var AX = Cards[3];
  var LuhnCheckSum = Cards[4] = new CardType();


function CheckCardNumber(fname) {
  var tmpyear;
	 
  var cNo = getElementByFormAndName(fname,"card.number");
  	alert(cNo.value.length);
   if (cNo.value.length == 0) {
   return true;
  }

//Check if the entry is a existing card.
  var ccFirst = cNo.value.substring(0,(cNo.value.length - 4));
  var ccLast = cNo.value.substring((cNo.value.length - 4),cNo.value.length);

  if(isStarCheck(ccFirst) &&  isNum(ccLast)){
    return true;
  }

 var cExpYear = getElementByFormAndName(fname,"card.expYear");

  if (cExpYear.value.length == 0) {
    alert("Please enter the Expiration Year.");
    cExpYear.focus();
    return false;
  }
 
  var cExpMonth = getElementByFormAndName(fname,"card.expMonth");
  tmpmonth = cExpMonth.value;

  if (!(new CardType()).isExpiryDate(cExpYear.value, tmpmonth)) {
   alert("This card has already expired.");
   return false;
  }
  
var cHName = getElementByFormAndName(fname,"card.holderName");
  if (cHName.value.length == 0) {
    alert("Please enter the Credit Card Holder Name.");
    cHName.focus();
    return false;
  }

  var cCard = getElementByFormAndName(fname,"card.type");
  var card = cCard.options[cCard.selectedIndex].value;
  var retval = eval(card + ".checkCardNumber(\"" + cNo.value +  "\", " + cExpYear.value + ", " + tmpmonth + ");");
  var cardname = "";
  
  if (retval) {
   return true;
  }
  else {
  for (var n = 0; n < Cards.size; n++) {
   if (Cards[n].checkCardNumber(cNo.value, cExpYear.value, tmpmonth)) {
    cardname = Cards[n].getCardType();
    break;
   }
 }

  if (!cardname.length > 0) {
    alert("This card number is not valid.");
    return false;
    }
  }
  return true;
 }

function CardType() {
var n;
var argv = CardType.arguments;
var argc = CardType.arguments.length;

this.objname = "object CardType";

var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

this.setCardNumber = setCardNumber;  
this.setCardType = setCardType;  
this.setLen = setLen; 
this.setRules = setRules; 
this.setExpiryDate = setExpiryDate; 

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);

this.checkCardNumber = checkCardNumber; 
this.getExpiryDate = getExpiryDate;
this.getCardType = getCardType; 
this.isCardNumber = isCardNumber;
this.isExpiryDate = isExpiryDate; 
this.luhnCheck = luhnCheck;
return this;
}


function checkCardNumber() {
var argv = checkCardNumber.arguments;
var argc = checkCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
var year = (argc > 1) ? argv[1] : this.year;
var month = (argc > 2) ? argv[2] : this.month;

this.setCardNumber(cardnumber);
this.setExpiryDate(year, month);

if (!this.isCardNumber())
return false;
if (!this.isExpiryDate())
return false;

return true;
}

function getCardType() {
return this.cardtype;
}


function getExpiryDate() {
return this.month + "/" + this.year;
}

function isCardNumber() {
var argv = isCardNumber.arguments;
var argc = isCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
if (!this.luhnCheck())
return false;

for (var n = 0; n < this.len.size; n++)
if (cardnumber.toString().length == this.len[n]) {
for (var m = 0; m < this.rules.size; m++) {
var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
if (headdigit == this.rules[m])
return true;
}
return false;
}
return false;
}


function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;

year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;

if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}


function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;

return true;
}

function luhnCheck() {
var argv = luhnCheck.arguments;
var argc = luhnCheck.arguments.length;

var CardNumber = argc > 0 ? argv[0] : this.cardnumber;

if (! isNum(CardNumber)) {
return false;
  }

var no_digit = CardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;

for (var count = 0; count < no_digit; count++) {
var digit = parseInt(CardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return true;
else
return false;
}

function makeArray(size) {
this.size = size;
return this;
}


function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}


function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}


function setLen(len) {
if (len.length == 0 || len == null)
len = "13,14,15,16,19";

var tmplen = len;
n = 1;
while (tmplen.indexOf(",") != -1) {
tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
n++;
}
this.len = new makeArray(n);
n = 0;
while (len.indexOf(",") != -1) {
var tmpstr = len.substring(0, len.indexOf(","));
this.len[n] = tmpstr;
len = len.substring(len.indexOf(",") + 1, len.length);
n++;
}
this.len[n] = len;
return this;
}

function setRules(rules) {
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";
  
var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}

function isStarCheck(argvalue){
  argvalue = argvalue.toString();

   for (var n = 0; n < argvalue.length; n++)
     if (argvalue  ==  "************" || argvalue ==  "***********")
       return true;

    return false;
}


function disallowChars(fname,fld,chars,label)
{ // provide a string of unacceptable chars for a field
  var fld = getElementByFormAndName(fname,fld);
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) != -1)
    { alert('The '+label+' field may not contain "'+fld.value.charAt(i)+'" characters.'); return false; }
  }
  return true;
}

function isValidEmail(field) {

if (!(field.indexOf(".") > 2) && (field.indexOf("@") > 0)) { 
    alert ("Please enter a valid email address.\n");
    return false;
}

  return true;
 
}

function allowChars(fname,fld,chars,label)
{ // provide a string of acceptable chars for a field
  var fld = getElementByFormAndName(fname,fld);
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) == -1)
    { alert('The '+label+' field may not contain "'+fld.value.charAt(i)+'" characters.'); return false; }
  }
  return true;
}

function checkEmail(fld)
{ // simple email check
  if(!fld.value.length) return true; // blank fields are the domain of requireValue 
  var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
  if(!emailfmt.test(fld.value))
  { alert('The Email field must contain a valid email address.'); return false; }
  return true;
}
