/* Plugins */

/* PICBox */
(function($){
	$.fn.picture = function(){
		return this.each(function(){
			var $root = $(this);
			var left = '-5000px';
			var top = '-7000px';
			
			$root.bind('mouseenter', function(){
				var $container = $('.pic_container', $root);
				if($container.is('div')){
					var first = $('.pic:first', $container);
					first.css({top: top, left: left});
					var last = $('.pic:last', $container);
					last.css({top: 0, left: 0});
				}				
			});
			
			$root.bind('mouseleave', function(){
				var $container = $('.pic_container', $root);
				if($container.is('div')){
					var first = $('.pic:first', $container);
					first.css({top: 0, left: 0});
					var last = $('.pic:last', $container);
					last.css({top: top, left: left});
				}
			});			
		});
	};
})(jQuery);

/* Lettrine */
(function($){
	$.fn.lettrine = function(options){
		var defaults = {path: '/static/images/lettrine/'};
		var _options = $.extend({}, defaults, options);
		return this.each(function(){
			var $root = $(this);
			var letter = $root.text().substr(0, 1);
			var backgroundImage = 'lettrine_' + letter.toLowerCase() + '.png';
			var html = '<em class="first" style="background: url(' + _options.path + backgroundImage + ') right bottom no-repeat; ">' + letter + '</em>' + $root.html().substr(1, $root.html().length - 1);
			$root.html(html);
		});
	};
})(jQuery);

/* Cleaning des fields INPUT */
(function($){
	$.fn.cleanfield = function(){
		return this.each(function(){
			var $field = $(this);
			$field.data('val', $field.val());
			$field.data('rel', !$field.attr('rel')? 0 : $field.attr('rel'));
			var allowEmpty = (!$field.data('rel').length || $field.data('rel') != $field.data('val'))? true : false;
			$field.bind('focus', function(e){
				var that = $(this);
				that.data('val', that.val());				
				$(this).val('');		
			});
			
			$field.bind('blur', function(e){
				var that = $(this);
				var value = that.data('val');
				if(that.val() != that.data('val') && ($.trim(that.val()) == '' && !allowEmpty)){
					that.val(value);
				}				
			});		
		});	
	};
})(jQuery);

(function($){
	$.fn.setTextareaSize = function(){
		return this.each(function(){
			var $field = $(this);
			if($.browser.msie && $.browser.version < 7){
				var width = $(this).width();
				$(this).css({width: width + 25});
			}
		});
	};
})(jQuery);

