// JavaScript Document
//
(function($) {
//
var error = true;
// plugin definition
$.fn.validation = function(options) {
	$this = $(this);
	var message = '';
	$.fn.validation.defaults  = $.extend({}, $.fn.validation.defaults, options);
	$('* [rel]',$this ).each(function(){
		  //$(this).css({'border': $.fn.validation.defaults.baseBorder });
	})
	
	$this.bind('submit',function(){
		error = true;
		
		//$('* [rel]').each(function(){alert($(this).attr('id'))});
		$('* [rel]').each(function(){
		  if($(this).attr('disabled')!=true){
		  var type = $(this).attr('rel');
		  var invalid = false;
		  switch (type){
		    case 'required': 
			  switch(this.type){
				case 'checkbox':
				  message = $.fn.validation.defaults.checkboxMessage;
				break;
				default: message = $.fn.validation.defaults.errorMessage;
				break;
			  }
			  if(!$.fn.validation.required(this)){
				  error = false;				
				  invalid = true;
			  }else{
			      invalid = false;
			  };break;
			case 'number': 
			  message = $.fn.validation.defaults.justNumberMessage;
			  if(!$.fn.validation.number(this)){ 
			      error = false;				
				  invalid = true;
			  }else{
			      invalid = false;
			  };break;
			case 'required-number': 
			  if(!$.fn.validation.required(this)){
				  message = $.fn.validation.defaults.errorMessage;
				  error = false;				
				  invalid = true;
			  }else{
				  if(!$.fn.validation.number(this)){ 
				      message = $.fn.validation.defaults.justNumberMessage;
					  error = false;				
					  invalid = true;
				  }else{
					  invalid = false;
				  }
			  };break;
			 case 'required-phone-number': 
			  if(!$.fn.validation.required(this)){
				  message = $.fn.validation.defaults.errorMessage;
				  error = false;				
				  invalid = true;
			  }else if($.fn.validation.required(this) && !$.fn.validation.number(this)){
				  if(!$.fn.validation.number(this)){ 
				      message = $.fn.validation.defaults.justNumberMessage;
					  error = false;				
					  invalid = true;
				  }else{
					  invalid = false;
				  }
			  }else if($.fn.validation.required(this) && $.fn.validation.number(this)){
				  if(!$.fn.validation.minLength(this,10)){ 
					  message = $.fn.validation.defaults.lengthMessage;
					  error = false;				
					  invalid = true;
				  }else{
					  invalid = false;
				  }
			  }
			  ;break;
			 case 'required-email': 
			  if(!$.fn.validation.required(this)){
				  message = $.fn.validation.defaults.errorMessage;
				  error = false;				
				  invalid = true;
			  }else{
				  if(!$.fn.validation.email(this)){ 
				      message = $.fn.validation.defaults.emailMessage;
					  error = false;				
					  invalid = true;
				  }else{
					  invalid = false;
				  }
			  };break;
			 default :  
				  invalid = false;
			 break;
		  }
		  }
		  if(invalid == true && $.fn.validation.defaults.inline){
			  $.fn.validation.invalid(this,message);
		  }else{
		      //$(this).css({'border': $.fn.validation.defaults.baseBorder});
		      $(this).removeClass('validation-invalid');
			  //alert(this.name);
			  $('#'+this.id+'_').remove();
		  }
		  
		})
		if(error == false){
			if(!$.fn.validation.defaults.inline)$($.fn.validation.defaults.errorElement).html($.fn.validation.defaults.oneMessage).fadeIn();
			//alert('Please fill out all the required fields. ');
			return false;
		}else{
			$($.fn.validation.defaults.errorElement).html('').fadeOut();
		}
	})
};
//
$.fn.validation.defaults = {
  baseBorder : '1px solid #052050',
  invalidBorder : '1px solid #ff0000',
  errorMessage : 'This is a required field.',
  justNumberMessage : 'Just numbers please. (No whitespace etc.)',
  checkboxMessage : 'Please pick one of the options',
  errorClass : 'required',
  inline : true,
  oneMessage : 'Please fill out all the required fields.',
  errorElement : '.error',  
  minLength : 10,
  lengthMessage : 'This field needs to be 10 characters.',
  emailMessage : 'Please provide a valid email address.'
  
}

//
//
$.fn.validation.invalid = function(field,message){
	 var id = field.id + '_';
		//$(field).css({'border': $.fn.validation.defaults.invalidBorder});
		$(field).addClass('validation-invalid');
		this.error = false;
		var n = $('*').index($('#'+id));
		if(n==-1){
		  var parent = $(field).parent();	
		  $(parent).after('<p class="' + $.fn.validation.defaults.errorClass + '" id="' + id + '" style="display:none;" >' + message + '</p>');
		  var p = $('#'+id);
		  p.fadeIn("slow");
		  //return false;
		}else{
		  var p = $('#'+id);
		  p.text(message);
		}
}
//
//REQUIRED
$.fn.validation.required = function(field){
	var name = field.name;
	var type = field.type;
	//alert(field.value + "----" + type);
	switch(type){
	  case 'select-one':
	   if(field.selectedIndex==0)return false;
	   else return true;
	  break;
	  case 'text':
	  case 'password':
	  //case 'textarea':
	    if(jQuery.trim(field.value) == ''){
		  return false;
		}else{
		  return true;
		}
	  break;
	  case 'checkbox':
	    var res = false;
		$('input[name='+name+']').each(function(){if(this.checked==true)res =  true});
		return res;
	  break;
	  
	}
	
}
//LENGTH
$.fn.validation.minLength = function(field,l){
	var name = field.name;
	var value = jQuery.trim(field.value);
	if(value.length < parseInt(l)){
		  return false;
	}else{
		return true;
	}
}
//NUMBER
$.fn.validation.number = function(field){
	var name = field.name;
	var value = jQuery.trim(field.value);
	var pattern = /\D/g;
	if(value.match(pattern)!=null){
		  return false;
	}else{
		return true;
	}
}
//EMAIL
$.fn.validation.email = function(field){
	var name = field.name;
	var value = jQuery.trim(field.value);
	var pattern = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i ;
	/*var dot = value.indexOf(".");
	var at = value.indexOf("@");
	if (dot == -1 || at == -1) {
		return false
	}else return true*/
	if(!pattern.test(value)){
		  return false;
	}else{
		return true;
	}
}
//
})(jQuery);

