/**
 * IE8 CORRECTION
 */
if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(obj, start) {
		for (var i = (start || 0), j = this.length; i < j; i++) {
			if (this[i] === obj) { return i; }
		}
		return -1;
	}
}

(function($j){
	
	/**
	 * CONFIRM
	 */
	$j.fn.confirm = function () {
		this.click(function(){
			if (!window.confirm($j(this).attr('title'))) {
				return false;
			}
		});
	};
	
	/**
	 * DELETE DEFAULT VALUE ON FOCUS
	 */
	$j.fn.deleteDefaultValueOnFocus = function () {
		
		this.each(function(index){
						   
			var inputField 		= $j(this);		
			var defaultValue 	= inputField.val();
		
			inputField.focus(function(){
				var myInput = $j(this);
				if (myInput.val() == defaultValue) {
					myInput.val('');
				}
			});
			
			inputField.blur(function(){
				var myInput = $j(this);
				if (myInput.val() == '') {
					myInput.val(defaultValue);
				}
			});
			
			inputField.parents('form:first').submit( {'inputField': inputField, 'defaultValue' : defaultValue}, function(event){
				if($j(event.data.inputField).val() == event.data.defaultValue){
					$j(event.data.inputField).val('');
				}
			});
			
		});	
	};
	
	/**
	 * SIMPLE ANTI SPAM : INPUT formMode true/false
	 */
	
	$j.fn.simpleAntiSpam = function (options) {
		var settings = {
			formName: ''
		};
		
		if (options) $j.extend(settings, options);
		
		this.filter('input').focus(function(){
			$j('input[name=' + settings.formName + 'Mode]').val('true');
		});
		
		return this;
	};
	
	/**
	 * DPE Diagramme de déperdition d'énergie
	 */
	
	$j.fn.dpe = function (options) {
		var settings = {
			imagePath: 			'/images/fr/dpe/',
			imageName: 			'dpe_$.png',
			imageWidth: 		270,
			imageHeight: 		270,
			imageMinimumSize: 	180,
			spanTextSize: 		18,
			spanColor: 			'#fff',
			spanFirstTop: 		45,
			spanLastTop: 		187,
			spanLeft: 			228
		};
		
		if (options) $j.extend(settings, options);
		
		this.each(function(){
			var dpeGraph = $j(this);
			var dpeValue = parseInt(dpeGraph.html());
			
			if (!isNaN(dpeValue)) {
				dpeGraph.html('');
				
				var dpeLetter;
				var dpeSpanTop;
				var spanStepHeight = (settings.spanLastTop - settings.spanFirstTop) / 5;
				switch (true) {
					case (dpeValue <= 50):
						dpeLetter = 'a';
						dpeSpanTop = settings.spanFirstTop;
						break;
					case (51 <= dpeValue && dpeValue <= 90):
						dpeLetter = 'b';
						dpeSpanTop = settings.spanFirstTop + (1 * spanStepHeight);
						break;
					case (91 <= dpeValue && dpeValue <= 150):
						dpeLetter = 'c';
						dpeSpanTop = settings.spanFirstTop + (2 * spanStepHeight);
						break;
					case (151 <= dpeValue && dpeValue <= 230):
						dpeLetter = 'd';
						dpeSpanTop = settings.spanFirstTop + (3 * spanStepHeight);
						break;
					case (231 <= dpeValue && dpeValue <= 330):
						dpeLetter = 'e';
						dpeSpanTop = settings.spanFirstTop + (4 * spanStepHeight);
						break;
					case (331 <= dpeValue && dpeValue <= 450):
						dpeLetter = 'f';
						dpeSpanTop = settings.spanFirstTop + (5 * spanStepHeight);
						break;
					case (dpeValue >= 451):
						dpeLetter = 'g';
						dpeSpanTop = settings.spanFirstTop + (6 * spanStepHeight);
						break;
				}
				
				var imageURL 	= settings.imagePath + settings.imageName.replace('$', dpeLetter);
				var imageWidth 	= Math.round(dpeGraph.width() ? dpeGraph.width() : dpeGraph.width(settings.imageMinimumSize).width());
				var imageHeight = imageWidth;
				
				var spanFontSize 	= Math.round((settings.spanTextSize * imageHeight) / settings.imageHeight);
				var spanTop 		= Math.round((dpeSpanTop * imageHeight) / settings.imageHeight);
				var spanLeft 		= Math.round((settings.spanLeft * imageWidth) / settings.imageWidth);
				
				dpeGraph
					.css('position', 'relative')
					.append('<img src="' + imageURL + '" alt="' + dpeValue + '" title="' + dpeValue + '" width="' + imageWidth + '" height="' + imageHeight + '" />')
					.append('<span>' + dpeValue + '</span>')
					.find('span')
					.css('font-family', 'Arial, sans-serif')
					.css('font-size', spanFontSize)
					.css('color', settings.spanColor)
					.css('position', 'absolute')
					.css('top', spanTop)
					.css('left', spanLeft);
			}
			else {
				dpeGraph.html(dpeValue);
			}
		});
		
		return this;
	};
	
	/**
	* CREATE A ROLL OVER ON IMAGES
	*/
	$j.fn.rollOver = function (options) {
		var settings = {
			suffixe: '_over'
		};
		
		if(options) $j.extend(settings, options);
		
		var images = this.filter('img');
		
		images.each(function(index){
		   var image = $j(this);
		   var fileName 					= image.attr('src');
		   var fileNameWithoutExtension 	= fileName.substring(0, fileName.lastIndexOf('.'));
		   var fileExtension 				= fileName.substring(fileName.lastIndexOf('.'), fileName.length);
		   
		   var imgSrc 						= fileName;
		   var imgSrcOver 					= fileNameWithoutExtension + settings.suffixe + fileExtension;
		   
		   image.mouseover(function(){
				$j(this).attr('src', imgSrcOver);
		   });
		   image.mouseout(function(){
				$j(this).attr('src', imgSrc);
		   });
		});
		
		return this;
	};
	
	/**
	 * INIT RADIO BOX WITH VALUE
	 */
	$j.fn.initRadioValue = function (myValue) {
		var radioInput = this.filter('input[type=radio]');
		
		radioInput.each(function(index){
			var radioInput = $j(this);
			if (radioInput.val() == myValue) {
				radioInput.attr('checked', 'checked');
			}
		});
	};
	
	/**
	 * INIT SELECT BOX WITH VALUE
	 */
	$j.fn.initSelectValue = function (myValue) {
		var mySelects = this.filter('select');
		
		mySelects.each(function(index){
			var mySelect = $j(this);
			
			mySelect.find('option').each(function(index){
				var myOption = $j(this);
				if (myOption.val() == myValue) {
					myOption.attr('selected', 'selected');
				}
			});
		});
	};
	
	/**
	 * INIT CHECKBOX WITH VALUE
	 */
	$j.fn.initCheckboxValue = function (myValue) {
		var checkboxesInput = this.filter('input[type=checkbox]');
		
		checkboxesInput.each(function(index){
			var checkboxInput = $j(this);
			switch (true) {
				case (myValue === true):
				case (myValue === 'true'):
				case (parseInt(myValue, 10) === 1):
					checkboxInput.attr('checked', 'checked');
					break;
			}
		});
	};
	
	/**
	 * ACCORDION COMPONENT
	 */
	$j.fn.wfAccordion = function (options) {
	
		this.options = {
			defaulLayerNumber 		: -1,
			cssSelectorButtonNav	: '.accordionToggle',
			cssSelectorLayerNav 	: '.accordionContent',
			cssClassButtonHover		: 'selected',
			toggleChangeEvent		: 'click',
			numToggleOpen			: -1,
			initDone				: false
		};
		
		this.init = function(options) {
			
			var self = this; // To set as a context on sub
			
			this.options = $j.extend({}, this.options, options);
			
			$j(this).find(this.options.cssSelectorLayerNav).hide();
			
			/**
			 * Numbering of toggle and content elements
			 */		
			$j(this).find(this.options.cssSelectorButtonNav).each(function(index){ 
				$j(this).data('num', index);
				if($j(this).hasClass(self.options.cssClassButtonHover) && self.options.defaulLayerNumber == -1){
					self.options.defaulLayerNumber = index;
				}
			});		
			$j(this).find(this.options.cssSelectorLayerNav).each(function(index){
				$j(this).data('num', index);
			});
			
			/**
			 * toggle change event
			 */
			$j(this).find(this.options.cssSelectorButtonNav).live(this.options.toggleChangeEvent, {self : self}, function(event){
				event.data.self.selectToggle(this);
			});
			
			this.selectToggleByNumber(this.options.defaulLayerNumber);
			this.options.initDone = true;
		}
		
		/**
		 * Change selected toggle
		 */
		this.selectToggle = function(currentToggleButton) {

			this.closeAllToggle();
			
			var self = this;
			$j(this).find(this.options.cssSelectorLayerNav).each(function(){
				
				if($j(currentToggleButton).data('num') == $j(this).data('num')){
					if(self.options.numToggleOpen != $j(currentToggleButton).data('num')){
						
						if(!self.options.initDone){
							$j(this).show();
						}else{
							$j(this).slideDown();
						}

						
						self.options.numToggleOpen = $j(currentToggleButton).data('num');
					}else{
						self.closeAllToggle();
						self.options.numToggleOpen = -1;
					}					
				}
			});
		}
		
		/**
		 * Change selected toggle by number
		 */
		this.selectToggleByNumber = function(num){
			var self = this;
			$j(this).find(this.options.cssSelectorButtonNav).each(function(){
				if(num == $j(this).data('num')){
					self.selectToggle(this);
				}
			});
		}
		
		this.closeAllToggle = function(){
			$j(this).find(this.options.cssSelectorButtonNav).removeClass(this.options.cssClassButtonHover);		
			$j(this).find(this.options.cssSelectorLayerNav).slideUp();
		}
		
		/**
		 * Launch init
		 */
		this.init(options);
		/**/
	};
	
	/**
	 * Fade in on backgroundImage
	 */
	 $j.fn.smartBackgroundImage = function(url){
		  var t = this;
		  //create an img so the browser will download the image:
		  $('<img />')
		    .attr('src', url)
		    .load(function(){ //attach onload to set background-image
		       t.each(function(){ 
		          $(this).css('backgroundImage', 'url('+url+')' );
		       });
		    });
		   return this;
		 }


})(jQuery);



