// Generic function to validate forms
// requires 'validate' attribute in input element, with function and upto 2 parameters.
// (c) Tangent Labs Ltd.  2006


Array.prototype.inArray = function (value)
{
    var i;
    for (i=0; i < this.length; i++) {
        // Matches identical (===), not just similar (==).
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};



var numeric      = '0123456789';
var space        = ' ';
var lowercase    = 'abcdefghijklmnopqrstuvwxyz';
var uppercase    = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var alphanumeric = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _-';
var safe         = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_";

function charactersCheck(strString,val) {
    
    var strValidChars = window[val];
    var strChar;
    var blnResult = true;
    var charId;
    
    if (strString.length == 0) return false;

    // test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++)
    {
        strChar = strString.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            blnResult = false;
        }
    }
    return blnResult;
}



function validate(formObj)
{
    var booErrorFound = false;
    
    for (var i = 0; i<formObj.elements.length; i++)
    {
    	var ele=formObj.elements[i];
    	if(ele.getAttribute("validate"))
    	{
    
    	    var arrValidation = validationType = ele.getAttribute("validate").split(",");
    		validationMethod = arrValidation[0];
    		validationParam1 = arrValidation[1];
    		validationParam2 = arrValidation[2];						
    		//alert(ele.getAttribute("name"));
    		switch (validationMethod)
    		{
				
                case "date":
                    arrDateValue = ele.value.split('-');
                    if(arrDateValue[0]=='YYYY' || arrDateValue[0]=='0000' || arrDateValue[0]==''
                       || arrDateValue[1]=='MM' || arrDateValue[1]=='00' || arrDateValue[1]==''
                       || arrDateValue[2]=='DD' || arrDateValue[2]=='00' || arrDateValue[2]=='') 
                    { 
                        booErrorFound = true; 
                        if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='block' 
                        }
                    } else if (document.getElementById('err'+ele.getAttribute("name"))) {
					    document.getElementById('err'+ele.getAttribute("name")).style.display='none'
					}
                    break;
                case "email":
                    if (!isValidEmail(ele.value,validationParam1))
                    {
                        ele.className="textboxerror";
                        booErrorFound = true;
                        if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='block' 
                        }
                    } else if (document.getElementById('err'+ele.getAttribute("name"))) {
					    document.getElementById('err'+ele.getAttribute("name")).style.display='none'
					}
                    break;
                case "equals":
					//alert("Come to equal");
                    if (validationParam1 == "element")
                    {
                        var ele2 = formObj[validationParam2];
                        if (ele.value != ele2.value)
                        {
							//alert("Not equal");
                            ele.className="textboxerror";
                            booErrorFound = true;
							if (document.getElementById('err'+ele.getAttribute("name"))) { 
                         	   document.getElementById('err'+ele.getAttribute("name")).style.display='block' 
                        	}
                        } else {
							if (document.getElementById('err'+ele.getAttribute("name"))) { 
								document.getElementById('err'+ele.getAttribute("name")).style.display='none' 
							}
						}
                    }
                    else if (validationParam1 == "value")
                    {
                        if (ele.value != validationParam2)
                        {
                            ele.className="textboxerror";
                            booErrorFound = true;
                        }
                    }
                    break;
				case "fileextension":
					if(ele.value!="") {
					    var arrFileName=ele.value.split(".").reverse();
					    if (!(validationParam1.split("|").inArray(arrFileName[0])))
						{
							ele.className="textboxerror";
							if (document.getElementById('err'+ele.getAttribute("name"))) {document.getElementById('err'+ele.getAttribute("name")).style.display='block'}
							booErrorFound = true;
						}
						else {
						    ele.className="";
							if (document.getElementById('err'+ele.getAttribute("name"))) {document.getElementById('err'+ele.getAttribute("name")).style.display='none'}
						}
					}
					break;
                case "length":
                    if (ele.value.length<validationParam1 || ele.value.length>validationParam2)
                    {
                        ele.className="textboxerror";
                        booErrorFound = true;
                    }
                    break;
                case "mobile":
					//alert("Validate Mobile");
					if (!isValidMobile(ele.value)) 
					{
                        ele.className="textboxerror";
                        booErrorFound = true;
                        if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='block' 
                        }
                    } else if (document.getElementById('err'+ele.getAttribute("name"))) {
					    document.getElementById('err'+ele.getAttribute("name")).style.display='none'
					}	
					break;
				case "populated":
				    if (ele.value.length<1 || ele.value==' ' || ele.value=='  ' || ele.value=='   ')
					{
						ele.className="textboxerror";
						if (document.getElementById('err'+ele.getAttribute("name"))) {document.getElementById('err'+ele.getAttribute("name")).style.display='block'}
						booErrorFound = true;
					}
					else {
					    if (typeof validationParam1 != "undefined") {
					        if (charactersCheck(ele.value,validationParam1)) {
					        }
					        else {
					            booErrorFound = true;
					        }
					    }
					    ele.className="";
					    if (document.getElementById('err'+ele.getAttribute("name"))) {document.getElementById('err'+ele.getAttribute("name")).style.display='none'}
					}
					break; 
                case "radio":
                    var radioSelected = -1;
                    var radioGroup    = ele.name;
                    var radioButtons  = formObj.elements[radioGroup];
                    for (j=0;j<radioButtons.length; j++) {
                        if (radioButtons[j].checked) {
                            radioSelected = j;
                        }
                    }
                    if (radioSelected == -1) {
                        ele.className="textboxerror";
                        booErrorFound = true;
                        if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='block' 
                        }
                    } else if (document.getElementById('err'+ele.getAttribute("name"))) {
					    document.getElementById('err'+ele.getAttribute("name")).style.display='none'
					}
                    break; 
                case "words":
                	
                	var TextArea = ele.value.replace('/\s/g',' ');
					var arrWords = TextArea.split(' ');
					if((arrWords.length-1) < validationParam1 || (arrWords.length-1) > validationParam2) {
					    
					    booErrorFound = true;
                        if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='block';
                        }
					}
					else {
					    if (document.getElementById('err'+ele.getAttribute("name"))) { 
                            document.getElementById('err'+ele.getAttribute("name")).style.display='none';
                        }
					}
                    break; 
    		}
        }
    }
    
    if (booErrorFound == true)
    {
        alert("You have not filled in all required fields correctly.");
        return false;
    }
    else {
        return true;
    }
}

