q = new Array();

q['q1'] = new Array('a30a02ec507a3e31da7e46d060c23a80a443f382' );
q['q2'] = new Array('0d1541118dce649409b9b2d9d7b003e104658124' );
q['q3'] = new Array('10a44ea7787f9260f297b9b132722263ff34aada' );
q['q4'] = new Array('b928b30cae31ed398ded033fc8b0b077c328cded' );
q['q5'] = new Array('36af552d22e42939e7690980e8605dc01ea7b85b' );
q['q6'] = new Array('75290eb5e9078a2e7b975b60c1ab5605a431e205' );
q['q7'] = new Array('e9c1fe7d30c5419fc05687ff3c7f28c19d4fd767', '912e677286d9402b1ea376b1cb0f93c06f878aa1' );
q['q8'] = new Array('5cd21e9a53c540fd62eb6ef437d5e25db1c5fbeb' );
q['q9'] = new Array('47b8727ab49f87e303fa7910f2a3a8d3b642d54f' );
q['q10'] = new Array('6a3a5a49fb25cb2326d045a48a7edaca221b14f4' );
q['q11'] = new Array('cbf1419ae254d8d6905900ab08afb6f01477b452', '00849f0e3b4ad1ecd3c6a53724c0a0f23f43db33' );
q['q12'] = new Array('37a52a740e06f8886f1227a8b3256261f9890a31' );
q['q13'] = new Array('9fcb8c15185b0c43e328a82b2bb9d4e405c93fdc' );
q['q14'] = new Array('6d5a4dbe7d531e552798984e9c385ea066991df3' );
q['q15'] = new Array('5be8f0b13ab5d2942e197b80b03dacd854b05228' );
q['q16'] = new Array('e6d2e0d397593b4cf71fe95519d8ef841c28e5d8' );
q['q17'] = new Array('a97c3cf51ecf4ece47f94edc736b9119dddf0503' );
q['q18'] = new Array('5a428b1c561b436c4a10ef45c0297c576d990f68' );
q['q19'] = new Array('245119450795e233410985c0e238bf8a09c5d564' );
q['q20'] = new Array('e520e4d9439b7f33d4bf88ccd17a70242ba12138', 'e1bba21baaaaed07e6339b9c7d3456cac73961d2' );
q['q21'] = new Array('711503ae929dd17fd1a3393fae1da21c9921d785' );
q['q22'] = new Array('69e9589d3f3d7a02cfb1d44b05f7f304005d4401' );
q['q23'] = new Array('183ec14a3574fbd57701c0db940eb1e8630496c8' );
q['q24'] = new Array('6aa935bd6c546b0eaf64474d2d8533f945e175e1' );
q['q25'] = new Array('d46ba9d1af9404b013b9d7502a1db8d2aca1d156' );
q['q26'] = new Array('c3ac308e34a817ac3eae8b46ae505d52bb532809' );
q['q27'] = new Array('a107cc2ef387a1da7cd2383e81d5e9bd52d301f0' );
q['q28'] = new Array('72814815220333973ffba4aa4c6cf40ed3f2b61d' );
q['q29'] = new Array('3d4c9cdf4cb0891d5631d518be41d57dc919221f' );
q['q30'] = new Array('9c7910f681b7b9090e67f36f7e4ad98c137b8de5' );
q['q31'] = new Array('1a5cfabef997acd0ed6bc09de2870a90575918f0' );
q['q32'] = new Array('d4858ed878f9eb264b878447f1b80acc10601892' );
q['q33'] = new Array('ecb554f07524ba7b6bb55ca8218bb3ab565e587b' );
q['q34'] = new Array('a6df7e984936ea26e9de9c2c2843c324f06a8f45', 'bdb3b48f35f0aa295516d2feb2f730b59ce4d25b' );
q['q35'] = new Array('c62eeb6ca03cd7654368f260677093cb850db9ff' );
q['q36'] = new Array('80b6db6baa6aca74f5fe42d029ff4701b29ad02e' );
q['q37'] = new Array('6a6723056db5d159a9158299d93ee107ffa478b0' );
q['q38'] = new Array('1460da7243dc779d49e8d91abee7c6ace79b6233' );
q['q39'] = new Array('a5c98d33be2d8c2977bf02df7c58fc03576aaf08' );
q['q40'] = new Array('dbb749f86d534e6199079fbf3e46b6778506ba96' );
q['q41'] = new Array('6d43a5e828b124be2b6bb6366d38941f5993009d' );
q['q42'] = new Array('0ccdee654e13018337a05192a630005e8c1d997a' );
q['q43'] = new Array('bc0f62404205bbecde216bc93467ea2cda05fdf2' );
q['q44'] = new Array('420bd52d5a62d3771e709fc11d971345ddd8fafb' );
q['q45'] = new Array('168f198bca3b4d4d35c9fd792048a8c4eff0c9e4' );
q['q46'] = new Array('2fe7f9ca2e212be62eb4937899801b1c804cacef' );
q['q47'] = new Array('4a2f5d6c17667f9447c094db0c33596f1b4a3d9d' );
q['q48'] = new Array('6d261626633abd413710ee9bdb622a5a526a5177' );
q['q49'] = new Array('ac3ec14f3b198b093f7df7b80faa19aa2d19eb9b' );
q['q50'] = new Array('d022ac514ac8de9b38f000c04671f1a6a3d69b5e' );
q['q51'] = new Array('1c014e892a76044970f00ba12b1f37ce24951ab0' );
q['q52'] = new Array('853aafcfeb726a4bdbb81b29f8d28321e09e5cb2' );
q['q53'] = new Array('162a958aa2917ca98e2e19400c1b762bae2f7e07' );
q['q54'] = new Array('4b0137750b2af98e1b8a6a1e28650afb6b24ee04' );
q['q55'] = new Array('ba93a0338e142fda36c383d94338acf13fa3e979' );
q['q56'] = new Array('33724a69f7ad36cc973c18ae790333600df2f3d4' );
q['q57'] = new Array('4b7de812d66f720ff3d56fa03a44b8ac1046ede1' );
q['q58'] = new Array('7892d56251382dafec0fc09d067b561173b54067' );
q['q59'] = new Array('2b66f24f0aa9971b872a6a966f4500da72c6f8b6' );
q['q60'] = new Array('ed79d2b63021621684b02c7e05b2d0244f3649c5' );
q['q61'] = new Array('5197bdfb7b8fc5e0d522aaf62ea93760f712a0de' );
q['q62'] = new Array('9f5b604a92f5c1ea940533fafcb6c0c7e0faa298' );
q['q63'] = new Array('aa6a4e393c34d3e2e2e4f3a01c20d130961f0395' );
q['q64'] = new Array('c64f2a2b3fa2144e387cefcb5f38f32a844922ec' );
q['q65'] = new Array('f32e72a2e52d5705f9726213cf872e8dbbcbf73f' );
q['q66'] = new Array('9daaef87b38114a43d4708e51da0a3dcde7ea805' );
q['q67'] = new Array('3542835d791987b9028e1ed2349227c7490e257a' );
q['q68'] = new Array('863f4d72381192178a27da23db119de9506af8c0' );
q['q69'] = new Array('931bd4415283dfb4b86f8197aebb73a6dddada6a' );
q['q70'] = new Array('aaac5bbd6c77e3016b43967ebd3fd0eb64983267' );
q['q71'] = new Array('1dfce2807afd16f44e79c9f74fa771463e77f173' );
q['q72'] = new Array('4b156220b4f912578bc8064b8f44622463d71bc7' );
q['q73'] = new Array('d676c013a08f6415dc7c3f06b4dd3542cc81b3c8' );
q['q74'] = new Array('26d5e1babef8f0c2979788ed5bd6362adce88b0d' );
q['q75'] = new Array('78ea6e3719479bf228619adf20c0b3f571761e55' );
q['q76'] = new Array('c9ecc4e22959b6f07c46f51627fa7b6f31c5b49a' );
q['q77'] = new Array('a4964d6ee6363c260bb3aa9f01ebcbe5e4a2d395' );
q['q78'] = new Array('0113264cee226adf5a12a8078a44174b127670d1' );
q['q79'] = new Array('c24e3acf8d817a8abe701e145f5fa6abfb17f2e4' );
q['q80'] = new Array('8340f816ad9849834a6d762c8e6edf520069f25f' );
q['q81'] = new Array('a52dfb3959c8c35ea994e133f30fb4aa86e3669f' );
q['q82'] = new Array('c240f8a416011133065c5cfe48f2ce908e9ef293' );
q['q83'] = new Array('5f8ce4516cfb24b73d570be9f5275e7f92e659cb' );
q['q84'] = new Array('67efd4053d9050295d3c8ba6b68a31491f3dd820' );
q['q85'] = new Array('e763cab11a87c32fbf88258e7bcf4c73da1acdf9' );
q['q86'] = new Array('cab680cee87d0a33849f0f375b46e3ac153d4760', '7beae35352cb96aa2ae48b04d1121725af22b116' );
q['q87'] = new Array('f5bb6732248ff46fc3712440a781677fc66a171a' );
q['q88'] = new Array('64a42003b2af7b02259db142e9b6cfd9bd778619' );
q['q89'] = new Array('8b140f8b0b711dcc9e3d9c00bfeff726a27afa26', 'a83f1a8beae8d59064803c6144ee8f4c3037a333' );
q['q90'] = new Array('204c062cf15799bdd178d6987a6d65d89080c22c' );
q['q91'] = new Array('cd5a086f08dd9872e5447d036aea606f2939775c' );
q['q92'] = new Array('4235a110e5289032ffe53aa1d8d2b27c994e5c91' );
q['q93'] = new Array('04b3d96faca671ab8eb8120046212b59fbf8556e' );
q['q94'] = new Array('c47b98e96f9d80bcba8b2f1cab5c5a0f881294d6' );
q['q95'] = new Array('cd76f555d3da2111dc4cb0145e7a1a7a84fb8e18' );
q['q96'] = new Array('70944f9ea1cc51a88f36c50902b0cd66a81798fb' );
q['q97'] = new Array('e87fc8235cd04d8fa64dd95aad9d60450f686e7a' );
q['q98'] = new Array('8b49912c3da5e788dfe8235c9156e6f64f8fcd78' );
q['q99'] = new Array('e0f226259f2366863df4f815ae9efa731839e36b' );
q['q100'] = new Array('ee51e5b5725786d7425317d5de9492bcf583a845' );
q['q101'] = new Array('3d7b051f88a58a400d5d829db0a3ad2bf9c108a4' );
q['q102'] = new Array('632185155c468134c88e7ffc6b577fcb65895284' );
q['q103'] = new Array('c0479d5a1be6cbc128e7e71292b8d45650d4703b');
q['q104'] = new Array('f0875b118040305668f69ead6525bce1adea7de8' );
q['q105'] = new Array('744763c3548865849722f676ce530cc13d49e6b8' );
q['q106'] = new Array('b6d3a18654103a0b29e1ee45ce535e4595504b99' );
q['q107'] = new Array('3b626054dd9d3ddda9c5a56bf3d0606217b9c94a' );
q['q108'] = new Array('d19559fe305974158b595dd4ae78ff1ce350fcfe' );
q['q109'] = new Array('529e62c90faedc83881e7c78a66c6b68515cfd5e' );
q['q110'] = new Array('c84ba5d4536705539553e53680aeff1447b24e6a' );
q['q111'] = new Array('f9ef6357867f7f256a67f4f567a86fa6a0227553' );
q['q112'] = new Array('98cdf45151a07b8ff8b947b92a0dda6c66f21ab4' );
q['q113'] = new Array('7d21d99cad9f421c18e27de2f4f282e769b533d6' );
q['q114'] = new Array('81d024db6ac0b711182377b7e9f319bc0c19d066' );
 

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,'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<115; 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;
	}
}

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<115;i++) {
	document.getElementById('q'+i).disabled = false;
	
	/*document.getElementById('q'+i+'b').disabled = false;*/
	}
	document.forms[0].reset();
}