﻿// JScript File
function ValidateElement(sType, Element, errormsg, formName)
{
	var vMessage='';
    if(errormsg)
    {	
	    switch(sType) 
	    {
		    case 'text': if (isEmpty(Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'readonly': if (isEmpty(Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'email': if (!isEmail(Element.value)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'numeric': if (isNaN(Element.value)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'numericrange': if (isNaN(Element.value)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'select': if (isEmpty(Element)) vMessage = vMessage + errormsg + '\n';break;
		    case 'option': if (isSelected(formName, Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'multioption': if (isSelected(formName, Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'checkbox': if (isSelected(formName, Element)) vMessage = vMessage + errormsg + '\n'; break;
		    // Paul Ashley ->
		    case 'checkboxgroup' : if (isCheckGroupSelected(formName, Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'singlecheckbox' : if (isSingleCheckBoxSelected(formName, Element)) vMessage = vMessage + errormsg + '\n'; break;
		    // <- Paul Ashley.
		    case 'textarea': if (isEmpty(Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'textareacontact': if (isEmpty(Element)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'textareacontactlimited': if (tooLong(Element, 1024)) vMessage = vMessage + errormsg + '\n'; break;
		    case 'textarealimited': if (tooLong(Element, 1024)) vMessage = vMessage + errormsg + '\n'; break;
	    }
	}
	return vMessage;
}

function isEmpty(Element)
{
	if (Element.value.length==0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function tooLong(Element, strLen)
{
	if (Element.value.length > strLen)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function txtLimit(id, maxLength)
{
	txtObj = document.getElementById(id);
	txtStr = txtObj.value;
	txtLen = txtStr.length;
	if (txtLen > maxLength)
	{
		txtObj.value = txtStr.slice(0,maxLength);
		alert ("Maximum " + maxLength + " characters allowed");
	}
}

function ResetForm(formName) 
{
	//document.frmFields.reset();
	document.forms[formName].reset();
}

function CreateDropDownDate(formName) 
{
    if (document.forms[formName].selDateDay) 
    {	
        for (var i=1; i<32; i++)  
	    {
		    document.forms[formName].selDateDay.options[i] = new Option(i,i); 
	    }
	    document.forms[formName].selDateDay.options[0].selected = true 
    }

    if (document.forms[formName].selDateYear) 
    {
	    var newDate      = new Date() ; 
	    var thisYear     = parseInt(newDate.getYear()) ; 
	    var endYear	 = thisYear ; 
	    var firstYear    = thisYear-80 ; 
	    var midYear      = thisYear-40 ; 
	    for (var i=1; i<endYear-firstYear; i++) 
	    {
		    document.forms[formName].selDateYear.options[i] = new Option(firstYear+i,firstYear+i); 
	    }
	    document.forms[formName].selDateYear.options[0].selected = true 
    }

    if (document.forms[formName].DateDay) 
    {
	    for (var i=1; i<32; i++)  
	    {
            if (i<10)
            {
        	    iStr = "0" + String(i);
            }
            else
            {
        	    iStr = String(i);
            }
		    document.forms[formName].DateDay.options[i] = new Option(iStr,iStr); 
	    }
	    document.forms[formName].DateDay.options[0].selected = true 
    }

    if (document.forms[formName].DateYear) 
    {
	    var newDate      = new Date() ; 
	    var thisYear     = parseInt(newDate.getYear()) ; 
	    var endYear		 = thisYear+1 ; 
	    var firstYear    = thisYear-20 ; 
	    var midYear      = thisYear-10 ; 
	    for (var i=1; i<endYear-firstYear; i++) 
	    {
		    document.forms[formName].DateYear.options[i] = new Option(firstYear+i,firstYear+i); 
	    }
	    document.forms[formName].DateYear.options[0].selected = true 
    }
}

function isSelected(formName, Element)
{
	var bChecked=false;
	var iChecked = 0;
	var numberselect = 0;
	if (document.forms[formName].numberselect) 
	{
		numberselect = (document.forms[formName].numberselect.value);
	}
	else
	{
		numberselect = 4;
	}
	for (var i=0;i < Element.length;i++) {
		if (Element[i].checked) 
		{
			bChecked=true;
			iChecked+=1
		}
	}		
	if (bChecked==false || iChecked > numberselect)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isSingleCheckBoxSelected(formName, elementName)
{
	var Element = document.getElementById(elementName);

	if (Element != null)
	{
	    // I have no idea why we return "false" if the element is checked!
		return !Element.checked;
	}		

    return true;
}

function isCheckGroupSelected(formName, groupElement)
{
    // Added by Paul Ashley.
    // This is almost the same as the above isSelected function, with the main difference
    // being that, in asp.net2, you cannot give a checkbox both an id AND a name. This means
    // that you cannot simply use the name as a group name and check all those elements belonging
    // to that group. [Bummer!].
	var bChecked=false;
	var iChecked = 0;
	var numberselect = 0;

	if (document.forms[formName].numberselect) 
	{
		numberselect = (document.forms[formName].numberselect.value);
	}
	else
	{
		numberselect = 4;
	}

	// This is the main change from isSelected(...). 
	// *** N.B.*** I have basically allowed for 20 elements in the checkbox group, so this could
	// be a good place to look if things aren't being counted properly.
	var iMaxElements = 20;
	
	for (var i=1; i <= iMaxElements; i++) 
	{
	    var sElementName = groupElement + i;

		var Element = document.getElementById(sElementName);

		if (Element != null)
		{
		    if (Element.checked) 
		    {
			    bChecked=true;
			    iChecked+=1
		    }
		}
	}		

	if (bChecked==false || iChecked > numberselect)
	{
		return true;
	}
	else
	{
		return false;
	}

}

function isEmail (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>16) return false;
	if (len<2) return false;
	return true;
}

function getKeyCode(e)
{
	if (window.event)
		return window.event.keyCode;
	else if (e)
		return e.which;
	else
		return null;
}
		
function keyRestrict(e, validchars) 
{
	var key='', keychar='';
	key = getKeyCode(e);
	if (key == null) return true;
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();
	validchars = validchars.toLowerCase();
	if (validchars.indexOf(keychar) != -1)
		return true;
	if ( key==null || key==0 || key==8 || key==9 || key==13 || key==27 )
		return true;
	return false;
}