function isValidMobile(mob) {
	if((!IsNumeric(mob)) || mob.length != "11" || mob.substring(0,2) != "07") {
		return false;
	}
	return true;
}

function IsNumeric(strString)
	// check for valid numeric strings
{
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	
	if (strString.length == 0) return false;
	
	// test strString consists of valid characters listed above
	for (i = 0; i < strString.length && blnResult == true; i++)
	{
		strChar = strString.charAt(i);
		if (strValidChars.indexOf(strChar) == -1)
		{
			blnResult = false;
		}
	}
	return blnResult;
} 

function isValidPeriod(beginDate, endDate) {
	return (endDate >= beginDate);
}
// Check that an email address is valid based on RFC 821
function isValidEmail(address, optional) {
   if (address != '' && address.search) {
      if (address.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) return true;
      else return false;
   }
   // allow empty strings to return true if optional
   else return optional;
}

function openWindow(url, width, height, scrollbars, menubar, windowName) {
    var Win = window.open(url,windowName,'width=' + width + ',height=' + height + ',resizable=yes,scrollbars=' + scrollbars + ',menubar=' + menubar );
    Win.creator=self;
}

function maxlengthTextarea(obj){
    var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
    if (obj.getAttribute && obj.value.length>mlength)
    obj.value=obj.value.substring(0,mlength)
}

function textCounter(field,cntfield,maxlimit) {
    if (field.value.length > maxlimit) {
        field.value = field.value.substring(0, maxlimit);
    } else {
        cntfield.value = maxlimit - field.value.length;
    }
}

// Generic function to set & retrieve cookies
// syntax for setting cookies is:
// Set_Cookie( 'variablename', 'value', 'days until expiry', 'directory', '', '' );
// The last too variables are domain & secure, which are only used if you need to access cookies across domains

// To retrieve a cookie: Get_Cookie('name');

function Set_Cookie( name, value, expires, path, domain, secure ) 
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct 
expires time, the current script below will set 
it for x number of days, to make it for hours, 
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
( ( path ) ? ";path=" + path : "" ) + 
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}

// this function gets the cookie, if it exists
function Get_Cookie( name ) {
	
var start = document.cookie.indexOf( name + "=" );
var len = start + name.length + 1;
if ( ( !start ) &&
( name != document.cookie.substring( 0, name.length ) ) )
{
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ";", len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}

function Delete_Cookie(name,path,domain) {
    if (Get_Cookie(name)) document.cookie = name + "=" +
        ( (path) ? ";path=" + path : "") +
        ( (domain) ? ";domain=" + domain : "") +
        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function sendComment(frmId) {
    
    if(validate(document.getElementById('frmId'))) {
    	document.forms['frmComment'].Submit.value='Please wait...'; 
        document.forms['frmComment'].Submit.disabled = true; 
        document.forms['frmComment'].submit();
        return true;
    }
    else {
        return false;
    }
}

function checkAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = false ;
}

