// JavaScript Document

//---------------------------------------------------------------------------------------------------------------------------------
//function
//---------------------------------------------------------------------------------------------------------------------------------

function explode (delimiter, string, limit) {
    // Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.  
    // 
    // version: 1008.1718
    // discuss at: http://phpjs.org/functions/explode    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: kenneth
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: d3x
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
    // *     example 2: explode('=', 'a=bc=d', 2);
    // *     returns 2: ['a', 'bc=d']
     var emptyArray = { 0: '' };
    
    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||        typeof arguments[1] == 'undefined' ) {
        return null;
    }
 
    if ( delimiter === '' ||        delimiter === false ||
        delimiter === null ) {
        return false;
    }
     if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||
        typeof string == 'object' ) {
        return emptyArray;    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }    
    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;    }
		
}//function

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function implode (glue, pieces) {
    // Joins array elements placing glue string between items and return one string  
    // 
    // version: 1008.1718
    // discuss at: http://phpjs.org/functions/implode    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Waldo Malqui Silva
    // +   improved by: Itsacon (http://www.itsacon.net/)
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: implode(' ', ['Kevin', 'van', 'Zonneveld']);    // *     returns 1: 'Kevin van Zonneveld'
    // *     example 2: implode(' ', {first:'Kevin', last: 'van Zonneveld'});
    // *     returns 2: 'Kevin van Zonneveld'
    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;
    }
	
}//function
//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function in_array (needle, haystack, argStrict) {
    // Checks if the given value exists in the array  
    // 
    // version: 1009.2513
    // discuss at: http://phpjs.org/functions/in_array    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // +   input by: Billy
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
	var key = '', strict = !!argStrict; 
	if (strict) {
	for (key in haystack) {
	if (haystack[key] === needle) {
	return true;            }
	}
	} else {
	for (key in haystack) {
	if (haystack[key] == needle) {
	return true;
	}
	}
	}
	return false;
	}
//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function ChaineAleatoire(nbcar)
{
	var ListeCar = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9");
	var Chaine ='';
	for(i = 0; i < nbcar; i++)
	{
		Chaine = Chaine + ListeCar[Math.floor(Math.random()*ListeCar.length)];
	}
	return Chaine;
	
}//function

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function val_pr_ajx(pr, element_name, objet, class_ok, class_nok, asynchrone, fn)
{
	fn = fn || function(e){};
	
	myElement = $(document.body).getElement('*[name='+element_name+']');
	
	if(myElement)
	{
		X_valeur_a_tester = myElement.get('value');
		
		myurl = {'fw_ajx_obj': objet, 'val': X_valeur_a_tester,'ajx_v':'1', 'pr': pr};
		
		var myHTMLRequest = new Request.HTML({
												async:asynchrone,												
												url:'?',												
												onSuccess:
												 function(responseTree, responseElements, responseHTML, responseJavaScript)
												 {
													 
													fn(responseHTML);
													
													if(responseHTML == '1')
													{
														myElement.removeClass(class_nok);
														myElement.addClass(class_ok);
														return true;
														
													}else{

														myElement.removeClass(class_ok);
														myElement.addClass(class_nok);
														return false;
														
													} //if
													
												}//function
	
											}).post(myurl);
	}//if

}//function

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

// maj_div_ajx
//
// fonction pour la mise a jour d'un div par un module ajax.

function maj_div_ajx(module, element, param, asynchrone, fn_onSuccess)
{
	if(asynchrone == null)
	{
		asynchrone = true;
	}//if
	
	if(fn_onSuccess == null)
	{
		fn_onSuccess = function(){};
	}//if
	
	param = param || {};

	var myHash = new Hash(param);
	var string_param = '';

	myHash.each(function(value, key){
					   
		string_param = string_param + '&' + key + '=' + value;   
	});

	myurl = '?module='+module + string_param;
	
	new Request.HTML
	({
		evalScripts	:true,
		async		:asynchrone,
		update		:element,
		onSuccess	:fn_onSuccess
		
	
	}).get(myurl);
		
}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
// submit_valeurs_ajx
//
// envoie pas la methode post pas un appel ajax les valeur passé dans le hash valeurs, vers le module module_destination
// retourne la reponse html.
// 

