Utils.Validator = function() {
  return {
    isEmail: function(value) {
    	if (value.match(/([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z]+)/i)) return true
    	else return false;
    },
    
    isUrl: function(value) {
    	if (value.match(/http:\/\/([a-z0-9_\.-]+)\.([a-z]+)/i)) return true
    	else return false;
    },
    
    initInputMask: function() {
    	$('input[type=text]').each(function() {
    		if ($(this).attr('mask')) {
    			$(this).bind('keypress', function(e) {return Utils.Validator.maskInputKeyPress(e);});
    		}
    	});
    },
    
    maskInputKeyPress: function(evt) {
    	var mask = evt.target.getAttribute('mask');
    	mask = mask.split('-');
    
    	key = evt.which;
    	
    	var action = evt.target.getAttribute('action');
    	if (key == 13 && action) {
    		eval(action); 
    	}
    	
    	var flag = false;
    	for (var i=0; i<mask.length; i++) {
    		if (mask[i] == 'num') {
    			flag = flag || (key == 9 || key == 8 || key >= 48&&key<=57);
    		}
    		if (mask[i] == 'dot') { 
    			flag = flag || (key == 9 || key == 8 || key == 44 || key == 46);
    		}
    		if (mask[i] == 'seg') {
    			flag = flag || (key == 9 || key == 8 || key == 60 || key == 61 || key == 62);
    		}
    		if (mask[i] == 'space') {
    			flag = flag || (key == 9 || key == 8 || key == 32);
    		}
    	}
    	return flag;
    },

		isVisible: function(elem) {
			return $(elem).is(':visible');
		},
    
    validate: function(frm, callbackBefore) {
    	if (typeof callbackBefore == 'function') {if (!callbackBefore()) return false;}
    	
    	var form = frm.tagName ? frm : $('#'+frm).get(0);
      if (!form.tagName) {
        alert('Err: no form found');
        return false;
      }

    	for (var i=0; i<form.elements.length; i++) { 
    		var item = form.elements[i];
				var required = $(item).attr('required');
				var requiredV = $(item).attr('requiredVisible');
    		if ((required == 'true' || required == true) || ((requiredV == 'true' || requiredV == true) && Utils.Validator.isVisible(item))) {
    			var hint = $(item).attr('hint');
    			if (Utils.Common.trim(item.value) == '' || Utils.Common.trim(item.value) == hint || (item.type == 'checkbox' && !item.checked)) {
    				if (typeof Utils.Message.show == 'function') {
    					var desc = $(item).attr('desc');
    					Utils.Message.show(item, desc ? $(item).attr('desc') : 'Заполните поле');
    				}
    				else alert('Please fill "'+$(item).attr('desc')+'" field.');
    				item.focus();
    				return false;
    			}
    		}
    	}
    	return true;
    }
    
  }
}();

$(document).ready(function () {Utils.Validator.initInputMask();});
