p= new Array();

p['p1'] = 5;
p['p2'] = 5;
p['p3'] = 5;
p['p4'] = 5;
p['p5'] = 5;
p['p6'] = 5;
p['p7'] = 5;
p['p8'] = 5;
p['p9'] = 5;
p['p10'] = 5;
p['p11'] = 5;
p['p12'] = 5;
p['p13'] = 5;
p['p14'] = 5;
p['p15'] = 5;
p['p16'] = 5;
p['p17'] = 5;
p['p18'] = 5;
p['p19'] = 5;
p['p20'] = 5;
p['p21'] = 5;
p['p22'] = 5;
p['p23'] = 5;
p['p24'] = 5;
p['p25'] = 5;

q = new Array();


q['q1'] = new Array('a20cfaeafa28ab7c163001c12e11a66205ac2c02');
q['q2'] = new Array('3d7b051f88a58a400d5d829db0a3ad2bf9c108a4');
q['q3'] = new Array('470d801dd3798a196412d9f817d33de2fb1e2b3a', '51b5b155101171d0c8cbc2e538fbfbe5ef5085c1', 'fe204596d4a472ef4b276c50d388cc3983a9bd18', '94b5272936671f2e8d38359422895bf023287f54');
q['q4'] = new Array('6a6723056db5d159a9158299d93ee107ffa478b0');
q['q5'] = new Array('162a958aa2917ca98e2e19400c1b762bae2f7e07');
q['q6'] = new Array('d4ccd66b137ffc3f0e0645dc98b1a783a87607af');
q['q7'] = new Array('4233c1bfb5472b70bbff003c086e35c71459d7d0', '9432391374de0724ac5300838887c1cfa3e2488c', '1460da7243dc779d49e8d91abee7c6ace79b6233');
q['q8'] = new Array('e10d5a2cd713be36d6707d8723bb36a050c72588', 'a9ba521207c289bcdd8fa1e8cc9e49600fc5b972', 'd50c78c00a0c230df21f8e8ab2933204e0b8f972');
q['q9'] = new Array('529e62c90faedc83881e7c78a66c6b68515cfd5e', '4aeffbd9afcbd8283e5fb2ecaef02bed86ce57eb', '4d8ae669d2e780c1b77f067184f59e9f9a519bfb', '95724532da8fd37abfe3260825234f86fce4d9ea');
q['q10'] = new Array('ef716b87c7a61e6e6885a1da076c70c3d5435f3d', 'f0af6b7bd9b594da8d762343cab464bea7deb099', '4d7f3545dffd7b6f889e4817ef13a8b20c0c9263', '7aeb128967f6a355e3c27619f01ab8f9a3113077');
q['q11'] = new Array('a83f1a8beae8d59064803c6144ee8f4c3037a333', '8b140f8b0b711dcc9e3d9c00bfeff726a27afa26');
q['q12'] = new Array('3c83168c6440acfbc711e9cf81d3e7f5e0b8a0a3', '8b03963d5f33fa3531298d1c8f1ce4dd0e36600c');
q['q13'] = new Array('8fd3ea14677986ddd0d6fbd8ce23f2a1bde7d177', '0a1b5877b22b5e62c3706fd029885f1bde90604f', '96e88ebb6f9e793ffd5381fa24892a20ad334d1f');
q['q14'] = new Array('c917813400efef6d74f6f0c253b8f7141b2cca42');
q['q15'] = new Array('776f06176beae0c6a76b1762af1b0c98904ab970', 'f6dc8ca3cb5a4510c26944d8fe067ab3459cdf60');
q['q16'] = new Array('a0a016fb4e51e39ff1fbaba552f901d04274995d', 'f110654c1c5b2b5030241497270ba01d60f7db94');
q['q17'] = new Array('927ba01cc850a9de2078dd9390360733999d02ef');
q['q18'] = new Array('a30a02ec507a3e31da7e46d060c23a80a443f382');
q['q19'] = new Array('41e47e26a84d9422329443babfdeffeb2e73ec80', 'fdb960b1de5fa2dace6990cf471459d1c688123c');
q['q20'] = new Array('22c91530e98a52f3643cb4af7a272b17b444c8df', 'c8384f23193715e665deeac20d9f4a1246ca0a15', 'e7c9bf393de1eea33cd209142e743d7d69eb8586', '021a5746fd79064424b9231d0983932875d223e0', '43dfebfbf3d4794885969e12a0ff73eb77d6691d');
q['q21'] = new Array('e763cab11a87c32fbf88258e7bcf4c73da1acdf9');
q['q22'] = new Array('d390ef13750a81da8df996b44b52008a9d00682b', 'ec4f6088c0b6f7bda2ee7f8075d6351b86033cb3', '8d84fba968eac7f5bd8bb7596e154b92b7f21cfc');
q['q23'] = new Array('730960af0394f4a65f4c9330423c775309c0a0f8', 'bb55e9fbc6071f2718c113f455264d8741ab2b07', 'fd6fc8ce6a89bfe4d9008b07c8a75b79a419ec2a', 'd529bd32f2ba937be54b0a6f7198282efd8b47c2');
q['q24'] = new Array('d46ba9d1af9404b013b9d7502a1db8d2aca1d156');
q['q25'] = new Array('77393431cb73df964339a3443f3ed23985cd7901', '95128b5db7d8f1f4a44483de3e58b5566c8816dd');

 
function simplifica(msg) {
	
	var str=msg.toUpperCase();
	
		str=str.replace(/ /g,'');			
	str=str.replace(/\,/g,'');			
	str=str.replace(/\./g,'');			
	str=str.replace(/\-/g,'');		
	str=str.replace(/\_/g,'');	
	str=str.replace(/\'/g,'');			
	str=str.replace(/\:/g,'');			
	str=str.replace(/\(/g,'');			
	str=str.replace(/\)/g,'');		
	str=str.replace(/\&/g,'');			
	str=str.replace(/\?/g,'');			
	str=str.replace(/\¿/g,'');			
	str=str.replace(/\!/g,'');			
	str=str.replace(/\¡/g,'');			
	str=str.replace(/Á/g,'A');
	str=str.replace(/É/g,'E');
	str=str.replace(/Í/g,'I');
	str=str.replace(/Ó/g,'O');
	str=str.replace(/Ú/g,'U');
	
	return str;
	
}  


function mirar(str) {

var ok=0;
for (x in q[str])
{
	if(sha1Hash(simplifica(document.getElementById(str).value)) == (q[str][x]) 	)
	{
		
		ok=1;
	}
}  


	if(ok)
	{
		validar1(str);
	}
	else
	{
		validar2(str);
	}
	
}

function carga() { 
	
	for (var i=1; i<=25; i++) {		
		str='q'+i;	
		document.getElementById(str).style.border = '1px solid #A5ACB2';
		document.getElementById(str).disabled = false;

		/*str='q'+i+'b';	
		document.getElementById(str).style.border = '1px solid #A5ACB2';
		document.getElementById(str).disabled = false;*/
		
	} 
} 


function validar1(qstr) { 
	if(document.getElementById(qstr).disabled == false) {
	document.getElementById(qstr).disabled = true;
	document.getElementById(qstr).style.border = '2px solid #00FF00'; 
/*	document.getElementById('correct').innerHTML = document.getElementById('correct').innerHTML*1 + 1; */
document.getElementById('correct').innerHTML = '';
	}
}

function validar2(qstr) {
	if(document.getElementById(qstr).value=='') {
		document.getElementById(qstr).style.border = '1px solid #A5ACB2'; 
	}
	else
	{
	document.getElementById(qstr).style.border = '2px solid #FF0000'; 
	}
}


function sha1Hash(msg)
{
    // constants [4.2.1]
    var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];

    // PREPROCESSING 
 
    msg += String.fromCharCode(0x80);  // add trailing '1' bit to string [5.1.1]

    // convert string msg into 512-bit/16-integer blocks arrays of ints [5.2.1]
    var l = Math.ceil(msg.length/4) + 2;  // long enough to contain msg plus 2-word length
    var N = Math.ceil(l/16);              // in N 16-int blocks
    var M = new Array(N);

    for (var i=0; i<N; i++) {
        M[i] = new Array(16);
        for (var j=0; j<16; j++) {  // encode 4 chars per integer, big-endian encoding
            M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) | 
                      (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
        } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0
    }
    // add length (in bits) into final pair of 32-bit integers (big-endian) [5.1.1]
    M[N-1][14] = ((msg.length-1) >>> 30) * 8;
    M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;

    // set initial hash value [5.3.1]
    var H0 = 0x67452301;
    var H1 = 0xefcdab89;
    var H2 = 0x98badcfe;
    var H3 = 0x10325476;
    var H4 = 0xc3d2e1f0;

    // HASH COMPUTATION [6.1.2]

    var W = new Array(80); var a, b, c, d, e;
    for (var i=0; i<N; i++) {

        // 1 - prepare message schedule 'W'
        for (var t=0;  t<16; t++) W[t] = M[i][t];
        for (var t=16; t<80; t++) W[t] = ROTL(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);

        // 2 - initialise five working variables a, b, c, d, e with previous hash value
        a = H0; b = H1; c = H2; d = H3; e = H4;

        // 3 - main loop
        for (var t=0; t<80; t++) {
            var s = Math.floor(t/20); // seq for blocks of 'f' functions and 'K' constants
            var T = (ROTL(a,5) + f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
            e = d;
            d = c;
            c = ROTL(b, 30);
            b = a;
            a = T;
        }

        // 4 - compute the new intermediate hash value
        H0 = (H0+a) & 0xffffffff;  // note 'addition modulo 2^32'
        H1 = (H1+b) & 0xffffffff; 
        H2 = (H2+c) & 0xffffffff; 
        H3 = (H3+d) & 0xffffffff; 
        H4 = (H4+e) & 0xffffffff;
    }

    return H0.toHexStr() + H1.toHexStr() + H2.toHexStr() + H3.toHexStr() + H4.toHexStr();
}

//
// function 'f' [4.1.1]
//
function f(s, x, y, z) 
{
    switch (s) {
    case 0: return (x & y) ^ (~x & z);
    case 1: return x ^ y ^ z;
    case 2: return (x & y) ^ (x & z) ^ (y & z);
    case 3: return x ^ y ^ z;
    }
}

//
// rotate left (circular left shift) value x by n positions [3.2.5]
//
function ROTL(x, n)
{
    return (x<<n) | (x>>>(32-n));
}

//
// extend Number class with a tailored hex-string method 
//   (note toString(16) is implementation-dependant, and  
//   in IE returns signed numbers when used on full words)
//
Number.prototype.toHexStr = function()
{
    var s="", v;
    for (var i=7; i>=0; i--) { v = (this>>>(i*4)) & 0xf; s += v.toString(16); }
    return s;
}
function resetForm() {
	
	for(i=1;i<=25;i++) {
	document.getElementById('q'+i).disabled = false;
	
	/*document.getElementById('q'+i+'b').disabled = false;*/
	}
	for(i=1;i<=25;i++) {
	 p['p'+i] = 5;
	
	/*document.getElementById('q'+i+'b').disabled = false;*/
	}

	document.forms[0].reset();
}

function cuentaCorrectos() {
	var j=0;
	for(i=1;i<=25;i++) {
		
	if ((document.getElementById('q'+i).disabled == true))
	{
		j=j + p['p'+i];
	}
	
	/*document.getElementById('q'+i+'b').disabled = false;*/
	}
	document.getElementById('correct2').innerHTML = '<b><u>' + j + ' puntos de 125 posibles. <a href="http://javimoya.com/blog/2007/03/13/identificar-rostros-famosos-con-14-pixeles/#postcomment" target="_blank">Ahora regresa al blog y comenta cuantos puntos has sacado !</a>' + '</u></b>';
}

function FP_changeProp() {//v1.0
 var args=arguments,d=document,i,j,id=args[0],o=FP_getObjectByID(id),s,ao,v,x;
 d.$cpe=new Array(); if(o) for(i=2; i<args.length; i+=2) { v=args[i+1]; s="o"; 
 ao=args[i].split("."); for(j=0; j<ao.length; j++) { s+="."+ao[j]; if(null==eval(s)) { 
  s=null; break; } } x=new Object; x.o=o; x.n=new Array(); x.v=new Array();
 x.n[x.n.length]=s; eval("x.v[x.v.length]="+s); d.$cpe[d.$cpe.length]=x;
 if(s) eval(s+"=v"); }
}

function FP_getObjectByID(id,o) {//v1.0
 var c,el,els,f,m,n; if(!o)o=document; if(o.getElementById) el=o.getElementById(id);
 else if(o.layers) c=o.layers; else if(o.all) el=o.all[id]; if(el) return el;
 if(o.id==id || o.name==id) return o; if(o.childNodes) c=o.childNodes; if(c)
 for(n=0; n<c.length; n++) { el=FP_getObjectByID(id,c[n]); if(el) return el; }
 f=o.forms; if(f) for(n=0; n<f.length; n++) { els=f[n].elements;
 for(m=0; m<els.length; m++){ el=FP_getObjectByID(id,els[n]); if(el) return el; } }
 return null;
}