if (typeof(WREST_JS) == 'undefined') // only once
{

    var WREST_JS = true;

    var wrestMsg = '';
    var wrestFld = null;
    //var wrestFldDefaultColor = '#FFFFFF'; 
    var wrestFldDefaultColor = ''; 
    var wrestFldBackColor = '#FFE4E1'; 
    var arrAttr  = new Array ('required', 'trim', 'minlength', 'email', 
                              'memberid', 'nospace', 'numeric', 'alpha', 'alphanumeric', 
                               'alphanumericunderline', 'telnumber');

    function wrestItemname(fld)
    {
        var itemname = fld.getAttribute("itemname");
        if (itemname != null && itemname != "")
            return itemname;
        else
            return fld.name;
    }

    function wrestTrim(fld) 
    {
        var pattern = /(^\s*)|(\s*$)/g; // \s space
        fld.value = fld.value.replace(pattern, "");
        return fld.value;
    }

    function wrestRequired(fld)
    {
        var rvar = fld.getAttribute("required");
        if(rvar == "Yes") {
	        if (wrestTrim(fld) == "") 
	        {
	            if (wrestFld == null) 
	            {
	                // 3.30
	                // in case select box
	                wrestMsg = wrestItemname(fld) + " : "+(fld.type=="select-one"?"Optional":"Required")+" field.\n";
	                wrestFld = fld;
	            }
	        }
	      }
    }

    function wrestMinlength(fld)
    {
        var len = fld.getAttribute("minlength");
        if (fld.value.length < len) 
        {
            if (wrestFld == null) 
            {
                wrestMsg = wrestItemname(fld) + " :  please enter at least " + len + " characters.\n";
                wrestFld = fld;
            }
        }
    }

    // example : 123-123(4)-5678
	function wrestTelnumber(fld){

		if (!wrestTrim(fld)) return;

		var pattern = /^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/;
		if(!pattern.test(fld.value)){ 
            if(wrestFld == null){
				wrestMsg = wrestItemname(fld)+" : Please check the phone number format.\n";
                wrestFld = fld;
				fld.select();
            }
		}
	}

    // check email address format
    function wrestEmail(fld) 
    {
        if (!wrestTrim(fld)) return;

        //var pattern = /(\S+)@(\S+)\.(\S+)/; 
        var pattern = /([0-9a-zA-Z_-]+)@([0-9a-zA-Z_-]+)\.([0-9a-zA-Z_-]+)/;
        if (!pattern.test(fld.value)) 
        {
            if (wrestFld == null) 
            {
                wrestMsg = wrestItemname(fld) + " : invalid email address.\n";
                wrestFld = fld;
            }
        }
    }

    
    function wrestMemberId(fld) 
    {
        if (!wrestTrim(fld)) return;

        var pattern = /(^([a-z0-9]+)([a-z0-9_]+$))/;
        if (!pattern.test(fld.value)) 
        {
            if (wrestFld == null) 
            {
                wrestMsg = wrestItemname(fld) + " : invalid member id format.";
                wrestFld = fld;
            }
        }
    }


    function wrestNumeric(fld) 
    { 
        if (fld.value.length > 0) 
        { 
            for (i = 0; i < fld.value.length; i++) 
            { 
                if (fld.value.charAt(i) < '0' || fld.value.charAt(i) > '9') 
                { 
                    wrestMsg = wrestItemname(fld) + " : Numeric only.\n"; 
                    wrestFld = fld; 
                }
            }
        }
    }

    function wrestAlpha(fld) 
    { 
        if (!wrestTrim(fld)) return; 

        var pattern = /(^[a-zA-Z]+$)/; 
        if (!pattern.test(fld.value)) 
        { 
            if (wrestFld == null) 
            { 
                wrestMsg = wrestItemname(fld) + " : Alpha only.\n"; 
                wrestFld = fld; 
            } 
        } 
    } 

    function wrestAlphaNumeric(fld) 
    { 
       if (!wrestTrim(fld)) return; 
       var pattern = /(^[a-zA-Z0-9]+$)/; 
       if (!pattern.test(fld.value)) 
       { 
           if (wrestFld == null) 
           { 
               wrestMsg = wrestItemname(fld) + " : Alphanumeric only.\n"; 
               wrestFld = fld; 
           } 
       } 
    } 

    function wrestAlphaNumericUnderLine(fld) 
    { 
       if (!wrestTrim(fld)) 
           return; 

       var pattern = /(^[a-zA-Z0-9\_]+$)/; 
       if (!pattern.test(fld.value)) 
       { 
           if (wrestFld == null) 
           { 
               wrestMsg = wrestItemname(fld) + " : Alpha, Numeric, (_) only.\n"; 
               wrestFld = fld; 
           } 
       } 
    } 


    function wrestNospace(fld)
    {
        var pattern = /(\s)/g; // \s space
        if (pattern.test(fld.value)) 
        {
            if (wrestFld == null) 
            {
                wrestMsg = wrestItemname(fld) + " : No space.\n";
                wrestFld = fld;
            }
        }
    }

    // check attribute 
    function wrestSubmit()
    {
        wrestMsg = "";
        wrestFld = null;

        var attr = null;

        for (var i = 0; i < this.elements.length; i++) 
        {
            if (this.elements[i].type == "text" || 
                this.elements[i].type == "file" || 
                this.elements[i].type == "password" ||
                this.elements[i].type == "select-one" ||
                this.elements[i].type == "textarea") 
            {
                for (var j = 0; j < arrAttr.length; j++) 
                {
                    if (this.elements[i].getAttribute(arrAttr[j]) != null) 
                    {
                        /*
                        if (this.elements[i].getAttribute("required") != null) {
                            this.elements[i].style.backgroundColor = wrestFldDefaultColor;
                        }
                        */
                        switch (arrAttr[j]) 
                        {
                            case "required"     : wrestRequired(this.elements[i]); break;
                            case "trim"         : wrestTrim(this.elements[i]); break;
                            case "minlength"    : wrestMinlength(this.elements[i]); break;
                            case "email"        : wrestEmail(this.elements[i]); break;
                            case "memberid"     : wrestMemberId(this.elements[i]); break;
                            case "nospace"      : wrestNospace(this.elements[i]); break;
                            case "numeric"      : wrestNumeric(this.elements[i]); break; 
                            case "alpha"        : wrestAlpha(this.elements[i]); break; 
                            case "alphanumeric" : wrestAlphaNumeric(this.elements[i]); break; 
                            case "alphanumericunderline" : 
                                                  wrestAlphaNumericUnderLine(this.elements[i]); break; 
														case "telnumber"	: wrestTelnumber(this.elements[i]); break;
                            default : break;
                        }
                    }
                }
            }
        }

        if (wrestFld != null) 
        { 
            alert(wrestMsg); 
            if (wrestFld.style.display != 'none') 
            { 
                wrestFld.style.backgroundColor = wrestFldBackColor; 
                wrestFld.focus(); 
            } 
            return false; 
        } 

        if (this.oldsubmit && this.oldsubmit() == false)
            return false;
	
        return true;
    }

		function wrestInitialized() {
			for (var i = 0; i < document.forms.length; i++) 
			{
			    if (document.forms[i].onsubmit) document.forms[i].oldsubmit = document.forms[i].onsubmit;
			    document.forms[i].onsubmit = wrestSubmit;
			}
		}
    wrestInitialized();
}

