/**

 * 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.jpg";

   var img_c    = "files/img/checked.jpg";

   var img_spin = "files/img/ispinner.gif";

   var img_h    = "";

   var zipVisible = false;

   var cls      = new Array(12);

   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';

   cls[9]		= 'validate_country' ;

   cls[10]		= 'validate_zip' ;

   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;

		    }

			case cls[9]:{
				
				if(zipNecessary()) { if(!this.zipVisible) {  showZipDiv(); }; } else { if(this.zipVisible) { hideZipDiv(); }; }; 

					   if(e.value.length==0 || e.value==0) {

	     return add(e);}

	   else

	   { return del(e);}

			}

			case cls[10]:{

				if(zipNecessary()) { validate_zip(e); } else { del(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) {

	   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

	  {  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);}

    };

	function validate_unique_username(e) {

		if(/^[a-zA-Z0-9]+$/.test(e.value))

        {

            var is_err = validate_username(e);

            if(!is_err) {

                ajax_data(e);

            }

        }

        else

        {

            add(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);}		    

	};

	function zipNecessary() {

		if($("#info13").val()=="United States") { return true; } else { return false; }

	};

	function validate_zip(e) {

		var zip = $("#"+e.id).val();

		if(isNaN(zip))

		{
            return add(e);

		}

		else

		{

			if(zip.length==5)

			{
                return del(e);

			}

			else

			{

				return add(e);

			}

		}

	};

	function showZipDiv()

	{

		if(this.zipVisible)

		{

			return true;

		}

		else

		{

			$(".zipdiv").fadeIn(300);

			this.zipVisible=true;

			return true;

		}

	};

  $(function(){
    $(":password, #edit-pass-pass1, #edit-pass-pass2, input[name='mail']").attr('autocomplete','off');
  });

	function hideZipDiv()

	{

		if(!this.zipVisible)

		{

			return true;

		}

		else

		{

			$(".zipdiv").fadeOut(300);

			this.zipVisible=false;

			return true;

		}

	};

   

})(jQuery);




