/* ======================================================================================*/
/*				 FONCTIONS G�N�RIQUES DE VALIDATION DE FORMULAIRE 						 */
/* ======================================================================================*/

//---------------------------------------------
// Empeche la saisie d'un caractere onKeypress
//----------------------------------------------
function empechechar()
{
	if( event.keyCode < 48 || event.keyCode > 57 )
 	{ 
 		alert(get_trad_champ("numeric") );
   		event.returnValue = false;
   	}
}

//-------------------------------------
// Permet la saisie d un chiffre
//-------------------------------------
function onlyNumber(evt)
{
 var charCode = (evt.which) ? evt.which : event.keyCode
 if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

 return true;
}

//-------------------------------------
// Verifie la validite d'un email
//-------------------------------------
function isValidEmail ( _fieldId ) {
	
	var email = document.getElmentById(_fieldId).value;		
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if ( !filter.test(email.value) ) 
	{		
		return false;
	}
	else 
	{
		return true;
	}
}


//-------------------------------------
// Verifie la validite d'une date
//-------------------------------------
function isValidDate ( _fieldId )
{
    if ( _fieldId == "" )
        return true;

    // R�cup�ration de la valeur
    var totalDate    = document.getElementById( _fieldId ).value;
    if ( totalDate == "" )
        return false;
   
    // D�coupage de la date r�cup�r�e
    var aDate = totalDate.split( "/" );
    if ( aDate.length != 3 )
        return false;

    // Cr�ation d'un objet date
    var generatedDate = new Date ( aDate[ 2 ], aDate[ 1 ] - 1, aDate[ 0 ] );
   
    // Test
    if (     generatedDate.getFullYear() == aDate[ 2 ]
        &&    generatedDate.getMonth() + 1 == aDate[ 1 ]
        &&    generatedDate.getDate() == aDate[ 0 ] )
        return true;
   
    return false;
}


/* ======================================================================================*/
/*							 FONCTIONS G�N�RIQUES										 */
/* ======================================================================================*/

String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,"");
}

/* Fonctions génériques de validation de formulaire */
//Verifie la validite d'un email
function valide_mail_generique ( nameForm, champ ) {
	
	var email = document.forms[nameForm].elements[champ];
		
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if ( !filter.test(email.value) ) {
		
	 	alert(get_trad_champ("email"));
		email.select();
		return false;
	}
	else {
		return true;
	}
}


//Verifie les champs obligatoire d'un formulaire
valider_formulaire_generique = function () {
	var tab = valider_formulaire_generique.arguments;

	taille = tab.length;

	if ( taille > 0 ) {

		nameForm = tab[0];
		
		for ( i = 1; i < taille; i++ ) {
			if ( tab[i] == "email" ) {
				if ( !valide_mail_generique( nameForm, tab[i] ) ) {
					return false; 
				}
			}
			// type bouton radio
			else if( tab[i] == "besoin" ) {
				var radio = document.forms[nameForm].elements[tab[i]];
				var radio_checked = false;
				for (var j=0; j<radio.length; j++) {
					if(radio[j].checked)
						radio_checked = true;
				}
				if ( !radio_checked ) {				
					alert ( get_trad_champ( tab[i] ) );				
					//document.forms[nameForm].elements[tab[i]].focus();
					return false; 
				}
			}
			else {
				if ( ( document.forms[nameForm].elements[tab[i]].value.trim() == "" ) ) {				
					alert ( get_trad_champ( tab[i] ) );				
					document.forms[nameForm].elements[tab[i]].select();
					return false; 
				}
			}
		}
		
		return true;
		
	}
	else {
		return false;
	}
}

/*
//Exemple d'appel
function validForm() {
	if ( valider_formulaire_generique('nom_du_formulaire', 'champ_1', 'champ_2' ... ) ) {				
		document.forms['nom_du_formulaire'].submit();					
	}
	else {
		return false;
	}		
}
*/


/* ======================================================================================*/
/*				 FONCTIONS D APPELS LIES AU PROJET				 						 */
/* ======================================================================================*/

