/**
 * Universal JavaScript form validator
 * Currently validates following formats of fields:
 * 		string_format - value can consists only: alphanumeric signs, -.$@!%&()_,;:"'<>?/\+=
 * 		numeric_format - value must be a digital and can be with , or . between parts
 * 		integer_format -
 * 		email_format - must be a valid email
 */

var formats = new Array();
formats['string_format'] = /^[a-zA-Z0-9\-\.\$\@\!\%\&\(\)_\,\;\:\"\'\<\>\?\/\\\+\=\s]{1,}$/
formats['numeric_format'] = /^[0-9]{1,}[,\.]{0,1}[0-9]{1,}$/
formats['integer_format'] = /^\d+$/
formats['email_format'] = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
formats['url_format'] = /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)*)(:(\d+))?(\/([~A-Z0-9_\/.-]|%[A-Z0-9]{2,2})*(\?([A-Z0-9_\/=&-]|%[A-Z0-9]{2,2})*)?)?$/i

function finalCheckFormat(element)
{
	var format = element.getAttribute("format");
	var value = element.value;
    if (format == "email_format" || format == "number_format" || format == "string_format" || format == "numeric_format" || format == "integer_format" || format == "url_format"){
    	if (element.value.search(formats[format])== -1){
        	return false;
        }else{
        	return true;
        }
    }
    if (format == "equal_pass"){
    	equal_field = element.getAttribute("equal");
    	if (value != document.getElementById(equal_field).value){
        	return false;
        }else{
        	return true;
        }
    }
}

function finalCheck(element)
{
	var validate = element.getAttribute("validate");
	var format = element.getAttribute("format");
    var value = element.value;
    if (validate == "true" && value != "" && format !=""){
        if(finalCheckFormat(element)){
            return true;
        }else{
            return false;
        }
    }else{
        return true;
    }
}

function checkErrors(form)
{
	var errors = new Array();
    var string = "";
    for (i = 0; i <= (form.elements.length-1); i++){
		var validate = form.elements[i].getAttribute("validate");
		var format = form.elements[i].getAttribute("format");
    	var value = form.elements[i].value;
    	var required = form.elements[i].getAttribute("required");
    	var field_caption = form.elements[i].getAttribute("caption")
    	if (required != null && required != ""){
        	if ((required == "true" || required == "required") && value == ""){
            	var field_string = '';
				errors[i] = field_caption + " can not be empty!";
                string += errors[i].toString()+"\n";
            }
        }
        if (validate == "true" && format != "" && format != null && format != false){
        	if (finalCheck(form.elements[i]) == false)
            {
            	var format_string = '';
            	var field_string = '';
            	if (format == 'email_format'){
            		format_string = 'valid Email Address';
            	}
            	if (format == 'number_format'){
            		format_string = 'valid Number';
            	}
	           	if (format == 'string_format'){
            		format_string = 'valid String';
            	}
            	if (format == 'numeric_format'){
            		format_string = 'valid Numeric Value';
            	}
            	if (format == 'integer_format'){
            		format_string = 'valid Integer';
            	}
            	if (format == 'equal_pass'){
            		format_string = 'equal to Password';
            	}
            	if (format == 'url_format'){
            		format_string = 'valid URL';
            	}
            	errors[i] = "Field " + field_caption + " must be " + format_string + "!";
                string += errors[i].toString()+"\n";
            }
        }
    }
    if (errors.length > 0){
        alert(string);
        return false;
    }
   	deactivateElement('submit_button');
   	form.submit();
    return true;
}
