/*
 -------------------------------------------------------------------------
 JavaScript Form Validator
 Version 2.0.2
 Copyright 2003 JavaScript-coder.com. All rights reserved.
 You use this script in your Web pages, provided these opening credit
 lines are kept intact.
 The Form validation script is distributed free from JavaScript-Coder.com
 You may please add a link to JavaScript-Coder.com,
 making it easy for others to find this script.
 Checkout the Give a link and Get a link page:
 http://www.javascript-coder.com/links/how-to-link.php
 You may not reprint or redistribute this code without permission from
 JavaScript-Coder.com.

 JavaScript Coder
 It precisely codes what you imagine!
 Grab your copy here:
 http://www.javascript-coder.com/
 -------------------------------------------------------------------------
 */
function Validator(frmname){
    this.formobj = document.forms[frmname];
    if (!this.formobj) {
        alert("BUG: couldnot get Form object " + frmname);
        return;
    }
    if (this.formobj.onsubmit) {
        this.formobj.old_onsubmit = this.formobj.onsubmit;
        this.formobj.onsubmit = null;
    }
    else {
        this.formobj.old_onsubmit = null;
    }
    this.formobj.onsubmit = form_submit_handler;
    this.addValidation = add_validation;
    this.setAddnlValidationFunction = set_addnl_vfunction;
    this.clearAllValidations = clear_all_validations;
}

function set_addnl_vfunction(functionname){
    this.formobj.addnlvalidation = functionname;
}

function clear_all_validations(){
    for (var itr = 0; itr < this.formobj.elements.length; itr++) {
        this.formobj.elements[itr].validationset = null;
    }
}

function form_submit_handler(){
    //alert(this.elements.length);
    for (var itr = 0; itr < this.elements.length; itr++) {
        if (this.elements[itr].validationset &&
        !this.elements[itr].validationset.validate()) {
            return false;
        }
    }
    if (this.addnlvalidation) {
        str = " var ret = " + this.addnlvalidation + "()";
        eval(str);
        if (!ret)
            return ret;
    }
    return true;
}

function add_validation(itemname, descriptor, errstr){
    if (!this.formobj) {
        alert("BUG: the form object is not set properly");
        return;
    }//if
    var itemobj = this.formobj[itemname];
    if (!itemobj) {
        alert("BUG: Couldnot get the input object named: " + itemname);
        return;
    }
    if (!itemobj.validationset) {
        itemobj.validationset = new ValidationSet(itemobj);
    }
    itemobj.validationset.add(descriptor, errstr);
}

function ValidationDesc(inputitem, desc, error){
    this.desc = desc;
    this.error = error;
    this.itemobj = inputitem;
    this.validate = vdesc_validate;
}

function vdesc_validate(){
    if (!V2validateData(this.desc, this.itemobj, this.error)) {
        this.itemobj.focus();
        return false;
    }
    return true;
}

function ValidationSet(inputitem){
    this.vSet = new Array();
    this.add = add_validationdesc;
    this.validate = vset_validate;
    this.itemobj = inputitem;
}

function add_validationdesc(desc, error){
    this.vSet[this.vSet.length] = new ValidationDesc(this.itemobj, desc, error);
}

function vset_validate(){
    for (var itr = 0; itr < this.vSet.length; itr++) {
        if (!this.vSet[itr].validate()) {
            return false;
        }
    }
    return true;
}

function validateEmailv2(email){
    // a very simple email validation checking.
    // you can add more complex email checking if it helps
    if (email.length <= 0) {
        return true;
    }
    var splitted = email.match("^(.+)@(.+)$");
    if (splitted == null)
        return false;
    if (splitted[1] != null) {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null)
            return false;
    }
    if (splitted[2] != null) {
        var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
        if (splitted[2].match(regexp_domain) == null) {
            var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if (splitted[2].match(regexp_ip) == null)
                return false;
        }// if
        return true;
    }
    return false;
}

