/************************************************************************************************************
(C) www.dhtmlgoodies.com, February 2006

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/	
	
	
// Patterns
var formValidationMasks = new Array();
var VPasswordmaster
var VPasswordslave 
var domainString='(com|org|net|mil|edu|info|mobi|travel|a[cdfgilmnoqrstuwxz]|b[abdefghijmnorstwyz]|c[acdfghiklmnoruvxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[adefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnrwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghiklmnrtvyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[etu]|z[amw])';


formValidationMasks['email'] = new RegExp("^[A-Z0-9._%-]+@[A-Z0-9.-]+\\."+domainString+"$","gi");///\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;	// Email
formValidationMasks['numeric'] = /^[0-9]+$/gi;	// Numeric
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric
formValidationMasks['letter'] =/^[A-Zæøå]+$/gi;	// letter
formValidationMasks['domain'] =new RegExp("^(https?\:\/\/)?[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\\."+domainString+"$","gi"); //domain



/* These two event functions are from http://ejohn.org/apps/jselect/event.html */

function addEvent( obj, type, fn ) { 
  if ( obj.attachEvent ) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  } else 
    obj.addEventListener( type, fn, false ); 
} 
function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else 
    obj.removeEventListener( type, fn, false ); 
} 




function isFormValid(n)
{
	
	x=GetMyParent("TABLE",n) //x=n.parentNode.parentNode.parentNode.parentNode;
	var inputFields = x.getElementsByTagName('INPUT');
	var IsValid=true
	var Result
	var zz	
		for (zz=0;zz<inputFields.length;zz++)
		 { 
				Result=validateInput(inputFields[zz])
				if (Result==false) {
					IsValid=false
				}
		}
		
		inputFields = x.getElementsByTagName('SELECT');
		for (zz=0;zz<inputFields.length;zz++)
		 { 
				Result=validateInput(inputFields[zz])
				if (Result==false) {
					IsValid=false
				}
		}
		
	
	
	return 	IsValid
}

