$(function()
{
	// decode.js compile
	$(".encoded").each(function(){var b=$(this).data('content'),d="",f,e,h,c,g,a=0;for(b=b.replace(/[^A-Za-z0-9\+\/\=]/g,"");a<b.length;){f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(a++));e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(a++));c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(a++));g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(b.charAt(a++)); f=f<<2|e>>4;e=(e&15)<<4|c>>2;h=(c&3)<<6|g;d+=String.fromCharCode(f);if(c!=64)d+=String.fromCharCode(e);if(g!=64)d+=String.fromCharCode(h)}b="";for(c=c1=c2=a=0;a<d.length;){c=d.charCodeAt(a);if(c<128){b+=String.fromCharCode(c);a++}else if(c>191&&c<224){c2=d.charCodeAt(a+1);b+=String.fromCharCode((c&31)<<6|c2&63);a+=2}else{c2=d.charCodeAt(a+1);c3=d.charCodeAt(a+2);b+=String.fromCharCode((c&15)<<12|(c2&63)<<6|c3&63);a+=3}}$(this).replaceWith(b)});

	// © http://plugins.jquery.com/project/Cookie
	jQuery.cookie=function(e,b,a){if(arguments.length>1&&String(b)!=="[object Object]"){a=jQuery.extend({},a);if(b===null||b===undefined)a.a=-1;if(typeof a.a==="number"){var d=a.a,c=a.a=new Date;c.setDate(c.getDate()+d)}b=String(b);return document.cookie=[encodeURIComponent(e),"=",a.b?b:encodeURIComponent(b),a.a?"; expires="+a.a.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.c?"; secure":""].join("")}a=b||{};c=a.b?function(f){return f}:decodeURIComponent;return(d=RegExp("(?:^|; )"+ encodeURIComponent(e)+"=([^;]*)").exec(document.cookie))?c(d[1]):null};


	/*!
	 * Tous nos lien spéciaux... (confirmation, soumission avec méthode et CSRF, chargement AJAX)
	 */
	$( "a[data-confirm], button[data-confirm], a[data-method], a[data-load]").live('click.toolkit', function( evt, confirmed )
	{
		// L'élément cliqué...
		var $elt = $(this);

		// Dois-je être confirmé ?
		var confirm = $elt.data('confirm');
		if ( confirm && !confirmed )
		{
			// on bloque immédiatement le comportement du navigateur
			evt.stopImmediatePropagation();
			evt.preventDefault();

			// Si jQuery-UI n'est pas chargé, il va falloir le faire en asynchrnoe
			if ( !$.ui )
			{
				// chargement JS
				var ui  = document.createElement('script');
				ui.type = 'text/javascript';
				ui.src  = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js';

				// chargement CSS
				var css  = document.createElement('link');
				css.type = 'text/css';
				css.rel  = 'stylesheet';
				css.href = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css';

				// quand le JS est chargé, on relance le click
				ui.onload = function() { $elt.trigger('click'); };

				// On charge (CSS en premier pour avoir l'évènement onload en dernier)
				var s = document.getElementsByTagName('script')[0];
				s.parentNode.insertBefore(css, s);
				s.parentNode.insertBefore(ui, s);

				return false; // et on sort
			}

			// Création de la fenêtre de confirmation
			var $confirm = (confirm.charAt(0) == '#')
			? $( confirm ) // si data-confirm="#element_id" alors notre confirmation sera l'élément pointé
			: $("<div>").html( '<p>' + confirm + '</p>' ); // sinon, un simple texte

			$confirm.dialog({
				modal: true
				,title: $confirm.data('title') ? $confirm.data('title') : 'Confirmation'
				,buttons: {
					"Annuler": function()
					{
						$confirm.dialog('close');
						if ( confirm.charAt(0) != "#" ) $confirm.dialog('destroy').remove();
					}
					,"Confirmer": function()
					{
						$confirm.dialog('close');
						if ( confirm.charAt(0) != "#" ) $confirm.dialog('destroy').remove();

						// ok, on envoi le clic avec la confirmation enregistrée !
						$elt.trigger( 'click', [true] );
					}
				}
			});

			// fin de la confirmation
			return false;
		}

		// je suis un lien AJAX ?
		var load = $( $elt.data('load') );
		if ( load.length )
		{
			// on bloque immédiatement le comportement du navigateur
			evt.stopImmediatePropagation();
			evt.preventDefault();

			var data = $elt.data('method')
				? $.extend( { sf_method: $elt.data('method'), _csrf_token: $("meta[name=csrf]").attr('content') }, $elt.data('params') )
				: undefined;

			load.trigger('loading',[this])
			$.get( $elt.attr('href'), data, function( html ) { load.html( html ) })
				.success( function() { load.trigger('success', [this]) } )
				.error(   function() { load.trigger('error',   [this]) } )
				.complete(function() { load.trigger('complete',[this]) } )

			return false;
		}


		// Dois-je soumettre avec une méthode particulière ?
		var method = $elt.data('method');
		if ( method )
		{
			// on bloque immédiatement le comportement du navigateur
			evt.stopImmediatePropagation();
			evt.preventDefault();

			var csrf = $("meta[name=csrf]").attr('content');
			if ( !csrf ) throw '<meta name="csrf" content="<?=csrf()?>"/>';

			var form = $('<form/>')
				.attr( 'action', $elt.attr('href') )
				.attr( 'method', 'post' )
				.append( $('<input/>').attr('type','hidden').attr('name','sf_method').val( method ) )
				.append( $('<input/>').attr('type','hidden').attr('name','_csrf_token').val( csrf ) );

			var params = $elt.data('params');
			if ( params )
			{
				$.each( params, function( name, value )
				{
					form.append( $('<input/>').attr('type','hidden').attr('name',name).val( value ) );
				});
			}
			form.appendTo('body').submit();
			return false;
		}


		// si nous arrivons ici, il y'a une forte chance pour que :
		if ( $elt.is('a[data-confirm]') )
		{
			document.location.href = $elt.attr('href');
		}


		return true;
	});



	/*!
	 * Date picker
	 */
	if ( $.datepicker )
	{
		$.datepicker.regional['fr'] = {
			closeText: 'Fermer'
			,prevText: '&#x3c;Préc'
			,nextText: 'Suiv&#x3e;'
			,currentText: 'Courant'
			,monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre']
			,monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc']
			,dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi']
			,dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam']
			,dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa']
			,weekHeader: 'Sm'
			,dateFormat: 'dd/mm/yy'
			,firstDay: 1
			,isRTL: false
			,showMonthAfterYear: false
			,yearSuffix: ''

			,duration: 'fast'
			,changeMonth: true
			,changeYear: true
		};

		$.datepicker.setDefaults( $.datepicker.regional['fr'] );

		$("input:text[data-datepicker]").live('click.toolkit focus.toolkit', function()
		{
			if ( !$(this).hasClass('hasDatepicker') )
			{
				$(this).datepicker( $(this).data('datepicker') );
			}
		});
	}



	// CkEditor
	if ( window.CKEDITOR ) // vérifie que ckeditor est chargé
	{
		var ckeditor_default_config = {
			language: 'fr'
			,docType: '<!DOCTYPE html>'
			,entities: false
			,entities_latin: false
// 			,forcePasteAsPlainText: true
			,ignoreEmptyParagraph: true
			,resize_dir: 'vertical'
			,shiftEnterMode: CKEDITOR.ENTER_P
			,toolbar: [
				['Bold','Italic','Underline','Strike']
				,['Subscript','Superscript']
				,['NumberedList','BulletedList','Outdent','Indent','Blockquote','HorizontalRule']
				,['Link','Unlink']
				,['Undo','Redo','SpecialChar','RemoveFormat']
				//~ ,['Font','FontSize','TextColor']
			]
			,toolbarCanCollapse: false
		};

		CKEDITOR.on( 'dialogDefinition', function( ev )
		{
			var dialogName = ev.data.name;
			var dialogDefinition = ev.data.definition;

			if ( dialogName == 'link' )
			{
				dialogDefinition.removeContents( 'target' );
				dialogDefinition.removeContents( 'advanced' );
			}
			if ( dialogName == 'image' )
			{
				dialogDefinition.removeContents( 'advanced' );
			}
		});

		$("textarea[data-ckeditor]").one('focus.ckeditor',function()
		{
			var config = $(this).data('ckeditor');
			config = $.isPlainObject( config ) ? $.extend( ckeditor_default_config, config ) : ckeditor_default_config;
			if ( !config.width ) config.width = $(this).width();
			if ( !config.height ) config.height = $(this).height();

			$(this).ckeditor( function() { this.focus(); }, config );
		}).filter(':not(:empty)').trigger('focus.ckeditor');
	}


	// autofocus
	$("input[autofocus],textarea[autofocus],select[autofocus]").filter(function()
	{
		return !$(this).val();
	}).eq(0).focus();



	// IE ne sais pas soumettre un formulaire avec un bouton type=submit
	if ( $.browser.msie )
	{
		$("form button[type=submit]").live( 'click', function(evt)
		{
			if ( !this.attributes['value'] ) return true;
			evt.preventDefault();

			var form = $(this).closest('form');

			// le bouton envoi-t-il des valeurs ?
			var name = $(this).attr('name');
			var value = this.attributes['value'];

			if ( value && name && value.nodeValue )
			{
				form.append( $('<input>').attr('type','hidden').attr('value',value.nodeValue).attr('name',name) );
			}
			form.find('button').removeAttr('name').end().submit();
		});
	}


	$("img.password").bind('mouseover mouseout',function(evt)
	{
		var $old = $(this).prev('input');
		var $new = evt.type == 'mouseover' ? $('<input type="text"/>') : $('<input type="password"/>');
		var attr = $old.get(0).attributes;

		$.each( attr, function (i,a)
		{
			if ( a.nodeName != 'type' ) $new.attr(a.nodeName,a.nodeValue);
		});
		$new.val( $old.val() );

		$old.replaceWith( $new );
	});
});