function V2validateData(strValidateStr, objValue, strError){
    var epos = strValidateStr.search("=");
    var command = "";
    var cmdvalue = "";
    if (epos >= 0) {
        command = strValidateStr.substring(0, epos);
        cmdvalue = strValidateStr.substr(epos + 1);
    }
    else {
        command = strValidateStr;
    }
    switch (command) {
        case "req":
        case "required":{
            if (eval(objValue.value.length) == 0) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + " : Required Field";
                }//if
                alert(strError);
                return false;
            }//if
            break;
        }//case required
        case "maxlength":
        case "maxlen":{
            if (eval(objValue.value.length) > eval(cmdvalue)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + " : " + cmdvalue + " characters maximum ";
                }//if
                alert(strError + "\n[Current length = " + objValue.value.length + " ]");
                return false;
            }//if
            break;
        }//case maxlen
        case "minlength":
        case "minlen":{
            if (eval(objValue.value.length) < eval(cmdvalue)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
                }//if
                alert(strError + "\n[Current length = " + objValue.value.length + " ]");
                return false;
            }//if
            break;
        }//case minlen
        case "alnum":
        case "alphanumeric":{
            var charpos = objValue.value.search("[^A-Za-z0-9]");
            if (objValue.value.length > 0 && charpos >= 0) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": Only alpha-numeric characters allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
                return false;
            }//if
            break;
        }//case alphanumeric
        case "num":
        case "numeric":{
            var charpos = objValue.value.search("[^0-9]");
            if (objValue.value.length > 0 && charpos >= 0) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": Only digits allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
                return false;
            }//if
            break;
        }//numeric
        case "alphabetic":
        case "alpha":{
            var charpos = objValue.value.search("[^A-Za-z]");
            if (objValue.value.length > 0 && charpos >= 0) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": Only alphabetic characters allowed ";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
                return false;
            }//if
            break;
        }//alpha
        case "alnumhyphen":{
            var charpos = objValue.value.search("[^A-Za-z0-9\-_]");
            if (objValue.value.length > 0 && charpos >= 0) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": characters allowed are A-Z,a-z,0-9,- and _";
                }//if
                alert(strError + "\n [Error character position " + eval(charpos + 1) + "]");
                return false;
            }//if
            break;
        }
        case "email":{
            if (!validateEmailv2(objValue.value)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": Enter a valid Email address ";
                }//if
                alert(strError);
                return false;
            }//if
            break;
        }//case email
        case "lt":
        case "lessthan":{
            if (isNaN(objValue.value)) {
                alert(objValue.name + ": Should be a number ");
                return false;
            }//if
            if (eval(objValue.value) >= eval(cmdvalue)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + " : value should be less than " + cmdvalue;
                }//if
                alert(strError);
                return false;
            }//if
            break;
        }//case lessthan
        case "gt":
        case "greaterthan":{
            if (isNaN(objValue.value)) {
                alert(objValue.name + ": Should be a number ");
                return false;
            }//if
            if (eval(objValue.value) <= eval(cmdvalue)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + " : value should be greater than " + cmdvalue;
                }//if
                alert(strError);
                return false;
            }//if
            break;
        }//case greaterthan
        case "regexp":{
            if (objValue.value.length > 0) {
                if (!objValue.value.match(cmdvalue)) {
                    if (!strError || strError.length == 0) {
                        strError = objValue.name + ": Invalid characters found ";
                    }//if
                    alert(strError);
                    return false;
                }//if
            }
            break;
        }//case regexp
        case "dontselect":{
            if (objValue.selectedIndex == null) {
                alert("BUG: dontselect command for non-select Item");
                return false;
            }
            if (objValue.selectedIndex == eval(cmdvalue)) {
                if (!strError || strError.length == 0) {
                    strError = objValue.name + ": Please Select one option ";
                }//if
                alert(strError);
                return false;
            }
            break;
        }//case dontselect
    }//switch
    return true;
}

/*
 Copyright 2003 JavaScript-coder.com. All rights reserved.
 */
//function added by rajesh for registraion page

function MM_findObj(n, d){ //v4.01
    var p, i, x;
    if (!d)
        d = document;
    if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document;
        n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all)
        x = d.all[n];
    for (i = 0; !x && i < d.forms.length; i++)
        x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++)
        x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById)
        x = d.getElementById(n);
    return x;
}

function MM_validateForm(){ //v4.0
    var i, p, q, nm, test, num, min, max, errors = '', args = MM_validateForm.arguments;
    var tmps = '', tmpf;
    tmpf = document.forms[1].name;
    for (i = 0; i < (args.length - 2); i += 3) {
        test = args[i + 2];
        val = MM_findObj(args[i]);
        if (val) {
            nm = val.name;
            if ((val = val.value) != "") {
                if (test.indexOf('isEmail') != -1) {
                    p = val.indexOf('@');
                    p1 = val.indexOf('.');
                    if (p < 1 || p == (val.length - 1)) {
                        errors += '- ' + MM_validateForm.arguments[i + 1] + ' must contain an e-mail address.\n';
                        if (tmps == '') {
                            tmps = nm;
                        }
                    }
                    else
                        if (p1 < (p + 3) || p1 == (val.length - 1)) {
                            errors += '- ' + MM_validateForm.arguments[i + 1] + ' must contain an e-mail address.\n';
                            tmps = nm;
                        }
                }
                else
                    if (test != 'R') {
                        num = parseFloat(val);
                        if (isNaN(val)) {
                            errors += '- ' + nm + ' must contain a number.\n';
                            if (tmps == '') {
                                tmps = nm;
                            }
                        }
                        if (test.indexOf('inRange') != -1) {
                            p = test.indexOf(':');
                            min = test.substring(8, p);
                            max = test.substring(p + 1);
                            if (num < min || max < num)
                                errors += '- ' + nm + ' must contain a number between ' + min + ' and ' + max + '.\n';
                        }
                    }
            }
            else
                if (test.charAt(0) == 'R') {
                    errors += '- Enter ' + MM_validateForm.arguments[i + 1] + '.\n';
                    if (tmps == '') {
                        tmps = nm;
                    }
                }
        }
    }
    if (errors) {
        alert('The following error(s) occurred:\n' + errors);
        eval("document." + tmpf + "." + tmps + ".focus()");
    }
    document.MM_returnValue = (errors == '');
}