function validateInput(inputObj)
{
	var inputValidates = true;
	var mask = inputObj.getAttribute("mask")
	var required = false;
	var EObj=null;
	
	if (mask){
		if (mask.substring(0,1)=="*")
		   { 
			 required = true;
			 mask=mask.substring(1,mask.length)
			 
		   }
	}
	
	if( required && inputObj.tagName=='INPUT' && inputObj.value.length==0)inputValidates = false;
	if(required && inputObj.tagName=='SELECT' && inputObj.selectedIndex<1){				
		inputValidates = false;
		EObj = document.createElement("span");
		EObj.setAttribute("class", "ErrorDes");
		EObj.innerHTML="&nbsp;please select one option."
	}
	
	
	// Check for mutiple Select Box 
	if (inputObj.tagName=='SELECT' ) {
		if (mask){
			if (mask!="") {
				var f=mask.split("`")
				 switch(f[0].toLowerCase())
		
					{
							case "timebox":
								inputValidates=IsTime(f[1]);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;please select one option."
								}
								break		
							case "datebox":
								inputValidates=IsDate(f[1]);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;please select one option."
								}
								else {
									inputValidates=checkDate(f[1])
									if (inputValidates==false) {
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;please choose a valid date."
									}
									
								}
								break		
					
					}
			}
		}
	}
	
	
	// if checkbox is require then
	if (inputObj && required){
		if(inputObj.getAttribute("type")) {
			if(inputObj.getAttribute("type").toLowerCase()=='checkbox') {
				if(inputObj.checked==false){
						inputValidates = false;
					}
					
				// if the checkbox is in list , then get all checkbox 
				if (mask=="chklist") {
					x=GetMyParent("TD",inputObj) //x=n.parentNode.parentNode.parentNode.parentNode;
					y1=x.getElementsByTagName("input"); 
						inputValidates = false;
						for (i=0;i<y1.length;i++)
						 { 
							 if(y1[i].getAttribute("type").toLowerCase()=='checkbox') {
								  if (y1[i].checked)
									{
										inputValidates = true;
										break;
									}
							 }
						}
				}
				if (inputValidates==false){
					EObj = document.createElement("span");
					EObj.setAttribute("class", "ErrorDes");
					EObj.innerHTML="&nbsp;Please check at least one."
				}
				
			}
		}
	}
	
	
	if (mask) {
	if (mask!="") {
		if (!required && inputObj.value.length==0 ) { 
		
		}
		else {
		var f=mask.split("`")
		 switch(f[0].toLowerCase())

            {
					case "int":
					
							inputValidates=IsNumberInRange(inputObj,f[1],f[2]);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required number between " +  f[1] + "~" + f[2]
								}
							break
					case "m":
							   inputValidates=RegExTest(inputObj,f[1]);
								break
		
					case "email":
								inputValidates=IsEmail(inputObj,f[1]);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required email address" 
								}
								else {
								
									inputValidates=IsTextLength(inputObj,0,45);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 45 characters"
									}
								}
								break
								
					case "s":
								inputValidates=IsTextLength(inputObj,f[1],f[2]);
								
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required length between " + f[1] + "~" + f[2] + " characters" 
								}
								break		
			
					case "hostip":
								inputValidates=IsDomain(inputObj);
								if (inputValidates==false) {
									inputValidates=verifyIP(inputObj);
								}
								
								
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required host or IP."
								}
								else {
								
									inputValidates=IsTextLength(inputObj,0,255);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 255 characters"
									}
								}
								
								break	
									
					case "host":
								inputValidates=IsDomain(inputObj);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required host name."
								}
								
								else {
								
									inputValidates=IsTextLength(inputObj,0,255);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 255 characters"
									}
								}
								
								break	
					case "price":
								// Update Price Tag
								UpdatePriceTag(inputObj);
								break		
					
					case "url":
								inputValidates=IsURL(inputObj);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required URL."
								}
								else {
								
									inputValidates=IsTextLength(inputObj,0,255);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 255 characters"
									}
								}
								
								break			
								
					case "urlssl":
								inputValidates=IsURLSSL(inputObj);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required URL."
								}
								else {
								
									inputValidates=IsTextLength(inputObj,0,255);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 255 characters"
									}
								}
								
								break			
					case "sms":
								inputValidates=IsSMS(inputObj);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required Mobile phone number ."
								}
								
								else {
								
									inputValidates=IsTextLength(inputObj,0,50);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 50 characters"
									}
								}
								break		
					
					
					
					case "ip":
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp;Required IP address."
								}
								break		
								
					case "match":
								inputValidates=Ismatch(inputObj);
								if (inputValidates==false){
									EObj = document.createElement("span");
									EObj.setAttribute("class", "ErrorDes");
									EObj.innerHTML="&nbsp; Password does not match."
									inputValidates=false;
								}
								else {
								
									inputValidates=IsTextLength(inputObj,0,50);
									if (inputValidates==false){
										EObj = document.createElement("span");
										EObj.setAttribute("class", "ErrorDes");
										EObj.innerHTML="&nbsp;Required length between 0 ~ 50 characters"
									}
								}
								
								inputObj=VPasswordslave;
								break		
					case "transactiondes":
					
								SwapBtn(inputObj)
								break	
								
								
								
            }
		}
	}
	
	}
	
	
	// show the warning icon
 	x=GetMyParent("TABLE",inputObj) //x=n.parentNode.parentNode.parentNode.parentNode;
   	y1=x.getElementsByTagName("td"); 
		var WarningTD
		var mm
		var rowpos = inputObj.getAttribute("N")
		if (inputObj.getAttribute("name")=="Password1") {rowpos=rowpos-1}
		for (mm=0;mm<y1.length;mm++)
		 { //alert(y1[j].tagName + " - " + y1[j].getAttribute("L")) 
		  if (y1[mm].getAttribute("VD")==rowpos)
			{
				WarningTD=y1[mm];
				break;
			}
		}
	// remove description
	var ObjTD =y1[mm+1];
	y1=ObjTD.getElementsByTagName("span"); 
	for (mm=0;mm<y1.length;mm++)
	{
		if (y1[mm].getAttribute("class")=="ErrorDes") {
			ObjTD.removeChild(y1[mm])
		}
	}
	
	if (EObj){
		ObjTD.appendChild(EObj);
	}
	
	
	
	if(inputValidates){
		if (inputObj.getAttribute("type")!="button") {
			WarningTD.className='';
			//WarningTD.className='Valid';
		}
		return true;
	}else{
		WarningTD.className='Invalid';
		return false;
	}

}


function SwapBtn(n){
	if (n.value==0) {
		x= GetMyParent("TR",GetMyParent("TABLE",n)).nextSibling;
		y=x.getElementsByTagName("INPUT"); 
			for (j=0;j<y.length;j++) {
				z=y[j];
				if (z.value=="Request") {
					z.style.display='none'
					z=GetMyParent("TR",n).nextSibling;
					z.style.display='none'
					z=z.nextSibling;
					z.style.display='none'
					
				}
				if (z.value=="Create & Edit Advanced Options") {
					z.style.display='';
				}
			}
	}
	else {
		x= GetMyParent("TR",GetMyParent("TABLE",n)).nextSibling;
		y=x.getElementsByTagName("INPUT"); 
			for (j=0;j<y.length;j++) {
				z=y[j];
				if (z.value=="Request") {
					z.style.display=''
					z=GetMyParent("TR",n).nextSibling;
					z.style.display=''
					z=z.nextSibling;
					z.style.display=''
					
				}
				if (z.value=="Create & Edit Advanced Options") {
					z.style.display='none';
				}
			}
	}	
}

