/*!
 * Validerings plugin v.1
 * http://www.kaas.se
 *
 * Copyright 2011, Jonas Kaas
 */


(function( $ ){

/**
 * **********************************************************************
 *
 *   Input validering
 *  ------------------------
 *
 *  >> Validerar ett vanligt inputfält, alla tecken tillåtna så länge
 *     fältet inte är tomt
 *
 *  $error = 'om input är tom'
 *
 * **********************************************************************
 */
 
  $.fn.validateInput = function( errorText ) {  
    
    var $this = $(this);
    
    if($this.val().length < 1)
		{  
			if(!$this.hasClass('error'))
			{
       $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			}
			return false;
		}
				
		else
		{
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});
			return true;
		}
  };
  
  
/**
 * **********************************************************************
 *
 *   Text validering
 *  ------------------------
 *
 *  >> Kontrollerar så att inputfältet enbart innehåller text
 *
 *  $error   = ' om input är tom '
 *  $error2  = ' om input inte är text '
 *
 * **********************************************************************
 */
 
  $.fn.validateText = function( errorText, errorText2 ) {  
    
    var textReg = /^[ A-Za-zåäöÅÄÖ]+$/;
    var $this = $(this);
    
    if($this.val().length < 1)
		{  

			if(!$this.hasClass('error'))
			{
       $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			}
			
			else if($this.siblings('span.errorText').text() !== errorText)
			{
			 $this.siblings('span.errorText').text(errorText).change(); 
			}
			
			return false;
		}
		
		else if(!textReg.test($this.val()))
		{  
			if(!$this.hasClass('error'))
			{
			  //Lägger till klassen error 
  			$this.addClass("error");	
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText2 + '</span>').children(':last').hide().fadeIn('fast');
			}
				
			else if($this.siblings('span.errorText').text() !== errorText2)
			{ 
		    $this.siblings('span.errorText').text(errorText2).change(); 
			}
			return false;

		}
		
		else
		{
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});
			return true;
		}
  };
  
  
/**
 * **********************************************************************
 *
 *   Validering för Telefonnummer
 *  ------------------------------
 *
 *  >> Kontrollerar så att inputfältet innehåller telefonnummer
 *  >> - + är tillåtna
 *
 *  $error   = ' om input är tom '
 *  $error2  = ' om input inte är numerisk '
 *  $error3  = ' om input är kortare än 8 tecken '
 *
 *  FÖRSLAG >> Lägg till en begränsning på längd till 15
 *  
 * **********************************************************************
 */
 
  $.fn.validatePhone = function( errorText, errorText2, errorText3 ) {  
    
    var numberReg = /^[+0-9 -]+$/;
    var $this = $(this);
    
    if($this.val().length < 1)
		{ 

			if(!$this.hasClass('error'))
			{
			 $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			}
			
			else if($this.siblings('span.errorText').text() !== errorText)
			{
			 $this.siblings('span.errorText').text(errorText).change(); 
			}
			return false;
		}

		else if(!numberReg.test($this.val()))
		{ 
			
			if(!$this.hasClass('error'))
			{
  			$this.addClass("error");	
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText2 + '</span>').children(':last').hide().fadeIn('fast');
			}
				
			else if($this.siblings('span.errorText').text() !== errorText2)
			{ 
		    $this.siblings('span.errorText').text(errorText2).change(); 
			}
			return false;
		}
		
		else if($this.val().length < 8)
		{ 
		 
		  if(!$this.hasClass('error'))
			{
        //Lägger till klassen error 
  			$this.addClass("error");
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText3 + '</span>').children(':last').hide().fadeIn('fast');
			}
				
			else if($this.siblings('span.errorText').text() !== errorText3)
			{
		    $this.siblings('span.errorText').text(errorText3).change(); 
			}
			return false;	
		}
		
		else
		{
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});
			return true;
		}
  };
  