function submit_valeurs_ajx(module_destination, valeurs, asynchrone)
{
	//valeurs = {'fw_ajx_obj': objet, 'val': X_valeur_a_tester,'ajx_v':'1', 'pr': pr};
	retour = '';
	
	if(asynchrone == null)
	{
		asynchrone = false;
		
	}//if
	
	var myHTMLRequest = new Request.HTML({
											async	:asynchrone,
											url		:'?module=' + module_destination,
											
											onSuccess	:function(responseTree, responseElements, responseHTML, responseJavaScript)
														{
															retour = responseHTML;

														}//function

										}).post(valeurs);
	return retour;
	
}//function	
//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

// toggle_verticale
//
//

function toggle_verticale(element, t, d)
{
	if(t == null)
	{
		t = 'sine:out';
		//t = 'bounce:out';
		
	}//if
	
	if(d == null)
	{
		d = 300;
		
	}//if
	
	$(element).set('reveal', {
		duration: d,
		transition: t
	});

	$(element).get('reveal').toggle();

}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
// submit_form
//
// envoie le form d'id "element" vers sa destination (defini dans action)

function submit_form(element, sync)
{
	sync = sync || false;
	
	var retour;
	
	$(element).set('send', {
			   
		evalScripts	:true,
		async:sync,
		onComplete: function(response) { 
		
			retour = response;
		}
	
	}).send();
	
	return retour; // la reponse

}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
// boite_de_dialogue du framworke
//
// ouvre une boite de dialogue avec le message passé en param
// 
// Ne peut executer de javscript a l'interieur du message!

function fw_boite_info(message, titre, l)
{
	
	if(l == null)
	{
		l = 600;
	}//if

	if(titre == null)
	{
		titre = 'Information';
	}//if

	message = '<div id="fw_box_cont" class="fw_box_cont">' + message + '</div><div style=" float:right; margin:25px 5px 5px 5px "><button class="bouton" name="" id="" type="button" onclick="fw_bddiag.close();" />Fermer</button></div>';
	
	fw_bddiag = new Jx.Dialog({
        label: titre,
        image: '',
        modal: true,
		width: l,
        horizontal: 'center center', 
        vertical: 'center center', 
        content: message, 
		contentURL : '',
        resize: false,
		collapse : false,
		onClose: function() {
		
		//destruction des element du dialog box
		//$(document.body).getElements('div.jxDialog').destroy();
		//$(document.body).getElements('div.jxDialogModal').destroy();
		
		//window[fn].destroy();
	  }

    });

	fw_bddiag.open();
	y = $('fw_box_cont').getSize().y;
	fw_bddiag.resize(l,y+130);

}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
// boite_de_dialogue parametrable
//
// ouvre une boite de dialogue avec le message passé en param
// 
// Ne peut executer de javscript a l'interieur du message!

function boite_dialogue(message, titre, l, h, fn)
{
	if(fn == null)
	{
		fn = 'dialbox';
		
	} //if
	
	if(l == null)
	{
		l = 200;
	}//if
	
	if(h == null)
	{
		h = 300;
	}//if
	
	window[fn] = new Jx.Dialog({
        label: titre,
        image: '',
        modal: true,
		width: l,
		height: h,
        horizontal: 'center center', 
        vertical: 'center center', 
        content: message, 
        resize: false,
		collapse : false,
		onClose: function() {
		
		//destruction des element du dialog box
		//$(document.body).getElements('div.jxDialog').destroy();
		$(document.body).getElements('div.jxDialogModal').destroy();
		
		//window[fn].destroy();
	  }

    });

	window[fn].open();
	
}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------
// boite_de_dialogue ajax parametrable
//
// ouvre une boite de dialogue avec le message passé en param
// 
// //ATTENTION, ne pas utiliser plusieur boite de dialoge superposé !

