var template = (function() {var c={};return function(str,data){var fn=!/\s/.test(str)?c[str]=c[str]||arguments.callee(document.getElementById(str).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+str.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)%>/g, "',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return data?fn(data):fn;};})();

var trim = function(str) {
	return str.replace(/^[\t|\s]+/, '').replace(/\s+$/, '').replace(/\s+/, ' ');
};

var validateEmail = function(elementValue){
	var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	return pattern.test(elementValue);
};

var validateZip = function(elementValue){
	var pattern = /^\d{5}([\-]\d{4})?$/;
	return pattern.test(elementValue);
};

var validatePhone = function(elementValue){
	var pattern = /^[\(]?\d{3}[\s\)\.\-]?\s?\d{3}[\s\.\-]?\d{4}$/;
	return pattern.test(elementValue);
};

var validateURL = function(elementValue){
	var pattern = /^https?\:\/\/[A-Za-z0-9\-\_\.]+(\/[A-Za-z0-9\-\_\%\&\?\/\.=]*)*$/;
	return pattern.test(elementValue);
	return false;
};

var get_parent_form_as_object = function(el) {
	var values = $(el).closest('form').serializeArray();
	var value_object = {};
	$.each(values,function(i,item){
		value_object[no_dashes(item.name)] = item.value;
	});
	return value_object;
};

var no_dashes = function(str) {
	return str.replace(/[ -]/gi,"_");
};

var mysqlTimeStampToDate = function(timestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
};

var validate = function(){};
$(document).ready(function() {
	validate = function(el, validations){
	
		var validate_me = function() {
			if ( typeof validate_me.form_error == 'undefined' ) {
		        validate_me.form_error = false;
		    }

			var valid = true;
			var t = $(el);
	  		var input = t.val();
	  		var label = t.closest('label');
	  		var form = t.closest('form');
	  		if(typeof form.data('errors') == 'undefined') {
	  			form.data('errors',0);
	  		}
			label.children().remove('.feedback-access');
			
			for(var i=0; i<validations.length; i++) {
				var validate = validations[i];
				if(valid && !validate.test(input)) {
		  			label.append(template('feedback-stop',{message:validate.message}));
	  				valid = false;
		  			if(!validate_me.form_error) {
		  				validate_me.form_error = true;
		  				form.data('errors',form.data('errors')+1);
		  			}
				}
			}
			
			if(valid) {
				if(validate_me.form_error) {
					validate_me.form_error = false;
					form.data('errors',form.data('errors')-1);
				}
				label.append(template('feedback-go',{}));
			}
		}
		
		return validate_me;
  	};
});