/**
 * **********************************************************************
 *
 *   Nummer validering
 *  ------------------------------
 *
 *  >> Kontrollerar så att inputfältet enbart innehåller siffror
 *
 *  $error   = ' om input är tom '
 *  $error2  = ' om input inte är numerisk '
 *  $error3  = ' om input är kortare än 8 tecken '
 *
 *  
 * **********************************************************************
 */
 
  $.fn.validateNumeric = function( errorText, errorText2 ) {  
    
    var numberReg = /^[0-9 ]+$/;
    var $this = $(this);
    
    if($this.val().length < 1)
		{  			
			if(!$this.hasClass('error'))
			{
  		  $this.addClass("error");
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			}
			return false;
		}

		else if(!numberReg.test($this.val()))
		{ 		
			if(!$this.hasClass('error'))
			{
  			$this.addClass("error");	
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText2 + '</span>').children(':last').hide().fadeIn('fast');
			}
				
			else if($this.siblings('span.errorText').text() !== errorText2)
			{ 
		    $this.siblings('span.errorText').text(errorText2).change(); 
			}
			return false;
		}	
		
		else
		{
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});
			return true;
		}
  };
  
  
/**
 * **********************************************************************
 *
 *   Validerar epost
 *  ------------------------------
 *
 *  >> Kontrollerar så att inputfältet innehåller en epostadress
 *
 *  $error   = ' om input är tom '
 *  $error2  = ' inte epost struktur på input '
 *
 *  
 * **********************************************************************
 */
 
  $.fn.validateEmail = function( errorText, errorText2 ) {  
 
 	  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
    var $this = $(this);   

    if($this.val().length < 1) 
    {
      //Kollar så att span med classen error inte redan finns
			if(!$this.hasClass('error'))
			{
       $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			} 
			//Kollar om texten i span är annat än errorText
			else if($this.siblings('span.errorText').text() !== errorText)
			{
			 $this.siblings('span.errorText').text(errorText).change();    
			}	
      return false;
    } 
        
    else if (!emailReg.test($this.val()))
    { 
      //Kollar så att span med classen error inte redan finns
			if(!$this.hasClass('error'))
			{
       $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText2 + '</span>').children(':last').hide().fadeIn('fast');
			} 
			//Kollar om texten i span är annat än errorText
			else if($this.siblings('span.errorText').text() !== errorText2)
			{
			 $this.siblings('span.errorText').text(errorText2).change();    
			}	
      return false;
    }
 
    else
    { 
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});
			return true;
    }
  };
 
 
  
/**
 * **********************************************************************
 *
 *   Validerar Meddelande
 *  ------------------------------
 *
 *  >> Kontrollerar så att inputfältet innehåller en epostadress
 *
 *  $error       = ' om input är tom '
 *  $error2      = ' om meddelande inte är minst lika långt som $errorLength'
 *  $errorLength = ' Minsta längd på meddelandet '
 *  
 * **********************************************************************
 */
 
  $.fn.validateMessage = function( errorText, errorText2, errorLength ) {  
    
    var $this = $(this);
    
    if($this.val().length < 1)
		{ 
			if(!$this.hasClass('error'))
			{
			  $this.addClass("error");
		    $this.parent().addClass('errorField').append('<span class="errorText">' + errorText + '</span>').children(':last').hide().fadeIn('fast');
			}
			else if($this.siblings('span.errorText').text() !== errorText)
			{
		    $this.siblings('span.errorText').text(errorText).change();    
			}	
			return false;
			
		}
		
		else if($this.val().length < errorLength)
		{
			if(!$this.hasClass('error'))
			{
       $this.addClass("error");
			 $this.parent().addClass('errorField').append('<span class="errorText">' + errorText2 + '</span>').children(':last').hide().fadeIn('fast');
			} 

			else if($this.siblings('span.errorText').text() !== errorText2)
			{
			 $this.siblings('span.errorText').text(errorText2).change();    
			}	
      return false;  
		}
		
		else
		{
			$this.removeClass("error");
			$this.siblings('span.errorText').fadeOut('normal', function(){
		    $this.siblings('span.errorText').remove();
			});

			return true;
		}
  };
  
})(jQuery);
