/*
$(oRequired[x][0]).className = 'cperror';
$(oRequired[x][0]).before('<div class="lberror">' + oRequired[x][1] + '</div>');
*/
function report(fields) {
	/*
	$A($$('div.lberror')).each(function(item, index) {
		item.parentNode.removeChild(item);
	});

	$A($$('.cperror')).each(function(item, index) {
		item.className = 'cp';
	});
	
	$A(fields).each(function(item, index) {
		$(item[0]).className = 'cperror';
		$(item[0]).before('<div class="lberror">' + item[1] + '</div>');
	});
	*/

	var message = '';
	$A(fields).each(function(item, index) {
		message += item[1] + '<br/>';
	});
	alert(message);
}

function validateMaxLength(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("id"); 

    oMaxLength = eval('new ' + formName.value + '_maxlength()');        
    for (x in oMaxLength) {
        var field = form[oMaxLength[x][0]];

        if ((field.type == 'hidden' ||
            field.type == 'text' ||
            field.type == 'password' ||
            field.type == 'textarea') &&
            field.disabled == false) {

            var iMax = parseInt(oMaxLength[x][2]("maxlength"));
            if (field.value.length > iMax) {
                if (focusField == null) {
                    focusField = getFocusField(field);
                }
                fields[i++] = oMaxLength[x];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       report(fields);
    }
    return isValid;
}


function validateRequired(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("id");

    oRequired = eval('new ' + formName.value + '_required()');

    for (x in oRequired) {
        var field = form[oRequired[x][0]];

        if ((field.type == 'hidden' ||
            field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'file' ||
            field.type == 'checkbox' ||
            field.type == 'select-one' ||
            field.type == 'password') &&
            field.disabled == false) {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else if (field.type == 'checkbox') {
                if (field.checked) {
                    value = field.value;
                }
            } else {
                value = field.value;
            }

            if (value.trim().length == 0) {

                if (focusField == null) {
                	focusField = getFocusField(field);
                }
                fields[i++] = oRequired[x];
                isValid = false;
            }
        } else if (field.type == "select-multiple") { 
            var numOptions = field.options.length;
            lastSelected=-1;
            for(loop=numOptions-1;loop>=0;loop--) {
                if(field.options[loop].selected) {
                    lastSelected = loop;
                    value = field.options[loop].value;
                    break;
                }
            }
            if(lastSelected < 0 || value.trim().length == 0) {
                if(i == 0) {
                    focusField = getFocusField(field);
                }
                fields[i++] = oRequired[x];
                isValid=false;
            }
        } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
            isChecked=-1;
            for (loop=0;loop < field.length;loop++) {
                if (field[loop].checked) {
                    isChecked=loop;
                    break; // only one needs to be checked
                }
            }
            if (isChecked < 0) {
                if (focusField == null) {
                    focusField = getFocusField(field[0]);
                }
                fields[i++] = oRequired[x];
                isValid=false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       report(fields);
    }
    return isValid;
}
    
function validateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("id");


    oEmail = eval('new ' + formName.value + '_email()');

    for (x in oEmail) {
        var field = form[oEmail[x][0]];
        if ((field.type == 'hidden' || 
             field.type == 'text' ||
             field.type == 'textarea') &&
            (field.value.length > 0) &&
            field.disabled == false) {
            if (!checkEmail(field.value)) {
                if (focusField == null) {
                    focusField = getFocusField(field);
                }
                fields[i++] = oEmail[x];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        report(fields);
    }
    return bValid;
}

function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   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 > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}

function validateMask(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("id"); 

    oMasked = eval('new ' + formName.value + '_mask()');      
    for (x in oMasked) {
        var field = form[oMasked[x][0]];

        if ((field.type == 'hidden' ||
            field.type == 'text' ||
             field.type == 'textarea' ||
			 field.type == 'file') &&
             (field.value.length > 0) &&
             field.disabled == false) {

            if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
                if (focusField == null) {
                    focusField = getFocusField(field);
                }
                fields[i++] = oMasked[x];
                isValid = false;
            }
        }
    }

    if (fields.length > 0) {
       focusField.focus();
       report(fields);
    }
    return isValid;
}

function matchPattern(value, mask) {
   return mask.exec(value);
}

function validateMinLength(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("id");


    oMinLength = eval('new ' + formName.value + '_minlength()');

    for (x in oMinLength) {
        var field = form[oMinLength[x][0]];

        if ((field.type == 'hidden' ||
            field.type == 'text' ||
            field.type == 'password' ||
            field.type == 'textarea') &&
            field.disabled == false) {

            var iMin = parseInt(oMinLength[x][2]("minlength"));
            if ((field.value.trim().length > 0) && (field.value.length < iMin)) {
                if (focusField == null) {
                    focusField = getFocusField(field);
                }
                fields[i++] = oMinLength[x];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       report(fields);
    }
    return isValid;
}

function getFocusField(field) {
	if (field.type == 'hidden') {
		nameFieldFocus = field.getAttribute("fieldFocus");
		if (nameFieldFocus != null) {
			return document.getElementById(nameFieldFocus);
		}
	} else {
        return field;
    }
    return null;
}
    
