/**
 * VARS
 * $.la.sHost
 * 
 * UTILS
 * $.la.utils.messages
 * $.la.utils.var_dump(v, recursif, indent)
 * $.la.utils.addFavorite()
 * $.la.utils.httpGet(key_str)
 * $.la.utils.isNumeric(val)
 * $.la.utils.isDate(date)
 * $.la.utils.verifMail(emailString)
 * $.la.utils.checknumber(atester)
 * $.la.utils.isMineur(sD,sM,sY)
 * $.la.utils.querystring_get(key, default_)
 * $.la.utils.querystring(qs)
 * $.la.utils.getTimeStamp()
 * $.la.utils.verifyUpload( value_image,value_video,type, formId )
 * $.la.utils.switchTab(div1,div2,classe)
 * $.la.utils.showHide(div1,div2)
 * $.la.utils.sortOptionFromSelect(select_id)
 * $.la.utils.escapeHtml(stringToEscape)
 * $.la.utils.trim(string)
 * $.la.utils.stripslashes(string)
 * $.la.utils.checkImageSrc(classe)
 * $.la.utils.str_split(string, split_length)
 *
 * $.la.utils.list.add(aListArray, oElement, push)
 * $.la.utils.list.alreadyIn(listArray, id)
 * $.la.utils.list.find(listArray, id)
 * $.la.utils.list.order(aListArray, bIsRandom)
 *
 */