function boite_dialogue_ajax(module, get_param, titre, l, h, fn)
{
	if(fn == null)
	{
		fn = 'dialbox_ajax';
		
	} //if
	
	url = '?module=' + module + '&' + get_param;
	
	window[fn] = new Jx.Dialog({
  		evalScripts	:true,
		async:false,
      	label: titre,
        image: '',
        modal: true,
		width: l,
		height: h,
        horizontal: 'center center', 
        vertical: 'center center', 
		contentURL : url,
        resize: false,
		collapse : false,
		onClose: function() {
			
			//destruction des element du dialog box
			$(document.body).getElements('div.jxDialog').destroy();
			$(document.body).getElements('div.jxDialogModal').destroy();
			
			//window[fn].destroy();
		  }
    });

	window[fn].open();
	
}//function	

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function bloqueur(element, html)
{
	if(html == null)
	{
		html = new Element();
	}
	
	if(element == null)
	{
		element = $(document.body);
		
	}else{	
	
		element = $(element);
		
	}//if
	
	// on cree l'element semi transparent que va tout cacher.	
	blanket = new Element('div',{
						  
                'class':'jxDialogModal', // on reprend la class Jx pour homogénéiser l'affichage				
				id: 'blockeur',				
                styles:{
                    display	:'none',
                    zIndex	: 999999
                }
	});
	
	// recuperation de la taille d'affichage.
	var ss = element.getScrollSize();
	var pp = element.getPosition();

	blanket.setStyles({
		position : 'absolute',
		width: ss.x,
		height: ss.y,
		top:	pp.y,
		left:	pp.x
	});
	
	// un element pour animer
	anim = new  Element('div',{
						
				// definiton d'un style en dur, a mettre dans un css une foit fini.		  
                styles:{					
					'margin-left'		: 'auto',
					'margin-right'		: 'auto',
					position			: 'relative',
					'text-align'		: 'center',
					'color'				: '#CCCCCC',
					'font-size'			: '12px',	
					top					: (ss.y/2).toInt()
					/*left				: (ss.x/2).toInt()*/
                }
				
	}).adopt(html).inject(blanket); // on inject l'element dans le blancket. on poura mettre un petit gif annimé aussi
	
	$(document.body).adopt(blanket); // on inject le blanket dans le body

	blanket.show(); // on affiche tout ca !

}//function

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function debloqueur()
{
	
	$(document.body).getElements('#blockeur').destroy();

}// function

//---------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------

function fw_horloge(el, heure, min, sec)
{
	if(heure == null || min == null ||sec == null)
	{
		var D		= new Date();
		var heure 	= D.getHours();
		var min 	= D.getMinutes();
		var sec 	= D.getSeconds();
	}	
	
	sec++;
	if (sec>59) {min++;sec=0;}
	if (min>59) {heure++;min=0;}
	if (heure>23) {heure=0;}
	
	sec = sec+"";
	min = min+"";
	heure = heure+"";
	
	if (heure<10)
	{
	if ((heure.charAt(0)=="0") && (heure.charAt(1)!="1") && (heure.charAt(1)!="2") && (heure.charAt(1)!="3") && (heure.charAt(1)!="4") && (heure.charAt(1)!="5") && (heure.charAt(1)!="6") && (heure.charAt(1)!="7") && (heure.charAt(1)!="8") && (heure.charAt(1)!="9")) {heure="00";} else if (heure.charAt(0)!="0") {heure="0"+heure;}
	}
	if (min<10)
	{
	if ((min.charAt(0)=="0") && (min.charAt(1)!="1")&& (min.charAt(1)!="2") && (min.charAt(1)!="3") && (min.charAt(1)!="4") && (min.charAt(1)!="5") && (min.charAt(1)!="6") && (min.charAt(1)!="7") && (min.charAt(1)!="8") && (min.charAt(1)!="9")) {min="00";} else if (min.charAt(0)!="0") {min="0"+min;}
	}
	if (sec<10)
	{
	if ((sec.charAt(0)=="0") && (sec.charAt(1)!="1") && (sec.charAt(1)!="2") && (sec.charAt(1)!="3") && (sec.charAt(1)!="4") && (sec.charAt(1)!="5") && (sec.charAt(1)!="6") && (sec.charAt(1)!="7") && (sec.charAt(1)!="8") && (sec.charAt(1)!="9")) {sec="00";} else if (sec.charAt(0)!="0") {sec="0"+sec;}
	}
	
	$(el).set('html', heure+":"+min+":"+sec);
	
	setTimeout("fw_horloge('"+el+"', '"+heure+"', '"+min+"', '"+sec+"')",1000);
} 	

