function array(n) {
for(i=0;i<n;i++) this[i]=0;
this.length=n;
}
function integer(n) { return n%(0xffffffff+1); }
function shr(a,b) {
a=integer(a);
b=integer(b);
if(a-0x80000000>=0) {
a=a%0x80000000;
a>>=b;
a+=0x40000000>>(b-1); }
else
a>>=b;
return a;
}
function shl1(a) {
a=a%0x80000000;
if(a&0x40000000==0x40000000) {
a-=0x40000000;
a*=2;
a+=0x80000000; }
else
a*=2;
return a;
}
function shl(a,b) {
a=integer(a);
b=integer(b);
for(var i=0;i<b;i++) a=shl1(a);
return a;
}
function and(a,b) {
a=integer(a);
b=integer(b);
var t1=a-0x80000000;
var t2=b-0x80000000;
if(t1>=0)
if(t2>=0)
return (t1&t2)+0x80000000;
else
return t1&b;
else
if(t2>=0)
return a&t2;
else
return a&b;
}
function or(a,b) {
a=integer(a);
b=integer(b);
var t1=a-0x80000000;
var t2=b-0x80000000;
if(t1>=0)
if(t2>=0)
return (t1|t2)+0x80000000;
else
return (t1|b)+0x80000000;
else
if(t2>=0)
return (a|t2)+0x80000000;
else
return a|b;
}
function xor(a,b) {
a=integer(a);
b=integer(b);
var t1=a-0x80000000;
var t2=b-0x80000000;
if(t1>=0)
if(t2>=0)
return t1^t2;
else
return (t1^b)+0x80000000;
else
if(t2>=0)
return (a^t2)+0x80000000;
else
return a^b;
}
function not(a) {
a=integer(a);
return 0xffffffff-a;
}
var state=new array(4);
var count=new array(2);
count[0]=0;
count[1]=0;
var buffer=new array(64);
var transformBuffer=new array(16);
var digestBits=new array(16);
function F(x,y,z) { return or(and(x,y),and(not(x),z)); }
function G(x,y,z) { return or(and(x,z),and(y,not(z))); }
function H(x,y,z) { return xor(xor(x,y),z); }
function I(x,y,z) { return xor(y ,or(x ,not(z))); }
function rotateLeft(a,n) { return or(shl(a,n),(shr(a,(32-n)))); }
function FF(a,b,c,d,x,s,ac) {
a=a+F(b,c,d)+x+ac;
a=rotateLeft(a,s);
a=a+b;
return a;
}
function GG(a,b,c,d,x,s,ac) {
a=a+G(b,c,d)+x+ac;
a=rotateLeft(a,s);
a=a+b;
return a;
}
function HH(a,b,c,d,x,s,ac) {
a=a+H(b,c,d)+x+ac;
a=rotateLeft(a,s);
a=a+b;
return a;
}
function II(a,b,c,d,x,s,ac) {
a=a+I(b,c,d)+x+ac;
a=rotateLeft(a,s);
a=a+b;
return a;
}
function transform(buf,offset) {
var a=0,b=0,c=0,d=0;
var x=transformBuffer;
a=state[0];
b=state[1];
c=state[2];
d=state[3];
for(i=0;i<16;i++) {
x[i]=and(buf[i*4+offset],0xff);
for(j=1;j<4;j++) x[i]+=shl(and(buf[i*4+j+offset],0xff),j*8); }
a=FF(a,b,c,d,x[0],7,0xd76aa478);
d=FF(d,a,b,c,x[1],12,0xe8c7b756);
c=FF(c,d,a,b,x[2],17,0x242070db);
b=FF(b,c,d,a,x[3],22,0xc1bdceee);
a=FF(a,b,c,d,x[4],7,0xf57c0faf);
d=FF(d,a,b,c,x[5],12,0x4787c62a);
c=FF(c,d,a,b,x[6],17,0xa8304613);
b=FF(b,c,d,a,x[7],22,0xfd469501);
a=FF(a,b,c,d,x[8],7,0x698098d8);
d=FF(d,a,b,c,x[9],12,0x8b44f7af);
c=FF(c,d,a,b,x[10],17,0xffff5bb1);
b=FF(b,c,d,a,x[11],22,0x895cd7be);
a=FF(a,b,c,d,x[12],7,0x6b901122);
d=FF(d,a,b,c,x[13],12,0xfd987193);
c=FF(c,d,a,b,x[14],17,0xa679438e);
b=FF(b,c,d,a,x[15],22,0x49b40821);
a=GG(a,b,c,d,x[1],5,0xf61e2562);
d=GG(d,a,b,c,x[6],9,0xc040b340);
c=GG(c,d,a,b,x[11],14,0x265e5a51);
b=GG(b,c,d,a,x[0],20,0xe9b6c7aa);
a=GG(a,b,c,d,x[5],5,0xd62f105d);
d=GG(d,a,b,c,x[10],9, 0x2441453);
c=GG(c,d,a,b,x[15],14,0xd8a1e681);
b=GG(b,c,d,a,x[4],20,0xe7d3fbc8);
a=GG(a,b,c,d,x[9],5,0x21e1cde6);
d=GG(d,a,b,c,x[14],9,0xc33707d6);
c=GG(c,d,a,b,x[3],14,0xf4d50d87);
b=GG(b,c,d,a,x[8],20,0x455a14ed);
a=GG(a,b,c,d,x[13],5,0xa9e3e905);
d=GG(d,a,b,c,x[2],9,0xfcefa3f8);
c=GG(c,d,a,b,x[7],14,0x676f02d9);
b=GG(b,c,d,a,x[12],20,0x8d2a4c8a);
a=HH(a,b,c,d,x[5],4,0xfffa3942);
d=HH(d,a,b,c,x[8],11,0x8771f681);
c=HH(c,d,a,b,x[11],16,0x6d9d6122);
b=HH(b,c,d,a,x[14],23,0xfde5380c);
a=HH(a,b,c,d,x[1],4,0xa4beea44);
d=HH(d,a,b,c,x[4],11,0x4bdecfa9);
c=HH(c,d,a,b,x[7],16,0xf6bb4b60);
b=HH(b,c,d,a,x[10],23,0xbebfbc70);
a=HH(a,b,c,d,x[13],4,0x289b7ec6);
d=HH(d,a,b,c,x[0],11,0xeaa127fa);
c=HH(c,d,a,b,x[3],16,0xd4ef3085);
b=HH(b,c,d,a,x[6],23, 0x4881d05);
a=HH(a,b,c,d,x[9],4,0xd9d4d039);
d=HH(d,a,b,c,x[12],11,0xe6db99e5);
c=HH(c,d,a,b,x[15],16,0x1fa27cf8);
b=HH(b,c,d,a,x[2],23,0xc4ac5665);
a=II(a,b,c,d,x[0],6,0xf4292244);
d=II(d,a,b,c,x[7],10,0x432aff97);
c=II(c,d,a,b,x[14],15,0xab9423a7);
b=II(b,c,d,a,x[5],21,0xfc93a039);
a=II(a,b,c,d,x[12],6,0x655b59c3);
d=II(d,a,b,c,x[3],10,0x8f0ccc92);
c=II(c,d,a,b,x[10],15,0xffeff47d);
b=II(b,c,d,a,x[1],21,0x85845dd1);
a=II(a,b,c,d,x[8],6,0x6fa87e4f);
d=II(d,a,b,c,x[15],10,0xfe2ce6e0);
c=II(c,d,a,b,x[6],15,0xa3014314);
b=II(b,c,d,a,x[13],21,0x4e0811a1);
a=II(a,b,c,d,x[4],6,0xf7537e82);
d=II(d,a,b,c,x[11],10,0xbd3af235);
c=II(c,d,a,b,x[2],15,0x2ad7d2bb);
b=II(b,c,d,a,x[9],21,0xeb86d391);
state[0]+=a;
state[1]+=b;
state[2]+=c;
state[3]+=d;
}
function init() {
count[0]=count[1]=0;
state[0]=0x67452301;
state[1]=0xefcdab89;
state[2]=0x98badcfe;
state[3]=0x10325476;
for(i=0;i<digestBits.length;i++) digestBits[i]=0;
}
function update(b) {
var index,i;
index=and(shr(count[0],3),0x3f);
if(count[0]<0xffffffff-7)
count[0] +=8;
else {
count[1]++;
count[0]-=0xffffffff+1;
count[0]+=8; }
buffer[index]=and(b,0xff);
if(index>=63) transform(buffer,0);
}
function finish() {
var bits=new array(8);
var	padding;
var	i=0,index=0,padLen=0;
for(i=0;i<4;i++) bits[i]=and(shr(count[0],(i*8)),0xff);
for(i=0;i<4;i++) bits[i+4]=and(shr(count[1],(i*8)),0xff);
index=and(shr(count[0],3) ,0x3f);
padLen=(index<56) ? 56-index : 120-index;
padding=new array(64);
padding[0]=0x80;
for(i=0;i<padLen;i++)
update(padding[i]);
for(i=0;i<8;i++)
update(bits[i]);
for(i=0;i<4;i++) {
for(j=0;j<4;j++) {
digestBits[i*4+j]=and(shr(state[i],(j*8)),0xff);
}
}
}
function hexa(n) {
var hexa_h="0123456789abcdef";
var hexa_c="";
var hexa_m=n;
for(hexa_i=0;hexa_i<8;hexa_i++) {
hexa_c=hexa_h.charAt(Math.abs(hexa_m)%16)+hexa_c;
hexa_m=Math.floor(hexa_m/16);
}
return hexa_c;
}
var ascii="01234567890123456789012345678901 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
function MD5(entree)
{
var l,s,k,ka,kb,kc,kd;
init();
for(k=0;k<entree.length;k++) {
l=entree.charAt(k);
update(ascii.lastIndexOf(l));
}
finish();
ka=kb=kc=kd=0;
for(i=0;i<4;i++) ka+=shl(digestBits[15-i],(i*8));
for(i=4;i<8;i++) kb+=shl(digestBits[15-i],((i-4)*8));
for(i=8;i<12;i++) kc+=shl(digestBits[15-i],((i-8)*8));
for(i=12;i<16;i++) kd+=shl(digestBits[15-i],((i-12)*8));
s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);
return s;
}