function IsNumberInRange(element,MinRange,MaxRange){
	if (IsInteger(element)) {
		if (parseInt(element.value) > parseInt(MaxRange)) {
			return false;
		}
		if (parseInt(element.value) < parseInt(MinRange)) {
			return false;
		}
		if (element.value.indexOf('.')>-1) {
			return false;
		}
		if (element.value.indexOf('+')>-1) {
			return false;
		}
		return true;
	}
	else {
		return false;
	}
	
}


function IsTime(ObjName)
{
	x=document.getElementById(ObjName + "hour");
	if (x.selectedIndex<1) {
	return false;
	}
	x=document.getElementById(ObjName + "mins");
	if (x.selectedIndex<1) {
	return false;
	}
	
	return true;
}


function IsDate(ObjName)
{
	x=document.getElementById(ObjName + "day");
	var sday=x.value
	if (x.selectedIndex<1) {
	return false;
	}
	x=document.getElementById(ObjName + "month");
	var smonth=x.value
	if (x.selectedIndex<1) {
	return false;
	}
	x=document.getElementById(ObjName + "year");
	var syear=x.value
	if (x.selectedIndex<1) {
	return false;
	}
	
	x=document.getElementById(ObjName + "hour");
	if (x.selectedIndex<1) {
	return false;
	}
	x=document.getElementById(ObjName + "mins");
	if (x.selectedIndex<1) {
	return false;
	}
	
	return true
}


function checkDate(ObjName) {

	x=document.getElementById(ObjName + "day");
	var SD=x.value
	
	x=document.getElementById(ObjName + "month");
	var SM=x.value
	
	x=document.getElementById(ObjName + "year");
	var SY=x.value
	

  // check months with only 30 days
  if (((SM == 4) || (SM == 6) || (SM == 9) || (SM == 11)) && (SD > 30)) {
    //errorMsg = "Incorrect date entered. ";
    //errorMsg = errorMsg + document.dateForm.month.options[SM].value;
    //errorMsg = errorMsg + " only has 30 days."
    //alert(errorMsg);
    return false;
  }

  // check February on leap years (only 29 days)
  var leapyear = false;
  var i = parseInt(SY);
  
  // check for leapyear - Any year divisible by 4, except those divisible by 100 (but NOT 400)
  if ( (Math.floor(i/4) == (i/4)) && ((Math.floor(i/100) != (i/100)) || (Math.floor(i/400) == (i/400))) )
    leapyear = true;
  else 
    leapyear = false;
  
  if ( leapyear && (SM == 2) && (SD > 29) ){
      //errorMsg = "Incorrect date entered.  February only has 29 days in ";
      //errorMsg = errorMsg + document.dateForm.year.options[SY].value;
      //alert(errorMsg);
      return false;
    }

  // check February for all other years (only 28 days)
  if ( (SM == 2) && (SD > 28) && (leapyear == false) ) {
    //errorMsg = "Incorrect date entered.  February only has 28 days in ";
    //errorMsg = errorMsg + document.dateForm.year.options[SY].value;
    //alert(errorMsg);
    return false;
  }

    
  // to make the date form and this JavaScript function work with a CGI script
  // delete the subsequent alert line, and change the return value from false
  // to return true  
  //alert("This would submit the form.  Please check the Javascript source and comments");
  return true;
}



function IsInteger(element)
{
	var decimalRE = "^(\\+|-)?[0-9][0-9]*(\\.[0-9]*)?$";
	return RegExTest(element,decimalRE);
}


function RegExTest(element,expression)
{
	return element.value.match(expression) != null;
}


function IsEmail(element)
{
	var emailRE ="([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})";
	return RegExTest(element,emailRE);
}


function IsNonNegDecimal(element)
{
	var nonnegdecimalRE = "^[0-9][0-9]*(\\.[0-9]*)?$";
	return RegExTest(element,nonnegdecimalRE);
}



function IsTextLength(element,minlength,maxlength)
{
	if (element.value.length > maxlength) {
		return false;
	}
	if (element.value.length < minlength) {
		return false;
	}
	return true;
}

function IsDomain(element)
{
	//var DomainEX = "^(https?\:\/\/)?[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\\."+domainString+"$","gi";
	return RegExTest(element,formValidationMasks['domain']);
}