/* Custome fields : SELECT */
(function($){
	$.fn.customize = function(options){
		var defaults = {mouseleave: false, fullsize: false};
		var _options = $.extend({}, defaults, options);
		
		/* Construit la liste des pseudo-options */
		function setHtmlList(elt){
			var $select = $(elt);
			var $options = $('option', $select);
			var html = '';
			$options.each(function(i, elt){
				var $option = $(elt);
				var value = $option.attr('value');
				var label = $option.text();
				var selected = ($option.attr('selected'))? true : false;
				html += (selected)? '<li class="selected">' : '<li>';
				html += '<a href="javascript:;" rel="' + value + '"><em>' + label + '</em></a></li>';
			});
			return '<div class="list"><ul>' + html + '</ul></div>';
		};
		
		/* Wrappe le select dans le Html */
		function setHtmlWrapper(elt){
			var $select = $(elt);			
			$select.wrap('<div class="container"></div>');
			var $container = $select.parent('.container');
			var $root = $(document.createElement('div'));
			var $option = $('option[selected]', $select);
			html = '<div class="wrapper"><div class="container">';
			html += $container.html();
			html += '<p>' + $option.text() + '</p>';
			html += '<span class="btn">+</span>';
			html += '</div></div>';
			$root.addClass('cspk_select').html(html);
			$select.replaceWith($root);
			return $root;			
		};
		
		/* Retourne la taille des bordures d'un element (left + right) */
		function getBorderWidth(elt){
			var $ref = $(elt);
			var border = $ref.outerWidth() - $ref.innerWidth();
			return border;
		};
		
		/* Retourne la taille du padding d'un element (left + right) */
		function getPaddingWidth(elt){
			var $ref = $(elt);
			var padding = new Number($ref.css('padding-left').replace('px', '')) + new Number($ref.css('padding-right').replace('px', ''));
			return padding;
		};
		
		/* Ajuste dynamiquement les dimensions du select */
		function setDimensions(base, $container){
			$container.width(base);
			var $wrapper = $('.wrapper', $container);
			$wrapper.width(base);
			var $btn = $('.btn', $container);
			var $input = $('p', $container);
			$input.width(base - (getPaddingWidth($input) + getBorderWidth($input) + $btn.width()));
			var $list = $('.list', $container);
			if(_options.fullsize) $list.width($wrapper.outerWidth() - getBorderWidth($list));
			else $list.width($input.outerWidth() - getBorderWidth($list));		
			var $ul = $('ul', $list);
			$ul.width($list.innerWidth() - (getBorderWidth($ul) + getPaddingWidth($ul)));
			var $li = $('li', $ul);
			var padding = getBorderWidth($ul) + getPaddingWidth($ul) + getPaddingWidth($list) + getBorderWidth($li) + getPaddingWidth($li);
			$li.width($list.innerWidth() - padding);
		};
		
		return this.each(function(){
			var $select = $(this);
			var baseDimension = ($select.width())? $select.outerWidth() : 0;
			var $root = setHtmlWrapper($select);
			if($select.hasClass('fright')) $root.addClass('fright');
			if($select.hasClass('fleft')) $root.addClass('fleft');
			var $select = $('select', $root);
			var $wrapper = $('.wrapper', $root);
			var $container = $('.container', $root);
			var list = setHtmlList($select);
			$wrapper.append(list);
			var $input = $('p', $root);
			$input.data('val', $select.val());
			var $btn = $('span', $root);
			var $list = $('.list', $root);			
			var $options = $('.list li', $root);
			var timeout = null;
			var visible = false;
			
			if (baseDimension > 0) setDimensions(baseDimension, $root);
			
			/* Btn Events */
			$btn.bind('click', function(e){
				(!visible)? showList() : hideList();
			});
			
			/* Input Events */
			$input.bind('click', function(e){
				(!visible)? showList() : hideList();
			}).bind('change', function(e){
				var $that = $(this);
				$select.val($that.data('val'));
				$select.trigger('change');
			});
			
			$select.bind('change', function(){});
			
			/* List items Events */
			$options.bind('click', function(e){
				var $option = $(this);
				(!visible)? showList() : hideList();
				if($option.hasClass('selected')) return;
				$('.selected', $list).removeClass('selected');
				tiggerHandler($option);
			});			
			
			/* Root Events */
			$root.bind('mouseleave', function(e){
				if(_options.mouseleave) hideList();
				else $(document).bind('click', hideList);				
			}).bind('mouseenter', function(e){
				$(document).unbind('click', hideList);
			}).bind('mouseover', function(){
				$(document).unbind('click', hideList);
			}).bind('mouseout', function(){
				$(document).bind('click', hideList);
			});
			
			/* Affiche la liste */
			var showList = function(){
				$list.css({display: 'block'});
				visible = true;
			};	
			
			/* Masque la liste */
			var hideList = function(){
				$list.css({display: 'none'});
				visible = false;
			};			
			
			/* Actions : plugin change handler */
			var tiggerHandler = function($elt){
				var $link = $('a', $elt);
				var value = $link.attr('rel');
				var text = $('em', $link).text();				
				$elt.addClass('selected');				
				$input.text(text).data('val', value);
				$input.trigger('change');
				return this;
			};			
			return this;
		});	
	};	
})(jQuery);