//////////////////////////////////////////////////////////////////////
// Fonction SHA1
//
// Description :
//		Encrypte une chaine via l'algorythme SHA-1
// Entrées :
//		@msg (string) : Message à encrypter
// Sorties :
//		@Néant
// Valeur de retour :
//		* (string) : message encrypté
// Auteurs : 
//		Secure Hash Algorithm (SHA1)
//  	http://www.webtoolkit.info/javascript-sha1.html
// Date récupération : 23/06/2010
// Commentaires :
//		
//////////////////////////////////////////////////////////////////////
function SHA1 (msg) {
 
	function rotate_left(n,s) {
		var t4 = ( n<<s ) | (n>>>(32-s));
		return t4;
	};
 
	function lsb_hex(val) {
		var str="";
		var i;
		var vh;
		var vl;
 
		for( i=0; i<=6; i+=2 ) {
			vh = (val>>>(i*4+4))&0x0f;
			vl = (val>>>(i*4))&0x0f;
			str += vh.toString(16) + vl.toString(16);
		}
		return str;
	};
 
	function cvt_hex(val) {
		var str="";
		var i;
		var v;
 
		for( i=7; i>=0; i-- ) {
			v = (val>>>(i*4))&0x0f;
			str += v.toString(16);
		}
		return str;
	};
 
 
	function Utf8Encode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	};
 
	var blockstart;
	var i, j;
	var W = new Array(80);
	var H0 = 0x67452301;
	var H1 = 0xEFCDAB89;
	var H2 = 0x98BADCFE;
	var H3 = 0x10325476;
	var H4 = 0xC3D2E1F0;
	var A, B, C, D, E;
	var temp;
 
	msg = Utf8Encode(msg);
 
	var msg_len = msg.length;
 
	var word_array = new Array();
	for( i=0; i<msg_len-3; i+=4 ) {
		j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
		msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
		word_array.push( j );
	}
 
	switch( msg_len % 4 ) {
		case 0:
			i = 0x080000000;
		break;
		case 1:
			i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
		break;
 
		case 2:
			i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
		break;
 
		case 3:
			i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8	| 0x80;
		break;
	}
 
	word_array.push( i );
 
	while( (word_array.length % 16) != 14 ) word_array.push( 0 );
 
	word_array.push( msg_len>>>29 );
	word_array.push( (msg_len<<3)&0x0ffffffff );
 
 
	for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
 
		for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
		for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
 
		A = H0;
		B = H1;
		C = H2;
		D = H3;
		E = H4;
 
		for( i= 0; i<=19; i++ ) {
			temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=20; i<=39; i++ ) {
			temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=40; i<=59; i++ ) {
			temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		for( i=60; i<=79; i++ ) {
			temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
			E = D;
			D = C;
			C = rotate_left(B,30);
			B = A;
			A = temp;
		}
 
		H0 = (H0 + A) & 0x0ffffffff;
		H1 = (H1 + B) & 0x0ffffffff;
		H2 = (H2 + C) & 0x0ffffffff;
		H3 = (H3 + D) & 0x0ffffffff;
		H4 = (H4 + E) & 0x0ffffffff;
 
	}
 
	var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
 
	return temp.toLowerCase();
 
}