function verifyIP (element) {
var IPvalue=element.value;
var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
var ipArray = element.value.match(ipPattern);

	if (IPvalue == "0.0.0.0")
		return false;
	else if (IPvalue == "255.255.255.255")
		return false;
	if (ipArray == null)
		return false;
	else {
		for (i = 0; i < 4; i++) {
			thisSegment = ipArray[i];
			if (thisSegment > 255) {
				return false;
				i = 4;
			}
			if ((i == 0) && (thisSegment > 255)) {
				return false;
				i = 4;
			}
	   }
	}
	return true;
}

function IsURL(element)
{
	element.value= element.value.replace(/\\/g, '/' )
	
	if (element.value.indexOf("http://") ==0) {
		var tempobj =document.createElement("input");
		tempobj.value=element.value.replace("http://","")
		var d= element.value.split('//');
		var t= d[1].split("/")
		tempobj.value=t[0];
		inputValidates=IsDomain(tempobj);
		if (inputValidates==false) {
			inputValidates=verifyIP(tempobj);
		}			
		return inputValidates;
	}
	return false;
}

function IsSMS(element)
{
	if (element.value.indexOf("+") ==0) {
		
		if (element.value.length>7) {
			var tempobj=document.createElement("input");
		    tempobj.value=element.value.replace("+","")

			return IsNonNegDecimal(tempobj)
		}			
		
	}
	return false;
}
function Ismatch (n) {
		x= GetMyParent("TABLE",n)
		y=x.getElementsByTagName("INPUT"); 
		VPasswordmaster=null;
		VPasswordslave =null;
		
			for (j=0;j<y.length;j++) {
				z=y[j];
				 if (z.getAttribute('mask')) {
					 p=z.getAttribute('mask').split("`")
					 if (p[0]=="*match") {
						 if (p[1]=="Password1") {
							 VPasswordmaster=z
						 }
						 else {
							 VPasswordslave=z
						 }
					 }
				 }
				
			}
			
			
	if (VPasswordmaster.value==VPasswordslave.value) {
		return true
	}
	else {
		return false	
	}
	
	}


function UpdatePriceTag(me){
	x=GetMyParent("TBODY",me)	
	y=x.getElementsByTagName("span"); 
	if (me.selectedIndex>0) {
		
		if (CheckpointTypeID==0) {
				var temp= location.href.split('?type=checkpoint.')
				if (temp.length>1) {
					var temp1= temp[1].split('&keys')
					CheckpointTypeID=temp1[0]
				}


		}
		else {
			var temp= CheckpointTypeID.split('.')
			if (temp.length>1) {
				CheckpointTypeID=temp[1]
			}
			else {
				var newrow=GetCreateParentRow(GetMyParent("TABLE",me))
				if (newrow) {
					if (newrow.getAttribute('newt')) {
						temp= newrow.getAttribute('newt').split('.')
						if (temp.length>1) {
							CheckpointTypeID=temp[1]
						}
					}
				
				}
				else {
					var newrow=GetMyParent("TR",GetMyParent("TABLE",me))
						if (newrow) {
							if (newrow.getAttribute('pt')) {
								temp= newrow.getAttribute('pt').split('.')
								if (temp.length>1) {
									CheckpointTypeID=temp[1]
								}
							}
						
						}
				}
				
			}
		}
		
		
		
		
		for (z=0;z<y.length;z++) {
			if (y[z].innerHTML.indexOf("Price")>=0) {
				
				y[z].innerHTML=" Price $" + getPrice(CheckpointTypeID,me)
				//return;
			}
			
		}
	
	}
}

function getPrice(stype,IntervalOption) {
	for (i=0;i<ServiceID.length;i++) {
		if (ServiceID[i]==stype) {
			return CheckPointPrice[i+ IntervalOption.selectedIndex-1];
			
		}
		
	}
	
	
}

function IsURLSSL(element)
{
	if (element.value.indexOf("http://") ==0) {
		var tempobj=document.createElement("input");
		tempobj.value=element.value.replace("http://","")
		var t = tempobj.value.split  ("/")
		tempobj.value=t[0]
	
		inputValidates=IsDomain(tempobj);
		if (inputValidates==false) {
			inputValidates=verifyIP(tempobj);
		}			
		return inputValidates;
	}
	if (element.value.indexOf("https://") >=0) {
		var tempobj=document.createElement("input");
		tempobj.value=element.value.replace("https://","")
		var t = tempobj.value.split  ("/")
		tempobj.value=t[0]
		
		inputValidates=IsDomain(tempobj);
		if (inputValidates==false) {
			inputValidates=verifyIP(tempobj);
		}			
		return inputValidates;
	}
	return false;
}