function validFormContact() {
	var checkbox_group_checked = false;
	var i = 19;
	while(document.getElementById('centres_interet[' + i + ']'))
	{
		if(document.getElementById('centres_interet[' + i + ']').checked)
		{
			checkbox_group_checked = true;
		}
		i++;
	}
	if( !checkbox_group_checked )
	{
		alert ( get_trad_champ("centres_interet") );				
		return false;
	}
	
	if ( checkbox_group_checked 
		&& valider_formulaire_generique('formContact', 'besoin', 'nom', 'prenom', 'telephone', 'email') ) {				
		document.forms['formContact'].submit();					
	}
	else {
		return false;
	}		
}

function validFormPartenariat() {
	if ( valider_formulaire_generique('formPartenariat', 'nom', 'prenom', 'telephone', 'email') ) {				
		document.forms['formPartenariat'].submit();					
	}
	else {
		return false;
	}		
}

function validFormRecrutement() {
	if ( valider_formulaire_generique('formRecrutement', 'nom', 'prenom', 'telephone', 'email', 'cv', 'message') ) {				
		document.forms['formRecrutement'].submit();					
	}
	else {
		return false;
	}		
}


/*-----------------------------------------------------------
Project: TDA Logiciel
Date : 	Juin 2010
Last Update : 10:45 08/06/2010
Author:	C2iS - LGU	
-----------------------------------------------------------*/
//FUNCTIONS
/** labelInField function **/
$.fn.labelValue = function() {
	return this.focus(function() {
		if( this.value == this.defaultValue ) {
			this.value = "";
		}
	}).blur(function() {
		if( !this.value.length ) {
			this.value = this.defaultValue;
		}
	});
};

/** InfiniteCarrousel Equal height Elements **/
function equalHeight(group) {
	tallest = 0;
	group.each(function() {
	  thisHeight = $(this).height();
	  if(thisHeight > tallest) {
	     tallest = thisHeight;
	  }
	});
	group.height(tallest);
}

/** InfiniteCarrousel **/
function InfiniteCarrousel() {
	var contener = $('#sliderCont');
	var slider = $('#slideSolutions ul', contener);
	var buttonPrev = $('.left', contener);
	var buttonNext = $('.right', contener);
	var item_width = $('#slideSolutions li', contener).outerWidth();
	var left_value = item_width * (-1);
	
	//Click Right
	buttonNext.live('click', function(){
		if ( !slider.is(':animated') ) {
			//var left_indent = parseInt(slider.css('left')) - item_width;
			slider.animate({'left' : left_value}, 800, 'swing', function () {
				$('li:first', slider).clone().appendTo(slider);
				$('li:first', this).remove();
				slider.css({'left' : 0});
			});
			return false;
		}	
	});
	//Click Left
	buttonPrev.live('click', function(){
		if ( !slider.is(':animated') ) {
			slider.css({'left' : left_value});
			$('li:last', slider).clone().prependTo(slider);
			//var left_indent = parseInt(slider.css('left')) - item_width;
			slider.animate({'left' : 0}, 800, 'swing', function () {
				$('li:last', this).remove();
				slider.css({'left' : 0});
			});
			return false;
		}
	});
}

/** blockSlider **/
function blockSlider(acc, elt, anim) {
	$(acc).eq(0).addClass('opened');
	$(elt, acc).hide().eq(0).show();
	if (anim){
		$('h3', acc).eq(0).animate({paddingTop: 25}, 500 );
	}
	$(acc)
	.hover(function(){$(this).addClass('shover')}, function(){$(this).removeClass('shover')})
	.click(function(){
		$(this).toggleClass('opened').siblings().removeClass('opened');
		$(this).children(elt).slideToggle('slow');
		if(anim){
			$('h3', acc).animate({paddingTop: 10}, 500 );
		}
		if (anim){
			$(this).children('h3').animate({paddingTop: 25}, 500 );
		}
		$(this).siblings(acc).children(elt).slideUp('slow');
	});
}

