(function($){

  function isDigit (c)
           {return ((c >= "0") && (c <= "9"));}

  function isValidDigit (s)
    {
    	for (var i = 0; i < s.length; i++){
    		var c = s.charAt(i);
            if (!isDigit(c)) 
            	return false;
        }
                return true;
    }	
	
  function checkMail(str){
  	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
  	if (filter.test(str))
  	{
     	return true;
  	}
    else
    {  
 		return false;
    }
} 
	
 $.fn.validate = function(options) {
      
  var radios = this.filter(":radio");
  var checkbox = this.filter(":checkbox");
  var campos = this.not(":image,:submit,:radio,:checkbox,:hidden");   
  var form = campos.eq(0).parents("form");  
      
  var settings = jQuery.extend({
     num: $().eq(-1),
     email: $().eq(-1),
     movistar: $().eq(-1),
     usarTitle: true,
     classError : "error"     
  }, options);
    
  
  if (!settings.movistar[0])
  {
  	settings.num = settings.num.add(settings.movistar.area).add(settings.movistar.local);
  }
  else
  {
  	$.each(settings.movistar, function(){
  		settings.num = settings.num.add(this.area).add(this.local);
  	});  	
  }   
        
  	  	
  form.submit(function(){
  	
  	var flag = true;
  	
    campos.each(function() {
    	
		if (!$(this).val())
		{
			$(this).addClass(settings.classError);
			flag = false;
		}
		else
		{										
			$(this).removeClass(settings.classError);			
		}
		
    });
    
    radios.each(function(){
    		
		var name = this.name;
		if (!$(":radio[name='"+name+"']:checked").length)
		{
			$(this).addClass(settings.classError);
			flag = false;
		}
		else
		{
			$(this).removeClass(settings.classError);
		}
		
    });
    
    checkbox.each(function(){
    		
		var name = this.name;
		if (!$(this).is(":checked"))
		{
			$(this).addClass(settings.classError);			
			flag = false;
		}
		else
		{
			$(this).removeClass(settings.classError);
		}
		
    });
    
    
    if (!flag)
    {    	
    	var input = campos.add(radios).add(checkbox).filter("." + settings.classError).get(0);    	
    	$(input).focus();
    	if ($(input).attr("title") && settings.usarTitle)
    	{
    		alert($(input).attr("title"));    		
    	}
    	else
    	{    		
	    		if (input.type == "radio")
	    		{
	    			alert("Por favor seleccione la opción");
	    		}
	    		else
	    		{
	    			alert("Por favor complete los campos que faltan.");
	    		}    		
    	}
    }
    else
    {	    	    	        	    	
    	campos.each(function() {
    		
    	if ($.inArray(this, settings.email.get()) > -1)
			{
				if(!checkMail(this.value))
				{
					$(this).addClass(settings.classError);
					flag = false;
					alert("Please enter a valid email address");
					this.focus();
					this.select();
					return false;					
				}
			}
			else if ($.inArray(this,settings.num.get()) > -1)
			{
				if (!isValidDigit(this.value))
				{
					$(this).addClass(settings.classError);
					flag = false;
					alert("Please enter a valid number");
					this.focus();
					this.select();
					return false;
				}
			}			
    	});
    	
    	if (flag) {
    		
	    	campos.each(function(){
	    		
	    		var obj = this;
	    		var unico = true;
	    		var movIndex = -1;
	    		
	    		if (settings.movistar[0] == null)
	    		{
	    			try {	    			
	    			movIndex = $.inArray(this,settings.movistar.area.get());
	    			}
	    			catch (e) {};	    			
	    		}
	    		else
	    		{	    			
	    			unico = false;	    			
	    			$.each(settings.movistar, function(i,val){	    				
	    				movIndex = $.inArray(obj, settings.movistar[i].area.get());
	    				arrIndex = i;	    				
	    				return movIndex == -1;	    					
	    			});	    				    				    				    				    				    		
	   			}
	    		
	    		
				if (movIndex > -1)
				{
					var area = this.value;
					if (unico)
					{						
						objMovistar = settings.movistar;
					}
					else
					{
						objMovistar = settings.movistar[arrIndex];
					}
					var local = objMovistar.local.val();
					var numero = area + local;
					if (numero.length != 10)
					{
						alert("El número movistar debe ser de 10 cifras.");
						flag = false;
						$(this).add(objMovistar.local).addClass(settings.classError).select();					
						return false;
					}
				}
	    		
	    	});
    	}
			
   }       
    return flag;
    
  }); 
    
 };
 
})(jQuery);

