(function($) {

/* ------------------------------------------------------------------
   Load Function ---------------------------------------------------- */   
    $.fn.loadFct = function () {
        
        //Search Fields
		$("#frm_search").each(function(){
			var title = $("label", this).text();
			$("#s", this)
				.bind("focus",function(){ if($.trim(this.value)==title){ this.value = ""; } })
				.bind("blur",function(){ if($.trim(this.value)==""){ this.value = title; } })
				.val(title);
		});
	
		// Log the share in Google Analytics
		if(undefined!==window.pageTracker) {
			$("#utilities")
			.bind("click.tracking", function(e){
				  var $share = $(e.target);
				  if($share.parent().attr("class") == 'b_fb' || $share.parent().attr("class") == 'b_twitter') {
					  pageTracker._trackPageview('/share/'+encodeURI($share.attr("title")));
				  }
			});
		}		
		
		//External Link
        $().externalLinks();

        //Contact Form Validation
        $("#frm_contact, #frm_comment")
			.each(function(){
			/*  -----------------------------------------------------------------------
				Adding a counter to textarea ------------------------------------------ */
				var counter =  3000;
				var maxCharaters = ' (<span id="max">'+ counter +' caract&egrave;res max</span>)';
				$('#comment', this)
					.prev().append(maxCharaters)
					.end()
					.keyup(function() { limitChars ($(this), counter)});
			})
			.submit(function () {
				if($(this).isValid()){
					return true;
				}else{
					return false;
				}
			});
        
		var $col_right = $("#col_right");
		$col_right
			.each(function(){
				if(window.location.hash == "#comments" || window.location.hash.match("#comment") != null){
					$col_right.removeClass("closed");
				}else{
					$col_right.addClass("closed");
				}
			})
			.find("#comments > .title")
			.append('<a href="javascript:;" id="b_toggleComments"></a>')
			.find("#b_toggleComments")
			.each(function(){ $(this).html($col_right.hasClass("closed") ? 'Ouvrir' : 'Fermer') })
			.bind("click", function(){
				if($col_right.hasClass("closed")){
					$col_right.removeClass("closed");
					$(this).html("Fermer");
				}else{
					$col_right.addClass("closed");
					$(this).html("Ouvrir");
				}
			});
    
        return this;
    };
    
    /*  ------------------------------------------------------------------
        External Link ---------------------------------------------------- */
        $.extend($.expr[':'],{
            external: function(a,i,m) {
                if(!a.href) {return false;}
                return $(a).is('[rel*="external"]');
            }
        });
        
        $.fn.externalLinks = function() {
            return this.each( function() {
                $("a:not('[class*='ignore']')", this)
                    .filter(function(){
                        if($(this).is(":external")){
                            return true;
                        }else{
                            return $(this).is("[href^='http://']:not([href*='"+location.hostname+"'])");
                        }
                })
                .bind("click", function(){
                    if(undefined!==window.pageTracker){ 
                        pageTracker._trackPageview('/external/'+this.href);
                    }
                    return !window.open(this.href);
                });
            });
        };
	
	/*  -----------------------------------------------------------------------
        Validate Functions ---------------------------------------------------- */
                
        //Regular Expression
        var reg_email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,5})+$/i;
        var reg_phone = /^((1)?(\s)?(\+)?(\s)?(\()?\d{3}(\))?\s?-?\d{3}\s?-?\d{4}((\s)+(ext|x|extension|#)?(\s)?(\d)+)?)?$/i;
        
        //Validate Function
        $.fn.isValid = function() {
            $form  = $(this);
            var rulesCache = {};
            var elements = $form
            .find(":text, textarea")
            .filter(function() {
                if ( this.name in rulesCache )
                    return false;
                
                rulesCache[this.name] = true;
                return true;
            });
            
            // Reset the validation
            var error=0;
            $(".error").removeClass('error');
            
                // Validate the form
                $(elements).filter(".v-mandatory").each( function(){
                    if($.trim($(this).val()) == ''){ error++; $("label[for=" + this.id + "]").addClass("error"); }
                });
                $(elements).filter(".v-email").each( function(){
                    if(!checkRegExp($(this).val(), reg_email)){ error++; $("label[for=" + this.id + "]").addClass("error"); }
                });
                $(elements).filter(".v-phone").each( function(){
                    if(!checkRegExp($(this).val(), reg_phone)){ error++; $("label[for=" + this.id + "]").addClass("error"); }
                });
				
				//Validate captcha
				//if( !validateCaptcha() ) { error++; }
            
            return error == 0 ? true : false;
            
        };
        
        function checkRegExp(value, pattern){
            objRegExp = new RegExp(pattern);
            return objRegExp.test(value);
        };
		
		function validateCaptcha(){
			challengeField = $("input#recaptcha_challenge_field").val();
			responseField = $("input#recaptcha_response_field").val();
			
			var html = $.ajax({
				type: "POST",
				url: "/wp-content/plugins/wp-recaptcha/recaptcha.php",
				data: { recaptcha_challenge_field: challengeField, REMOTE_ADDR: '192.168.1.2', recaptcha_response_field: responseField },
				async: false
				}).responseText;
			
			if(html == "success") { return true; }
			else {
				$(".recaptcha_input_area_text"," #recaptcha_area").addClass("error");
				Recaptcha.reload();
				return false;
			}
		}
		
		function limitChars(elm, limit){
            var $max = elm.prev().find("#max");
			var text = elm.val(); 
			var textlength = text.length;
			if (textlength > limit) {
				elm.val(text.substr(0, limit));
				return false;
			}
			else {
				$max.html('Il vous reste '+ (limit - textlength) +' caract&egrave;res.')
				return true;
			}
        };
		
      
   })(jQuery);
