
var error_img = '<span class="validation_ph" style="vertical-align:bottom;padding:2px;"><img src="/theme/images/butoane/x.gif"/></span>';
var valid_img = '<span class="validation_ph" style="vertical-align:bottom;padding:2px;"><img src="/theme/images/butoane/vazut.gif"/></span>';

function attachValidation () {
    $("form.validate").bind("submit", function(){
        var errors = 0;
        $(this).find(":input").each(function(){
            var el = $(this);
            var valid = elementValid(el);
            if (!valid) {
                errors++;
            }
        });
        if (errors > 0) {
            return false;
        }
    });

    $("form.validate").find(":input").bind("blur", function(){
        var el = $(this);
        elementValid(el);
    });
};

function elementValid (el) {
    var name = el.attr("name");
    var value = el.val();
    if (el.attr("type") == "checkbox" && !el.is(":checked")) {
        value = "";
    }
    var valid = true;
    
    if (el.is(":hidden") || el.parents(":hidden").length > 0) {
        return true;
    }
    
    for (var key in VALIDATION) {
        if (key == name) {
            method = VALIDATION[key];
            if (typeof method != "object") {
                method = new Array(method);
            }
            
            for (var i = 0; i < method.length; i++) {
                var valid = validateElementMethod(value, method[i]);               
                if (!valid) {
                    break;
                }
            }
            
            if (valid) {
                if (value != "") {
                    el.next("span.validation_ph").remove();
                    el.after(valid_img);
                    el.removeClass("error");
                    el.addClass("valid");
                }
            } else {
                el.next("span.validation_ph").remove();
                el.after(error_img);
                el.removeClass("valid");
                el.addClass("error");
            }
            
            return valid;
        }
    }
    
    return valid;
};

function validateElementMethod (value, method) {
    switch (method) {
        case "required":
            if (value != "") {
                return true;
            }
            return false;
        break;
        case "alphaclean":
            if(value.length>1) {
                return value == "" || /^([a-z0-9-_\.\s]+)$/i.test(value);
            } else {
                return value == "";
            }
        break;
        case "alphacleanspec":
            if (value.length>1) {
                return true;
            } else {
            	return false;
            }
        break;
        
        case "email":
            return value == "" || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
        break;

        case "url":            
            return value == "" || /^www.[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&\?\/.=]+$/.test(value);
        break;

        case "phone":
            return (value == "" || /^([\d\s.+\-\+\/\,a-zA-Z]+)?\d+$/.test(value)) && (value.length > 5) ;
        break;
        
        case "number":
            return value == "" || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
        break;
        
        case "alphanumeric":
            return value == "" || /^[^0-9]+$/.test(value);
        break;
        
        case "username":
            return value == "" || /^[0-9a-zA-Z._-]+$/.test(value);
        break;

        case "dateISO":
            return value == "" || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
        break;
        
        case "dateRO":
            return value == "" || /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}$/.test(value);
        break;

        case "images":            
            return value == "" || /(.*?)\.(jpg|jpeg|png|gif|bmp)$/i.test(value);
        break;

        default:
            return method(value);
        break;
    }
};

// functie de curatare string
function clean_string(text_nume) {
    
    text_nume = text_nume.replace(/(\.)|(\,)|(\?)|(\\)|(\=)|(\~)|(\!)|(\@)|(\#)|(\$)|(\%)|(\^)|(\`)|(\')|(\")|(\:)|(\<)|(\>)|(\{)|(\})|(\[)|(\])|(\|)|(\*)|(\;)|(\“)/g, '');
    text_nume = text_nume.replace(/(\s\s)/g, ' ');
    text_nume = text_nume.replace(/(\s)|(\s-\s)|(\/)|(\+)|(\&)/g, '-');
    text_nume = text_nume.replace(/(\-\-\-\-)|(\-\-\-)|(\-\-)/g, '-');
    
    //text_nume = text_nume.replace(/(!\w)/g, '');
    text_nume = text_nume.toLowerCase();    
    return text_nume;
}