/** autoSlider **/
function autoSlider(slcont, slslid, slelt) {
	var item_width = 165
	var left_value = item_width * (-1);
	
	function slidingTimer(){
		//slide the item
		$(slslid, slcont).animate({'left' : left_value}, 1000, 'swing', function () {
			//move the first item and put it as last item
			$('li:last', this).after($('li:first', this));
			//set the default item to correct position
			$(slslid, slcont).css({'left' : 0});
		});
	}
	setInterval(function () {
	    slidingTimer();
	}, 2 * 1000);
}
/** slideTimer **/
function slideTimer(eltTimering, timing) {
	myTimer = setInterval(function() {
		eltTimering.trigger("click");
	}, timing);
};

/*:::::::: INITS ::::::::::*/
$(document).ready(function() {
//only functions for IE 6
if ($.browser.msie && $.browser.version >= 6 ) {
	try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {} //caching CSS images		
}


//make external links _blanck in xhtml
$('a[rel*="external"]').click(function(){this.target = '_blank';});

//menu sfhover
$('#nav li').hover(function(){ $(this).addClass('sfhover').children('ul').show(); },function(){ $(this).removeClass('sfhover').children('ul').hide(); });

//access form open/close
$('#menu #acces span.openerAcces').bind('click', function(){$('#menu #acces form').slideToggle();});

//labelInField
$('#acces input[type="text"]').labelValue();

//extraLink
$('.clickable').click( function(){ window.location=$(this).find("a.jsLink").attr("href"); return false; });

//netSolutions slider
if( $('#sliderCont').length){
	equalHeight($("#sliderCont li"));
	InfiniteCarrousel();
	//var length = $('#sliderCont > li').length;
	var buttonTimer = $("#sliderCont .right");
	slideTimer(buttonTimer, 2000);
	$("#sliderCont").hover(function(){
		clearInterval(myTimer);
	},function(){
		slideTimer(buttonTimer, 3000);
	});
}

//Accordeon and Slider
if( $('.produitAcc').length){
	blockSlider(".produitAccCont", 'div', 'anim');
}
if( $('.editoAccCont').length){
	blockSlider(".editoAccCont", 'div');
}
if( $('.boxSlider').length){
	autoSlider($(".boxSlider"), 'ul', 'li');
}
if( $('.formContactNav').length){
	$('.formContactNav li:first').addClass('active');
	$('.formContact fieldset').hide().eq(0).show();
	$('.formContactNav li').click(function(){
		$('.formContact fieldset').hide();
		var anchor = $('a', this).attr('href');
		$(anchor).show();
		$(this).addClass('active').siblings().removeClass('active');
		return false;
	});
	$('.formContactNav li a').click( function(){ $(this).parent().trigger('click'); return false; });
	$('.suite').click(function(){
		$('.formContact fieldset').hide();
		var anchor = $(this).attr('href');
		$(anchor).show();
		$('.formContactNav li:first').removeClass('active');
		$('.formContactNav li:last').addClass('active');
		return false;
	});
}
if( $('.divRecrut').length){
	$('.formRecrutNav li:first').addClass('active');
	$('.divRecrut').children().hide().eq(0).show();
	$('.formRecrutNav li').click(function(){
		$('.divRecrut').children().hide();
		var anchor = $('a', this).attr('href');
		$(anchor).show();
		$(this).addClass('active').siblings().removeClass('active');
		return false;
	});
	$('.formRecrutNav li a').click( function(){ $(this).parent().trigger('click'); return false; });
	
	$('.offToPostul').click( function(){
		var id = $(this).attr('href').split("=")[1];
		var anchor = '#formRecrut';
		$('.divRecrut').children().hide();
		$(anchor).show();
		$('.formRecrutNav li a[href='+anchor+']').parent().addClass('active').siblings().removeClass('active');
		$("select[name='offre'] option[value="+id+"]").attr("selected", true);
		return false;
	});
}
});

