/**
 * Validate 
 * A  plugin to simply validate form fields
 *
 * Version 1.2.3
 * January 2009
 *
 * Copyright (c) 2009 Christopher M. Natan
 * Dual licensed under the MIT and GPL licenses.
 *
 **/
;(function($) { 
   var img_e    = "files/img/error.png";
   var img_c    = "files/img/checked.png";
   var img_spin = "files/img/ispinner.gif";
   var img_h    = "";
   var cls      = new Array(10);
   cls[0]       = 'validate_blank';
   cls[1]       = 'validate_email';
   cls[2]       = 'validate_username';
   cls[3]       = 'validate_password';
   cls[4]       = 'validate_password_confirm';
   cls[5]       = 'validate_visa';
   cls[6]       = 'validate_agree';
   cls[7]       = 'validate_unique_username';
   cls[8]       = 'validate_unique_email';
   var ajaxpost = 0;
   $.fn.validate = function() {
		
		for (var i=0; i<cls.length; i++) {
			 var name   = cls[i];
			 var cl     = $('.'+name);
		 	$(cl).bind('blur', function() {check(this);});
			if(i<7) {
			  $(cl).bind('keypress', function(){check(this);});
			  $(cl).bind('change', function(){check(this);});
			} else {
			  $(cl).bind('keypress', function(){
				  $(this).attr("title",'');  							
			  });	
			}
		 }
		return this;
	};
	
	
	$.fn.valid = function() {
		return validcheck();
    };
	function validcheck() {
       for (var i=0; i<cls.length; i++) {
			 var name     = cls[i];
			 var cl     = $('.'+name);
			 for (var x=0; x<cl.length; x++) {  
			    check(cl[x]); 
			 }
	   }
	   var err = count_error();
	   return err;
	}
	function count_error() {
	   var detect  = $().find(".validate-error-e");
	   if(detect.length==0) { return true;}
	   return false;	
	}
	function check(e) { 
	    var temp     = e.className;
		var splits   = temp.split(' ');
        var name     = splits[0];
		 
		var rnd  = Math.round(Math.random() * 9999999999);
		if(!e.id) {  $(e).attr("id","validate_"+rnd); } 
		switch(name) {
			case cls[0]:{validate_blank(e);break;  } 
			case cls[1]:{validate_email(e);break;}
			case cls[2]:{validate_username(e);break;}
			case cls[3]:{validate_password(e);break;}
			case cls[4]:{validate_password_confirm(e);break;}
			case cls[5]:{validate_visa(e);break;}
			case cls[6]:{validate_agree(e);break;}
			case cls[7]:{
				var title = $('#'+e.id).attr("title");  
				if(title!='chk') { 
				  validate_unique_username(e);
				}break;
			}
			case cls[8]:{
				var title = $('#'+e.id).attr("title");  
				if(title!='chk') { 
				  validate_unique_email(e);
				}break;
		    }
			
		}
	};
	
	function add(e){ return html(e,'e');};
	function del(e){ return html(e,'c');};
	function html(e,t) {
	  var tl   = e.title;
	  var h    = '';
	  var help = "<span style='padding-left:5px;'><a href='#' class='help' title='"+tl+"'>";
	  help = help + "<img src='"+img_h+"' border=0/></a></span>";
	  if(t=='e'){img = img_e; var error = true;} 
	  else {img =img_c; var error = false;}	
	  
	  var classe = "class='validate-error-"+t+"'";
	  $("#s"+e.id).remove();
	  $("#"+e.id).after("<span id='s"+e.id+"'"+classe+"style='padding-left:5px;'><img src='"+img+"'/></span>"+h);   
      $("#"+e.id).fadeIn("slow");
	  return error;
	}
	function makeErr(e,t) {
	  if(t=='e'){img = img_e;} 
	  else {img =img_c;}
	  var classe = "class='validate-error-"+t+"'";
	  $("#s"+e.id).remove();
	  $("#"+e.id).after("<span id='s"+e.id+"' "+classe+"style='padding-left:5px;' ><img src='"+img+"'/></span>");   
      $("#"+e.id).fadeIn("slow");
	};
    function validate_blank(e) {
	   var val = e.value;
           if (val == 'Network') {
             return add(e);
           }
           if (val == 'First Name') {
             return add(e);
           }
           if (val == 'Last Name') {
             return add(e);
           }
	   if(e.value.length==0 || e.value==0) {
	     return add(e);}
	   else
	   { return del(e);}		   
	};
	function validate_email(e) {
	  var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
	  if(!emailfmt.test(e.value) || e.value.length==0) {
	     return add(e);}
	  else
	  {  
            var re = /^Email/;
            if(re.test(e.value)) {
              return add(e);
            } else  {
              return del(e);
            }
          }			    
	};
	function validate_username(e) {
		var min = MINIMUM_USERNAME;
        var len = e.value.length; 
        /*
		if(len < min || e.value.length==0)
		{ return add(e);}
		else
		{ return del(e);}		    
    */
        return del(e);
	};
	function validate_unique_username(e) {
		var is_err = validate_username(e);
		if(!is_err) {
			ajax_data(e);
		}
	};
    function validate_unique_email(e) {
		var is_err = validate_email(e);
		if(!is_err) {
			ajax_data(e);
		}
	};
	
	function ajax_data(e) {
	    var value = $(e).val();
		if(value!='') {
		   var title = $('#'+e.id).attr("title");
		   $("#s"+e.id).remove();
		   $("#"+e.id).after("<span id='s"+e.id+"'style='padding-left:5px;' ><img src='"+img_spin+"'/></span>");  
		   $.post(" ", { ajaxdata: value, ajaxtype : e.id },
			function(data){
				 $('.'+AJAX_TARGET_ELEMENT).html(data);
			     $("#s"+e.id).remove();
				 if(exist==1) {
					 $('.ajax_error_'+ e.id).fadeIn();
					 makeErr(e,'e');
				 } else {
					 $('.ajax_error_'+e.id).fadeOut();
					 makeErr(e,'c'); 
				 }
				$('#'+e.id).attr("title",'chk');
			});
		}
		
	};	   
	function validate_password(e) {
		var min = MINIMUM_PASSWORD;
        var len = e.value.length;
		if(len < min || e.value.length==0)
		{ return add(e);}
		else
		{ return del(e);}		    
	};
	function validate_password_confirm(e) {
		var p = $('.validate_password').val();
		if(p != e.value || e.value.length==0)
		{ return add(e);}
		else
		{ return del(e);}		    
	};
	function validate_visa(e){
	  var val = e.value;
	  if(val.length==16 && !isNaN(val)){ 
         return del(e); 
	  }
	  if(val.length==0){return add(e);}
	  else if(val.length<16 || isNaN(val)){ 
         return add(e);
	  }
	  else if(val.length>16 || isNaN(val)){ 
         return add(e); 
	  }
	};
	function validate_agree(e) {
		if(!e.checked)
		{return add(e);}
		else
		{ return del(e);}		    
	};

   
})(jQuery);

