//****************************************************************************************
//**  NAME     : Form Validate                                                          **
//**  PURPOSE  : This JavaScript library provides functions to validate HTML Forms.     **
//**             It can also validate keystrokes on live.                               **
//**  AUTHOR   : Sk Moin.                                                               **
//**  EMAIL    : skmoin@digital-nirvana.com                                             **
//**  DATE     : Oct 10th 2006                                                          **
//**  VERSION  : 1.0                                                                    **
//**                                                                                    **
//****************************************************************************************


function keyValidate(e,obj)
{
	var chars=obj.getAttribute('filter');
	if(chars)
	{
		var charstr='';
		if(chars.split('|')[0].toLowerCase()=='alpha')
			charstr="abcdefghijklmnopqrstuvwxyz";
		else if(chars.split('|')[0].toLowerCase()=='numeric')
			charstr="0123456789";
		else if(chars.split('|')[0].toLowerCase()=='alphanumeric')
			charstr="abcdefghijklmnopqrstuvwxyz0123456789";
		else
			return true;

		if(obj.getAttribute('extrachars')) charstr += obj.getAttribute('extrachars');

		var key;
		var keychar;

		if (!e) var e = window.event;
		key=e.keyCode? e.keyCode : e.which;

		keychar = String.fromCharCode(key);

		if ((key==null) || (key==0) || (key==8) ||
			(key==9) || (key==27))
		   return true;


		if ( !(charstr.indexOf(keychar.toLowerCase()) > -1) )
		{
			if(chars.split('|').length>1)
				alert(chars.split('|')[1]);

			return false;
		}

	}
	return true
}

function validError(obj,msg)
{
    alert(msg);
    obj.focus();
    if (obj.select)
        obj.select();
}

function jsTrim(txt)
{
	return txt.replace(/^\s*|\s*$/g,"");
}


function sameText(txt1, txt2)
{
	if(jsTrim(txt1).toLowerCase()==jsTrim(txt2).toLowerCase())
		return true;
	else
		return false;
}

function formValidate(form)
{
    var inputs=form.getElementsByTagName('input');
    for(var i=0;i<inputs.length;i++)
    {
        var obj=inputs[i];
        var type=obj.getAttribute('type');
		//Text box validation start here
        if(sameText(type,"text")){
            var optional=obj.getAttribute('optional');
            if(optional && sameText(optional.split('|')[0],'no') && jsTrim(obj.value)=='')
            {
                validError(obj,optional.split('|')[1]?optional.split('|')[1]:'This field is not optional');
                return false;
            }
            var chars=obj.getAttribute('filter');
            if(chars)
            {
                var charstr='';
				var emailREG=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
				var tsREG=/^[0-2][0-3]:[0-5][0-9]:[0-5][0-9]$/;
				var mmddyyREG=/^[0-1][0-9]-[0-3][0-9]-[0-1][0-9]$/;
				var filter=chars.split('|')[0];
                if(sameText(filter,'alpha'))
                    charstr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
                else if(sameText(filter,'lower'))
                    charstr="abcdefghijklmnopqrstuvwxyz";
				else if(sameText(filter,'upper'))
                    charstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                else if(sameText(filter,'numeric'))
                    charstr="0123456789";
                else if(sameText(filter,'alphanumeric'))
                    charstr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                else if(sameText(filter,'lowernumeric'))
                    charstr="abcdefghijklmnopqrstuvwxyz0123456789";
                else if(sameText(filter,'uppernumeric'))
                    charstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
				else if(sameText(filter,'email') || sameText(filter,'timestamp') || sameText(filter,'mmddyy'))
					{}
                else
                    continue;

				var str=obj.value;
				if(sameText(chars.split('|')[0],'email'))
				{
					if (!(emailREG.test(str)))
					{
						validError(obj,chars.split('|')[1]?chars.split('|')[1]:'Invalid Email Address');
						return false;
					}
				}
				else if(sameText(chars.split('|')[0],'timestamp'))
				{
					if (!(tsREG.test(str)))
					{
						validError(obj,chars.split('|')[1]?chars.split('|')[1]:'Invalid Time Stamp [HH:MM:SS]');
						return false;
					}
				}
				else if(sameText(chars.split('|')[0],'mmddyy'))
				{
					if (!(mmddyyREG.test(str)))
					{
						validError(obj,chars.split('|')[1]?chars.split('|')[1]:'Invalid Date Format [MM-DD-YY]');
						return false;
					}
				}
				else
				{
					if(obj.getAttribute('extrachars')) charstr += jsTrim(obj.getAttribute('extrachars'));

					for(var j=0; j<str.length; j++){
						if ( !(charstr.indexOf(str.charAt(j)) > -1) )
						{
							validError(obj,chars.split('|')[1]?chars.split('|')[1].replace('XCHAR',str.charAt(j)):'Invalid Character : ' + str.charAt(j));
							return false;
						}
					}
				}
            }
        }
		//Text box validation ends here

		//Radio button validation starts here
        if(sameText(type,"radio")){
            var radname=obj.getAttribute('name');
			var radgroup=form[radname];
			var radio_choice = false;
			for (var counter = 0; counter < radgroup.length; counter++)
				if (radgroup[counter].checked)
					radio_choice = true; 

			var optional=obj.getAttribute('optional');
            if(optional && sameText(optional.split('|')[0],'no') && !radio_choice)
            {
                validError(obj,optional.split('|')[1]?optional.split('|')[1]:'Please select atleast one option');
                return false;
            }
		}
		//Radio button validation ends here
    }

	//Select box validation starts here
    var selects=form.getElementsByTagName('select');
    for(var i=0;i<selects.length;i++)
    {
        var obj=selects[i];
        var optional=obj.getAttribute('optional');

        if(optional && sameText(optional.split('|')[0],'no') && obj.options[obj.selectedIndex].value=='')
        {
            validError(obj,optional.split('|')[1]?optional.split('|')[1]:'Please select a value');
            return false;
        }
    }
	//Select box validation ends here

    return true;
}