/** encryptData **/
function encryptData(){
	var login = document.getElementById('_TbLogin').value;
	var password = document.getElementById('_TbPassword').value;
	
	$.ajax({
		type: "POST",
		url: "ajax/encryptData.php",
		data: "chaine_texte=" + login,
		async: false,
		success: function(msg){
			if(msg != "BAD DATA"){
				document.getElementById('_TbLogin').value = msg;
			}
			else{
				alert('bad data');
				return false;
			}
				
		}
	});
	
	$.ajax({
		type: "POST",
		url: "ajax/encryptData.php",
		data: "chaine_texte=" + password,
		async: false,
		success: function(msg){
			if(msg != "BAD DATA"){
				document.getElementById('_TbPassword').value = msg;
			}
			else{
				alert('bad data');
				return false;
			}
				
		}
	});
	
	document.forms['_MainForm'].submit();
}

// Code r�cup�r� � valider ou non
function des (key, message, encrypt, mode, iv) {
	var spfunction1 = new Array (0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004);
	var spfunction2 = new Array (0x80108020,0x80008000,0x8000,0x108020,0x100000,0x20,0x80100020,0x80008020,0x80000020,0x80108020,0x80108000,0x80000000,0x80008000,0x100000,0x20,0x80100020,0x108000,0x100020,0x80008020,0,0x80000000,0x8000,0x108020,0x80100000,0x100020,0x80000020,0,0x108000,0x8020,0x80108000,0x80100000,0x8020,0,0x108020,0x80100020,0x100000,0x80008020,0x80100000,0x80108000,0x8000,0x80100000,0x80008000,0x20,0x80108020,0x108020,0x20,0x8000,0x80000000,0x8020,0x80108000,0x100000,0x80000020,0x100020,0x80008020,0x80000020,0x100020,0x108000,0,0x80008000,0x8020,0x80000000,0x80100020,0x80108020,0x108000);
	var spfunction3 = new Array (0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200);
	var spfunction4 = new Array (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080);
	var spfunction5 = new Array (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100);
	var spfunction6 = new Array (0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010);
	var spfunction7 = new Array (0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002);
	var spfunction8 = new Array (0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000);
	
	var keys = des_createKeys (key);
	var m=0, i, j, temp, temp2, right1, right2, left, right, looping;
	var cbcleft, cbcleft2, cbcright, cbcright2
	var endloop, loopinc;
	var len = message.length;
	var chunk = 0;
	var iterations = keys.length == 32 ? 3 : 9;
	if (iterations == 3) {looping = encrypt ? new Array (0, 32, 2) : new Array (30, -2, -2);}
	else {looping = encrypt ? new Array (0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array (94, 62, -2, 32, 64, 2, 30, -2, -2);}
	
	message += "\0\0\0\0\0\0\0\0";
	
	result = "";
	tempresult = "";
	
	if (mode == 1) {
		cbcleft = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
		cbcright = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);
		m=0;
	}
	
	
	while (m < len) {
		left = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);
		right = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++);
		
		
		if (mode == 1) {if (encrypt) {left ^= cbcleft; right ^= cbcright;} else {cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = left; cbcright = right;}}
		
		
		temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
		temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
		temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
		temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
		temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
		
		left = ((left << 1) | (left >>> 31));
		right = ((right << 1) | (right >>> 31));
		
	
		for (j=0; j<iterations; j+=3) {
			endloop = looping[j+1];
			loopinc = looping[j+2];
			
			for (i=looping[j]; i!=endloop; i+=loopinc) {
				right1 = right ^ keys[i];
				right2 = ((right >>> 4) | (right << 28)) ^ keys[i+1];
				
				temp = left;
				left = right;
				right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f]
				| spfunction6[(right1 >>> 8) & 0x3f] | spfunction8[right1 & 0x3f]
				| spfunction1[(right2 >>> 24) & 0x3f] | spfunction3[(right2 >>> 16) & 0x3f]
				| spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);
			}
			temp = left; left = right; right = temp;
		}
		
		left = ((left >>> 1) | (left << 31));
		right = ((right >>> 1) | (right << 31));
		
		temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
		temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
		temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
		temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
		temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
		
		if (mode == 1) {if (encrypt) {cbcleft = left; cbcright = right;} else {left ^= cbcleft2; right ^= cbcright2;}}
		tempresult += String.fromCharCode ((left>>>24), ((left>>>16) & 0xff), ((left>>>8) & 0xff), (left & 0xff), (right>>>24), ((right>>>16) & 0xff), ((right>>>8) & 0xff), (right & 0xff));
		
		chunk += 8;
		if (chunk == 512) {result += tempresult; tempresult = ""; chunk = 0;}
	}
	
	return result + tempresult;
}