(function($){
	$.la = $.la||{};

	$.extend(true, $.la,
	{
		/* VARS */
		master:true,
		sHost:location.protocol + '//' + location.hostname,
		
		// Gestion des modules
		modules:{
			la: {
				active:true,
				modules:{
					utils: {
						active: true
					}
				}
				
			},
			require: function(module){
				if(!$.la.modules.isLoaded(module)){
					$.la.utils.debug('Erreur : le plugin ' + module + ' est manquant');
				}
			},
			isLoaded: function(module){

				// ex: $.la.modules.isLoaded('la.ajax');
				// on verifie $.la.modules.la.modules.ajax.active == true
				
				//$.la.modules.la.modules.console.modules[module].modules[i].active
				var tmp = module.split('.');
				var m = $.la.modules;
				if(tmp.length && m.length){
					for(var i in tmp){
						if(typeof m[tmp[i]] == 'undefined' || typeof m[tmp[i]].active == 'undefined' || m[tmp[i]].active == false){
							return false;
						}
						m = m[tmp[i]]['modules'];
					}
				}
				return true;
			}
		},

		/* UTILS */
		utils:{
			
			/*
			 verifie si la version de jquery passée en paramètre est plus vieille que celle utilisée actuellement
			*/
			isAnOlderjQueryVersion:function(version){
				currentVersion = jQuery.fn.jquery;
				
				for( i = 0; i< version.split('.').length; i++ )
				{
					if( version.split('.')[i] == currentVersion.split('.')[i] )
					{
						
					}else if ( version.split('.')[i] < currentVersion.split('.')[i] )
					{
						return true;
					}else{
						return false;
					}
				}
				
				// 'version' contient les memes chiffres que currentVersion (ex: 2.0 VS 2.0.1 )
				
				return ( version.split('.').length < currentVersion.split('.').length );
					
			},
			
			getJsonDatatype:function()
			{
				if( this.isAnOlderjQueryVersion('1.5') )
				{
					return 'text json';
				}else{
					return 'json';
					
				}
			},
			
			
			_cleanUpFlash: false,
			messages:{
				fileNeeded: 'Il manque le fichier !',
				notAVideoFile : 'Ce n\' est pas une vidéo'
			},

			debug:function(text) {
				if (window.console && window.console.log){
					window.console.log(text);
				}
			},

			debugConsole:function(text) {
				if (typeof text == 'object') {
					$.la.utils.debug($.la.utils.var_dump(text, true, 1));
				}
				else {
					var today=new Date();
					var h=today.getHours();
					var m=today.getMinutes();
					var s=today.getSeconds();
					if (typeof text == 'string') {
						$.la.utils.debug(h + ':' + m + ':' + s + ' - ' + text);
					}
					else {
						$.la.utils.debug(h + ':' + m + ':' + s);
						$.la.utils.debug(text);
					}
				}
			},

			var_dump: function(v, recursif, indent){
				recursif = typeof recursif == 'undefined'?false:true;
				indent = typeof indent == 'undefined'?0:indent;
				res = '';
				for(i in v){
					for(var j=0; j < indent;j++){
						res += '>> ';
					}
					if(recursif && typeof v[i] == 'object'){
						res +=  i + ':\n' + this.var_dump(v[i], recursif, indent + 1)+ '\n';
					}
					else{
						res += i + ' : '+ v[i] + '\n';
					}
				}
				if(!indent){
					alert(res);
				}
				else{
					return res;
				}
				return res;
			},

			cleanUpFlash:function(){
				this._cleanUpFlash = true;
				try{
					$('object[cleanup!=true]').each(function(){
						var opaque=true;
						$('param',$(this)).each(function(){
							if($(this).attr('wmode') == 'transparent'){
								opaque = false;
							}
						});
						if(opaque){
							var clone = $(this).clone();
							clone.append('<param name="wmode" value="transparent" />');
							clone.attr('cleanup','true');
							$('embed',clone).attr('wmode','transparent');
							$(this).replaceWith(clone);
						}
					});
				}
				catch(e){}
				try{
					$('embed[cleanup!=true]').each(function(){
						if($(this).attr('wmode') != 'transparent'){
							var clone = $(this).clone();
							clone.attr('wmode','transparent');
							clone.attr('cleanup','true');
							$(this).replaceWith(clone);
						}
					});
				}
				catch(e){}
			},

			addFavorite:function ()
			{
				var url = window.location;
				var titre = document.title;
				if (window.sidebar){
					window.sidebar.addPanel(titre,url,'');
				}
				else{
					window.external.AddFavorite(url,titre);
				}
				return false;
			},

			httpGet:function(key_str)
			{
				if(window.location.search) {
					var query = window.location.search.substr(1);
					var pairs = query.split("&");
					for(var i = 0; i < pairs.length; i++) {
						var pair = pairs[i].split("=");
						if(unescape(pair[0]) == key_str){
							return unescape(pair[1]);
						}
					}
				}
				return '';
			},

			getKey:function(key_str, str)
			{
				if(str != '') {
					var query = str.substr(1);
					var pairs = query.split("&");
					for(var i = 0; i < pairs.length; i++) {
						var pair = pairs[i].split("=");
						if(unescape(pair[0]) == key_str){
							return unescape(pair[1]);
						}
					}
				}
				return '';
			},

			isNumeric:function(val){
				var exp = new RegExp("^[0-9]+$","g");
				return exp.test(val);
			},
			
			isInt : function(val)
			{
			  return !isNaN(val)&&parseInt(val)==val;
			},

			isDate:function(date)
			{

				// On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
				var tabDate = date.split('/');

				//on vérifie que le jour soit une valeur numérique
				if(!$.la.utils.isNumeric(tabDate[0])){
					return false;
				}
				else{
					var j = parseInt(tabDate[0],"10");
				}

				//on vérifie que le mois soit une valeur numérique
				if(!$.la.utils.isNumeric(tabDate[1])){
					return false;
				}
				else{
					var m = parseInt(tabDate[1],"10");
				}

				//on vérifie que l année soit une valeur numérique
				if(!$.la.utils.isNumeric(tabDate[2])){
					return false;
				}
				else{
					var a = parseInt(tabDate[2],"10");
				}

				if(isNaN(a)||isNaN(m)||isNaN(j)){
					return false;
				}
				else{

					// Définition du dernier jour de février
					// Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
					var fev;
					if ((a%4 === 0 && a%100 !== 0) || (a%400 === 0)) {
						fev = 29;
					}
					else {
						fev = 28;
					}


					// Nombre de jours pour chaque mois
					var nbJours;
					if(fev==28){
						nbJours = [31,28,31,30,31,30,31,31,30,31,30,31];
					}
					else if(fev==29){
						nbJours = [31,29,31,30,31,30,31,31,30,31,30,31];
					}

					// Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
					return ( (m >= 1) &&(m <=12) && (j>= 1) && (j <= nbJours[m-1]) );
				}
			},

			verifMail: function (emailString)
			{
				var pass = false;
				for(var j=1;j<(emailString.length);j++){
					if(emailString.charAt(j)=='@'){
						if(j<(emailString.length-4)){
							for(var k=j;k<(emailString.length-2);k++){
								if(emailString.charAt(k)=='.'){
									pass=true;
								}
							}
						}
					}
				}
				return pass;
			},

			checknumber: function(atester)
			{
				var anum=/(^\d+$)|(^\d+\.\d+$)/;
				if (anum.test(atester)){
					pass=true;
				}
				else{
					pass=false;
				}
				return pass;
			},

			isMineur: function(sD,sM,sY)
			{
				//Date du jour
				var d = new Date();
				var curr_dayOfMonth = d.getDate();
				var curr_month = d.getMonth()+1;
				var curr_year = d.getFullYear();

				if(curr_year-sY>18 || (curr_year-sY==18 && curr_month>=sM && curr_dayOfMonth>=sD)){
					return false;
				}
				else{
					return true;
				}
			},
			loadHeadScript: function(src){
				var script = document.createElement('script');
				script.setAttribute('src', src);
				document.getElementsByTagName('head')[0].appendChild(script);
			},
            loadHeadStylesheet: function(src){
				var cssNode = document.createElement('link');
                cssNode.setAttribute('type', 'text/css');
                cssNode.setAttribute('rel', 'stylesheet');
                cssNode.setAttribute('href', src);
                document.getElementsByTagName('head')[0].appendChild(cssNode);
			},
			querystring_get: function(key, default_)
			{
				// This silly looking line changes UNDEFINED to NULL
				if (default_ === null){
					default_ = null;
				}

				var value = this.params[key];
				if (value === null){
					value=default_;
				}
				return value;
			},

			querystring: function(qs)
			{ // optionally pass a querystring to parse
				this.params = {};
				this.get = $.la.utils.querystring_get;

				if (qs === null || typeof qs === 'undefined'){
					qs = location.search.substring(1, location.search.length);
				}

				if (qs.length === 0){
					return;
				}

				// Turn <plus> back to <space>
				// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
				qs = qs.replace(/\+/g, ' ');
				var args = qs.split('&'); // parse out name/value pairs separated via &

				// split out each name=value pair
				for (var i=0;i<args.length;i++) {
					var value;
					var pair = args[i].split('=');
					var name = unescape(pair[0]);

					if (pair.length == 2){
						value = unescape(pair[1]);
					}
					else{
						value = name;
					}

					this.params[name] = value;
				}
			},
			
      objectToJSON: function(o){
          var parse = function(_o){
              var a = [], t;
              for(var p in _o){
                  if(_o.hasOwnProperty(p)){
                      t = _o[p];
                      var pn = "\"" + p.toString() + "\"";
                      if(t && typeof t == "object"){
                          a[a.length]= pn + ":{ " + arguments.callee(t).join(", ") + "}";
                      }
                      else {
                          if(typeof t == "string"){
                              a[a.length] = [ pn + ": \"" + t.toString() + "\"" ];
                          }
                          else{
                              a[a.length] = [ pn + ": " + t.toString()];
                          }
                      }
                  }
              }
              return a;
          }
          return "{" + parse(o).join(", ") + "}";
      },

			getTimeStamp: function()
			{
				var currentTime = new Date();
				return currentTime.getTime();
			},

			verifyUpload: function( value_image,value_video,type, formId )
			{
				if(type == 1){
					if(value_image === ''){
						alert($.la.utils.messages.fileNeeded);
					}else{
						$('#' + formId).submit();
					}
				}else{
					if(value_video === ''){
						alert($.la.utils.messages.fileNeeded);
					}else{
						if (value_video.indexOf('.mov') === -1 && value_video.indexOf('.wmv') === -1 && value_video.indexOf('.mpeg') === -1 && value_video.indexOf('.avi') === -1 && value_video.indexOf('.3gp') === -1 && value_video.indexOf('.mp4') === -1 && value_video.indexOf('.ram') === -1 && value_video.indexOf('.flv') === -1){
							alert($.la.utils.messages.notAVideoFile);
						}else{
							$('#' + formId).submit();
						}
					}
				}
			},

			switchTab:function(div1,div2,classe)
			{
				$('#'+div1).addClass(classe);
				$('#'+div2).removeClass(classe);
			},

			showHide:function(div1,div2)
			{
				$('#'+div1).show();
				$('#'+div2).hide();
			},

			sortOptionFromSelect: function(select_id)
			{
				var Liste = new Array();
				var selected_item ="";
				var all_theme_value ="";

				// Recuperation
				$('#'+select_id).find("option").each(function(i){
					Liste[i] = new Array();
					Liste[i][0]=$(this).text();
					Liste[i][1]=$(this).val();

					if($(this).attr("selected") == true){
						selected_item = $(this).val();
					}

					if($(this).attr("id") == "all_theme"){
						all_theme_value = $(this).val();
					}
				});

				// Tri
				Liste=Liste.sort();

				// Reaffectation
				$('#'+select_id).find("option").each(function(i){
					$(this).attr('text',Liste[i][0]);
					$(this).attr('value',Liste[i][1]);

					if(Liste[i][1] == selected_item ){
						$(this).attr('selected','selected');
					}

					if($(this).val() == all_theme_value){
						$('#all_theme').attr('id','');
						$(this).attr('id','all_theme');
					}
				});

				// Remonter "Tous les themes"
				$('#'+select_id).prepend($("#all_theme"));
			},

			escapeHtml: function(stringToEscape)
			{
				var newString=stringToEscape.replace(/"/g,"&quot;");
				newString=newString.replace(/</g,"&lt;");
				newString=newString.replace(/>/g,"&gt;");
				newString=newString.replace(/&/g,"&amp;");
				return newString;
			},

			trim: function(string)
			{
				var newString=string.replace(/(?:^\s+|\s+$)/g, "");
				return newString;
			},

			digital:function(digi){
				digi = parseInt(digi,10);
				if (digi <= 9){
					return "0" + digi;
				}
				return digi;
			},

			stripslashes: function (string) {
				return (string+'').replace(/\\(.?)/g, function (s, n1) {
					switch (n1) {
						case '\\':
							return '\\';
						case '0':
							return '\0';
						case '':
							return '';
						default:
							return n1;
					}
				});
			},

			checkImageSrc:function(classe){

				var src_ok = 1;

				$('.'+classe).error(function(){
					var src_ok = 0;
				});

				return src_ok;
			},

			str_split: function (string, split_length) {
				if (string === undefined || !string.toString || split_length < 1) {
					return false;
				}
				return string.toString().match(new RegExp('.{1,' + (split_length || '1') + '}', 'g'));
			},
			implode:function (glue, pieces) {
				var i = '', retVal='', tGlue='';
				if (arguments.length === 1) {
					pieces = glue;
					glue = '';
				}
				if (typeof(pieces) === 'object') {
					if (pieces instanceof Array) {
						return pieces.join(glue);
					}
					else {
						for (i in pieces) {
							retVal += tGlue + pieces[i];
							tGlue = glue;
						}
						return retVal;
					}
				}
				else {
					return pieces;
				}
			},
			/* UTILS / LIST */
			list:{
				add: function (aListArray, oElement, push) {
					if(push){
						aListArray.push(oElement);
					}else{
						aListArray.unshift(oElement);
					}
					return aListArray;
				},

				alreadyIn:function(listArray, id){
					return (this.find(listArray, id).length > 0);
				},

				find:function(listArray, id){
					arr = jQuery.grep(listArray, function(n){
						return n.element.id == id;
					});
					return arr;
				},

				order:function(aListArray, bIsRandom){
					aOrderArray = [];
					for(x in aListArray){
						obj = aListArray[x];
						aOrderArray.push(obj.id);
					}
					if(bIsRandom == 'on'){
						aOrderArray.sort(function(){
							return 0.5 - Math.random();
						});
					}
					return aOrderArray;
				}
			},
			// Browser Detection
			browserDetect: {
				init: function () {
					this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
					this.version = this.searchVersion(navigator.userAgent)
					|| this.searchVersion(navigator.appVersion)
					|| "an unknown version";
					this.OS = this.searchString(this.dataOS) || "an unknown OS";
				},
				searchString: function (data) {
					for (var i=0;i<data.length;i++)	{
						var dataString = data[i].string;
						var dataProp = data[i].prop;
						this.versionSearchString = data[i].versionSearch || data[i].identity;
						if (dataString) {
							if (dataString.indexOf(data[i].subString) != -1)
								return data[i].identity;
						}
						else if (dataProp)
							return data[i].identity;
					}
				},
				searchVersion: function (dataString) {
					var index = dataString.indexOf(this.versionSearchString);
					if (index == -1) return;
					return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
				},
				dataBrowser: [
				{
					string: navigator.userAgent,
					subString: "Chrome",
					identity: "Chrome"
				},
				{
					string: navigator.userAgent,
					subString: "OmniWeb",
					versionSearch: "OmniWeb/",
					identity: "OmniWeb"
				},
				{
					string: navigator.vendor,
					subString: "Apple",
					identity: "Safari",
					versionSearch: "Version"
				},
				{
					prop: window.opera,
					identity: "Opera"
				},
				{
					string: navigator.vendor,
					subString: "iCab",
					identity: "iCab"
				},
				{
					string: navigator.vendor,
					subString: "KDE",
					identity: "Konqueror"
				},
				{
					string: navigator.userAgent,
					subString: "Firefox",
					identity: "Firefox"
				},
				{
					string: navigator.vendor,
					subString: "Camino",
					identity: "Camino"
				},
				{		// for newer Netscapes (6+)
					string: navigator.userAgent,
					subString: "Netscape",
					identity: "Netscape"
				},
				{
					string: navigator.userAgent,
					subString: "MSIE",
					identity: "Explorer",
					versionSearch: "MSIE"
				},
				{
					string: navigator.userAgent,
					subString: "Gecko",
					identity: "Mozilla",
					versionSearch: "rv"
				},
				{ 		// for older Netscapes (4-)
					string: navigator.userAgent,
					subString: "Mozilla",
					identity: "Netscape",
					versionSearch: "Mozilla"
				}
				],
				dataOS : [
				{
					string: navigator.platform,
					subString: "Win",
					identity: "Windows"
				},
				{
					string: navigator.platform,
					subString: "Mac",
					identity: "Mac"
				},
				{
					string: navigator.userAgent,
					subString: "iPhone",
					identity: "iPhone/iPod"
				},
				{
					string: navigator.userAgent,
					subString: "iPad",
					identity: "iPad"
				},
				{
					string: navigator.platform,
					subString: "Linux",
					identity: "Linux"
				}
				]

			},

			isFullWebkit: function(){
				$.la.utils.browserDetect.init();
				if(
					($.la.utils.browserDetect.browser == 'Safari' && ($.la.utils.browserDetect.OS == 'iPad' || $.la.utils.browserDetect.OS == 'iPhone/iPod'))
					|| ($.la.utils.browserDetect.browser == 'Safari' && $.la.utils.browserDetect.version >= 5 )
					){
					return true;
				}
				return false;
			},

			isIDevice: function(){
				$.la.utils.browserDetect.init();
				if(
					($.la.utils.browserDetect.browser == 'Safari' && ($.la.utils.browserDetect.OS == 'iPad' || $.la.utils.browserDetect.OS == 'iPhone/iPod'))
					){
					return true;
				}
				return false;
			}
		},

		replay:{
		// Appeler /extension/lajavascript/design/standard/javascript/jquery/replay/jquery.la.replay.js
		},

		buzz:{
	// Appeler /extension/lajavascript/design/standard/javascript/jquery/buzz/jquery.la.buzz.js
	}
	});
})(jQuery);

// TODO : supprimer sHost à terme dans les tpl.
var sHost = jQuery.la.sHost;
