/**
 * jQuery librairies generales
 * @name LibGen.js
 * @author Corentin CROUVISIER
 * @version 0.1
 * @date 10/09/2009
 * @category jQuery plugin
 */
(function($) {
	/**
	 * @category FONCTIONS g�n�riques
	 * @exemple jDev.fn(...);
	 */
	
	$.getCleUnique = function(){
		var date = new Date();
		heure_gmt = date.toGMTString() + date.getUTCMilliseconds();
		return heure_gmt;
	};
	
	$.getRayon = function (largeur) {
		return largeur/2;
	};
	
	$.getSurfCercle = function(largeur){
		var surface = $.getRayon(largeur) * $.getRayon(largeur) * Math.PI;
		return surface;
	};
	$.getSurfOblong = function(largeur, longueur){
		var cercle = $.getSurfCercle(largeur);
		var rectangle = (longueur - largeur) * largeur;
		var surface = cercle + rectangle;
		return surface;
	};
	$.getSurfDemiOblong = function(largeur, longueur){
		var demiCercle = ($.getSurfCercle(largeur))/2;
		var rectangle = (longueur - (largeur/2) ) * largeur;
		var surface = demiCercle + rectangle;
		return surface;
	};
	
	$.getPerimCercle = function(largeur){
		var surface = $.getRayon(largeur) * 2 * Math.PI;
		return surface;
	};
	$.getPerimRectangle = function(largeur, longueur){
		var surface = (largeur * 2) + (longueur * 2);
		return surface;
	};
	$.getPerimOblong = function(largeur, longueur){
		var cercle = $.getPerimCercle(largeur);
		var rectangle = (longueur - largeur) * 2;
		var surface = cercle + rectangle;
		return surface;
	};
	$.getPerimDemiOblong = function(largeur, longueur){
		var cercle = ($.getPerimCercle(largeur))/2;
		var rectangle = ( (longueur - $.getRayon(largeur)) * 2 ) + largeur;
		var surface = cercle + rectangle;
		return surface;
	};
	
	$.getPerim = function(tab_donnees){
		//jDev.debug(tab_donnees);
		switch(tab_donnees.type) {
			case 'ronde':
				var surface = $.getRayon(tab_donnees.largeur*tab_donnees.tranches_selectionnees[1]) * 2 * Math.PI;
				break;
			case 'rectiligne':
				var surface = tab_donnees.largeur*tab_donnees.tranches_selectionnees[2] + 
					tab_donnees.largeur*tab_donnees.tranches_selectionnees[4] + 
					tab_donnees.longueur*tab_donnees.tranches_selectionnees[1] + 
					tab_donnees.longueur*tab_donnees.tranches_selectionnees[3];
				break;
			case 'oblong':
				var cercle = $.getPerimCercle(tab_donnees.largeur);
				var rectangle = (tab_donnees.longueur - tab_donnees.largeur) * 2;
				var surface = (cercle + rectangle)*tab_donnees.tranches_selectionnees[1];
				break;
			case 'demi_oblong':
				var cercle = ($.getPerimCercle(tab_donnees.largeur))/2;
				var rectangle = ( (tab_donnees.longueur - $.getRayon(tab_donnees.largeur)) * 2 );
				var surface = (cercle + rectangle)*tab_donnees.tranches_selectionnees[2] + tab_donnees.largeur*tab_donnees.tranches_selectionnees[1];
				break;
			default:
				var surface = 0;
				break;
		};
		return jDev.decimalFormat(surface,3);
	};
	
	
	
	
	$.is_array = function(obj) {
		return obj.constructor.toString().indexOf("Array") > -1;
	};
	
	$.empty = function(variable, bool) {
		if(variable === ""
			|| variable === 0
			|| variable === "0"
			|| variable === null
			|| variable === false
			|| variable === undefined
		) {
			return bool ? 1 : true;
		}
		if(typeof variable == 'object') {
			for (var i in variable) {
				return bool ? 0 : false;
			}
			return bool ? 1 : true;
		}
		return bool ? 0 : false;
	}
	
	$.preg_replace = function(array_pattern, array_pattern_replace, my_string)  {
		var new_string = String (my_string);
		array_pattern = $.is_array(array_pattern) ? array_pattern : new Array(array_pattern);
		array_pattern_replace = $.is_array(array_pattern_replace) ? array_pattern_replace : new Array(array_pattern_replace);
		for (i=0; i<array_pattern.length; i++) {
			var reg_exp= RegExp(array_pattern[i], "gi");
			var val_to_replace = array_pattern_replace[i];
			new_string = new_string.replace (reg_exp, val_to_replace);
		}
		return new_string;
	}

	
	$.intFormat = function(entree, debugActif){
		if( !$.empty(entree) ){
			entree =$.preg_replace(',','.',entree);
		}
		var retour = parseFloat(entree);
		if(isNaN(entree)){
			retour =  0.00;
		}
		return retour;
	};
	
	$.priceFormat = function(entree){
		var retour = $.intFormat(entree);
		return retour.toFixed(2);
	};
	
	$.decimalFormat = function(entree,number){
		number = !$.empty(number) ? number : 2 ;
		var retour = $.intFormat(entree);
		return retour.toFixed(number);
	};	

	$.arrayToString = function(entree,separateur){
		separateur = separateur ? separateur : "\n";
		var retour;
		var i = 0;
		retour = separateur+"{<div>"+separateur;
		$.each(entree,function(cle,valeur){
			
			if( !$.empty(i) ) {
				retour += "<strong>,</strong>"+separateur;
			}
			var mod = $.empty(i%2)?"background:#DDD":"background:#FFF";
			retour += "</div><div style='"+mod+";margin:0 0 0 10px; padding:5px;'><strong style='color:#607200; cursor:pointer;' class='parent' id='"+cle+"'><em>"+cle+"</em></strong>"+" : ";
			
			if(valeur && typeof valeur == 'object') {
				retour+="<span class='enfant' rel='"+cle+"'>"+$.arrayToString(valeur,separateur)+"</span>";
			}
			else
			{
				retour+='"'+valeur+'"';
			}
			i++;
		});
		retour +="</div>"+separateur+"}";
		
		return retour;
	};
	
	
	
	$.debug = function(variable,titre){
		var cleUnique = $.getCleUnique();
		titre = titre ? titre : "DEBUG";
		
		if(variable && typeof variable == 'object'){
			var retour = $.arrayToString(variable,"<br/>");
		} else if( !$.empty(variable) || !$.empty($.intFormat(variable)) ) {
			var retour = variable;
		} else {
			var retour = "variable vide";
		}
		
		$("body").prepend("<div id='dialog' rel='alert"+cleUnique+"' title='"+titre+"'>"+retour+"</div>");
		$("#dialog[rel=alert"+cleUnique+"]").showHide();
		$("#dialog[rel=alert"+cleUnique+"]").dialog({
			bgiframe: true,
			modal: true,
			width: 600,
			buttons: {
				Ok: function() {
					jDev(this).dialog('close');
				}
			},
			close: function(event, ui) {
				jDev("#dialog[rel=alert"+cleUnique+"]").remove();
			}
		});
	};
	
	
	$.fn.showHide = function(){
		this.each(function(){
			$(".enfant",this).each(function() {
				$(this).hide();
			});
			$(".parent",this).click(function() {
				if($(this).next(".enfant").attr("rel")==$(this).attr("id") && $(this).next(".enfant").css("display")=="none")
				{
					$(this).next(".enfant[rel="+$(this).attr("id")+"]").show();
				}
				else
				{
					$(this).next(".enfant").hide();
				}
			});
		});
	};
	
	
	$.fn.show_hide_video = function(){
		this.each(function(){
			if( $(this).val() == '1') {
				$('input[name="champ_video"]').css({
					'filter' : 'alpha(opacity=40)',
					'-moz-opacity' : '0.4',
					'opacity' : '0.4'
				});
				$('input[name="titre_video"]').css({
					'filter' : 'alpha(opacity=40)',
					'-moz-opacity' : '0.4',
					'opacity' : '0.4'
				});
				$(".bloc_photo").css({
					'filter' : 'alpha(opacity=100)',
					'-moz-opacity' : '1',
					'opacity' : '1'
				});
				
				$(".bloc_photo input").removeAttr("disabled");
				$('input[name="champ_video"]').attr("disabled","true");
				$('input[name="titre_video"]').attr("disabled","true");
			} else {
				$('input[name="champ_video"]').css({
					'filter' : 'alpha(opacity=100)',
					'-moz-opacity' : '1',
					'opacity' : '1'
				});
				$('input[name="titre_video"]').css({
					'filter' : 'alpha(opacity=100)',
					'-moz-opacity' : '1',
					'opacity' : '1'
				});
				$(".bloc_photo").css({
					'filter' : 'alpha(opacity=40)',
					'-moz-opacity' : '0.4',
					'opacity' : '0.4'
				});
				
				$(".bloc_photo input").attr("disabled","true");
				$('input[name="champ_video"]').removeAttr("disabled");
				$('input[name="titre_video"]').removeAttr("disabled");
			}
		});
	};
	
	//# 
	/**
	 * @category FONCTIONS avec selecteur
	 * @exemple jDev("#madiv").fn(...);
	 */
	$.fn.clearForm = function() {
		return this.each(function() {
			var type = this.type, tag = this.tagName.toLowerCase();
			if (tag == 'form')
				return $(':input',this).clearForm();
			if (type == 'text' || type == 'password' || tag == 'textarea')
				this.value = '';
			else if (type == 'checkbox' || type == 'radio')
				this.checked = false;
			else if (tag == 'select')
				this.selectedIndex = -1;
		});
	};
	
	$.myJqueryFlash = function(tabConfig){
		var finalTabConfig = {
			config:{
				swfFile:tabConfig.config.swfFile,
				containerID:tabConfig.config.containerID,
				size:{
					width:tabConfig.config.size.width?tabConfig.config.size.width:$("#"+ID).width(),
					height:tabConfig.config.size.height?tabConfig.config.size.height:$("#"+ID).height()
				},
				version:tabConfig.config.version?tabConfig.config.version:"9.0.0",
				expressInstall:tabConfig.config.expressInstall==false?"":"expressInstall.swf"
			},
			flashvars:tabConfig.flashvars?tabConfig.flashvars:{},
			params:tabConfig.params?{
				wmode: tabConfig.params.wmode?tabConfig.params.wmode:'transparent',
				allowScriptAccess:tabConfig.params.allowScriptAccess?tabConfig.params.allowScriptAccess:'samedomain'
			}:{
				wmode: 'transparent',
				allowScriptAccess:'samedomain'
			},
			attributes:tabConfig.attributes?{  
				id: tabConfig.attributes.id?tabConfig.attributes.id:tabConfig.config.containerID+"_id",
				name: tabConfig.attributes.id?tabConfig.attributes.id:tabConfig.config.containerID+"_name"
			}:{  
				id: tabConfig.config.containerID+"_id",
				name: tabConfig.config.containerID+"_name"
			}
		};
		swfobject.embedSWF(
			finalTabConfig.config.swfFile,
			finalTabConfig.config.containerID,
			finalTabConfig.config.size.width,
			finalTabConfig.config.size.height,
			finalTabConfig.config.version,
			finalTabConfig.config.expressInstall,
			finalTabConfig.flashvars,
			finalTabConfig.params,
			finalTabConfig.attributes
		);
	};
	
	$.getFlashMovie = function(movieName) {
		if(navigator.appName.indexOf("Microsoft") != -1){
			return window[movieName];
		}else{
			return document[movieName];
		}
	} 
	
})(jQuery);