function des_createKeys (key) {
	
	pc2bytes0 = new Array (0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204);
	pc2bytes1 = new Array (0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101);
	pc2bytes2 = new Array (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808);
	pc2bytes3 = new Array (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000);
	pc2bytes4 = new Array (0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010);
	pc2bytes5 = new Array (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420);
	pc2bytes6 = new Array (0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002);
	pc2bytes7 = new Array (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800);
	pc2bytes8 = new Array (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002);
	pc2bytes9 = new Array (0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408);
	pc2bytes10 = new Array (0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020);
	pc2bytes11 = new Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200);
	pc2bytes12 = new Array (0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010);
	pc2bytes13 = new Array (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105);
	
	
	var iterations = key.length >= 24 ? 3 : 1;
	var keys = new Array (32 * iterations);
	var shifts = new Array (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);
	var lefttemp, righttemp, m=0, n=0, temp;
	
	for (var j=0; j<iterations; j++) { //either 1 or 3 iterations
		left = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);
		right = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++);
		
		temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);
		temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
		temp = ((left >>> 2) ^ right) & 0x33333333; right ^= temp; left ^= (temp << 2);
		temp = ((right >>> -16) ^ left) & 0x0000ffff; left ^= temp; right ^= (temp << -16);
		temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
		temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
		temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
		temp = (left << 8) | ((right >>> 20) & 0x000000f0);
		left = (right << 24) | ((right << 8) & 0xff0000) | ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0);
		right = temp;
		
		for (i=0; i < shifts.length; i++) {
			if (shifts[i]) {left = (left << 2) | (left >>> 26); right = (right << 2) | (right >>> 26);}
			else {left = (left << 1) | (left >>> 27); right = (right << 1) | (right >>> 27);}
			left &= 0xfffffff0; right &= 0xfffffff0;
			lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf]
			| pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf]
			| pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf]
			| pc2bytes6[(left >>> 4) & 0xf];
			righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf]
			| pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf]
			| pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf]
			| pc2bytes13[(right >>> 4) & 0xf];
			temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
			keys[n++] = lefttemp ^ temp; keys[n++] = righttemp ^ (temp << 16);
		}
	}
	return keys;
}

function binToHex (s) {
	var r = "";
	var hexes = new Array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
	for (var i=0; i<s.length; i++) {r += hexes [s.charCodeAt(i) >> 4] + hexes [s.charCodeAt(i) & 0xf];}
	return r;
}

function hexToBin (s) {
	r = "";
	var hexas = "0123456789abcdef";
	var i = 0;
	while (i<s.length) { r += String.fromCharCode((hexas.indexOf(s.charAt(i)) << 4) | hexas.indexOf(s.charAt(i+1))); i+=2;}
	return r;
}

function coder_des(texte, cle) {
	return binToHex(des (cle, texte, 1, 0));
}

function decoder_des(code, cle) {
	return des(cle, hexToBin(code), 0, 0);
}

function codage(){
	document.forms["form"].CODEE.value = coder_des(document.forms["form"].CLAIRE.value, document.forms["form"].CLE.value);
}

function decodage(){
	document.forms["form"].CLAIRE.value = decoder_des(document.forms["form"].CODEE.value, document.forms["form"].CLE.value);
}


function CharsStringIsInThisString(sChaineTest, sThisString){
	var bOKchaine = true;
	for(nCPT = 0; nCPT < sChaineTest.length; nCPT++)
	if(sThisString.indexOf(sChaineTest.substring(nCPT, nCPT + 1)) == -1 && sChaineTest.charCodeAt(nCPT) != 0){
		bOKchaine = false;
	}
	return bOKchaine;
}
