
/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS PUB 180-1
 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
 * Perform a simple self-test to see if the VM is working
 */
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 * Calculate the SHA-1 of an array of big-endian words, and a bit length
 */
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
 * Perform the appropriate triplet combination function for the current
 * iteration
 */
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
 * Determine the appropriate additive constant for the current iteration
 */
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
 * Calculate the HMAC-SHA1 of a key and some data
 */
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert an 8-bit or 16-bit string to an array of big-endian words
 * In 8-bit function, characters >255 have their hi-byte silently ignored.
 */
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
 * Convert an array of big-endian words to a string
 */
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
 * Convert an array of big-endian words to a hex string.
 */
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of big-endian words to a base-64 string
 */
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}






function nuevoAjax(){
	var xmlhttp=false;
 	try {
 		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 	} catch (e) {
 		try {
 			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 		} catch (E) {
 			xmlhttp = false;
 		}
  	}

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
 		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

function llamarasincrono(url, id_contenedor){
    var contenedor = document.getElementById(id_contenedor);
    ajax=nuevoAjax();
    ajax.open("GET", url,true);
    ajax.onreadystatechange=function() {
        if (ajax.readyState==4) {
            contenedor.innerHTML = ajax.responseText;
        }
    }
    ajax.send(null);
}

function ajax_sinc(url,id_div){
    var cont=document.getElementById(id_div);
    ajax=nuevoAjax();
    ajax.open("GET", url,false);
	ajax.send(null);
	cont.innerHTML=ajax.responseText;
}

function trim(str) {
	if(str.length==0)
		return "";
	var i=0;
	while(str.charAt(i)==" "){
		i++;	
	}
	str=str.substring(i,str.length);
	i=str.length-1;
	while(str.charAt(i)==" "){
		i--;	
	}
	str=str.substring(0,i+1);
	return str;
}

function encriptar__(clave_publica) {
	var e_mail=trim(document.form_login.e_mail.value);	
	var clave=trim(document.form_login.clave.value);
	if(e_mail.length==0 || clave.length==0){
		document.form_login.reset();
		document.form_login.e_mail.focus();
		//document.form_login.e_mail.select();
		alert("Debe introducir un usuario y una clave de acceso.");
		return;	
	}
	var sha1_clave=hex_sha1(clave);
	document.form_login.clave.value="";
	var sha1_resul=hex_sha1(sha1_clave+clave_publica);
	var url_param="?e_mail="+escape(e_mail)+"&clave_sha1="+escape(sha1_resul);
	var div_center=document.getElementById("center");
	//llamarasincrono("procesa_login.php"+url_param,"center"); 
    ajax=nuevoAjax();
    ajax.open("GET", "procesa_login.php"+url_param,true);
	ajax.onreadystatechange=function() {
     if (ajax.readyState==4) {
		var xml=ajax.responseXML.documentElement;
		var num=xml.getElementsByTagName("num")[0].firstChild.data;
		if(num==0){
			var nivel=xml.getElementsByTagName("mensaje")[0].firstChild.data;
			ajax_sinc("menu.php","leftmenu");
			if(nivel==-1)
				llamarasincrono("editar_contenido.php","center");
			else 
				llamarasincrono("contenido.php","center");
		}else{
			var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
			div_center.innerHTML="<h2 align=center>"+mensaje+"</h2>";
		}
     }else
     	div_center.innerHTML="<center><img src='img/progreso.gif' alt='' /></center>";
	}
	ajax.send(null);		
}

function cambiar_clave(clave_publica){
	var clave=trim(document.frm_cam_clave.clave.value);
	var nueva_clave=trim(document.frm_cam_clave.nueva_clave.value);
	var conf_clave=trim(document.frm_cam_clave.conf_clave.value);
	if(clave=="" ||nueva_clave=="" || conf_clave==""){
		alert("Debe llenar todos los campos.");
		return;	
	}
	if(nueva_clave!=conf_clave){
		alert("Error:\nClaves diferentes.");
		return;	
	}
	if(nueva_clave.length<5){
		alert("La nueva clave debe tener como mínimo 5 caracteres.");
		document.frm_cam_clave.nueva_clave.value="";
		document.frm_cam_clave.conf_clave.value="";
		document.frm_cam_clave.nueva_clave.focus();
		return;
	}
	document.frm_cam_clave.clave.value="";
	document.frm_cam_clave.nueva_clave.value="";
	document.frm_cam_clave.conf_clave.value="";
	var sha1_nueva_clave=hex_sha1(nueva_clave);	
	var sha1_resul=hex_sha1(hex_sha1(clave)+clave_publica);
	var url_param="?clave="+escape(sha1_resul)+"&nueva_clave="+escape(sha1_nueva_clave);
	var div_center=document.getElementById("center");
	ajax=nuevoAjax();
    ajax.open("GET","procesa_cambiar_clave.php"+url_param,true);
	ajax.onreadystatechange=function() {
     if (ajax.readyState==4) {
		var xml=ajax.responseXML.documentElement;
		var num=xml.getElementsByTagName("num")[0].firstChild.data;
		var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
		alert(mensaje);
		switch(parseInt(num)){
			case -1:
				ajax_sinc("menu.php","leftmenu");
				llamarasincrono("login.php","center");
				return;
			case 0:
				llamarasincrono("contenidos/inicio.htm","center");
				break;
			default:
				llamarasincrono("cambiar_clave.php","center");
		}
     }else
     	div_center.innerHTML="<center><img src='img/progreso.gif' alt='' /></center>";
	}
	ajax.send(null);		
}

function eliminar_archivo(id) {
	if(!confirm("¿Esta seguro de eliminar este archivo?"))
		return;
    ajax=nuevoAjax();
    ajax.open("GET", "accion_archivo.php?accion=eliminar&id="+id,true);
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4) {
			var xml=ajax.responseXML.documentElement;
			var num=xml.getElementsByTagName("num")[0].firstChild.data;
			if(num==-1){
				var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
				alert(mensaje);
				ajax_sinc("menu.php","leftmenu");
				llamarasincrono("login.php","center");
				return;
			}	
			if(num==0) 
				alert("Error al intentar eliminar el archivo.");
			llamarasincrono("editar_contenido.php","center");
		}
	}
	ajax.send(null);			
}
function eliminar_archivo_img(id) {
	if(!confirm("¿Esta seguro de eliminar este archivo?"))
		return;
    ajax=nuevoAjax();
    ajax.open("GET", "accion_archivo_album.php?accion=eliminar&id="+id,true);
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4) {
			var xml=ajax.responseXML.documentElement;
			var num=xml.getElementsByTagName("num")[0].firstChild.data;
			if(num==-1){
				var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
				alert(mensaje);
				ajax_sinc("menu.php","leftmenu");
				llamarasincrono("login.php","center");
				return;
			}	
			if(num==0) 
				alert("Error al intentar eliminar el archivo.");
			llamarasincrono("editar_album.php","center");
		}
	}
	ajax.send(null);			
}

function cargar_alumno(){
	var frm=document.frm_alumn;
	if(trim(frm.nombre.value)==""){
		alert("Debe introducir un nombre.");
		frm.nombre.value="";
		frm.nombre.focus();
		return;
	}
	if(trim(frm.email.value)==""){
		alert("Debe introducir un e-mail.");
		frm.email.value="";
		frm.email.focus();
		return;		
	}
	var i;
	var param_post="";
	for(i=0;i<frm.elements.length;i++){
		if(frm.elements[i].type!="submit"){
			param_post+=(param_post=="")?"":"&";
			param_post+=frm.elements[i].name+"="+escape(trim(frm.elements[i].value));		
		}
	}
    ajax=nuevoAjax();
    ajax.open("POST","accion_alumno.php?accion=agregar",true);
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4) {
			var xml=ajax.responseXML.documentElement;
			var num=xml.getElementsByTagName("num")[0].firstChild.data;
			if(xml.getElementsByTagName("mensaje")[0].firstChild)
				var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
			num=parseInt(num);
			switch (num) {
				case -1:
					alert(mensaje);
					ajax_sinc("menu.php","leftmenu");
					llamarasincrono("login.php","center");
					return;
				case 0:
					llamarasincrono("alumnos.php","center");
					break;
				case 1:
					alert(mensaje);
					document.frm_alumn.email.focus();
					break;
				case 2:	
					alert("Error:\n"+mensaje);	
					document.frm_alumn.reset();
					document.frm_alumn.nombre.focus();	
					break;		
			}
		}
	}
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", param_post.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(param_post);
}

function editar_alumno(){
	var frm=document.frm_act_alumn;
	var i;
	var param_post="";
	for(i=0;i<frm.elements.length;i++){
		if(frm.elements[i].type!="submit"){
			param_post+=(param_post=="")?"":"&";
			param_post+=frm.elements[i].name+"="+escape(trim(frm.elements[i].value));		
		}
	}
	alert(param_post);
}

function editar_alumno_(){
	alert("se pulso una tecla\n");	
}

function eliminar_alumno(id){
	if(!confirm("¿Esta seguro de eliminar a este alumno de la base de datos?"))
		return;
    ajax=nuevoAjax();
    ajax.open("GET", "accion_alumno.php?accion=eliminar&id="+id,true);
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4) {
			var xml=ajax.responseXML.documentElement;
			var num=xml.getElementsByTagName("num")[0].firstChild.data;
			if(num==-1){
				var mensaje=xml.getElementsByTagName("mensaje")[0].firstChild.data;
				alert(mensaje);
				ajax_sinc("menu.php","leftmenu");
				llamarasincrono("login.php","center");
				return;
			}	
			if(num==0) 
				alert("Error al intentar eliminar el archivo.");
			llamarasincrono("alumnos.php","center");			
		}
	}
	ajax.send(null);		
}

function logout(){
	ajax_sinc("logout.php","center")
	ajax_sinc("menu.php","leftmenu");
	llamarasincrono("contenidos/inicio.htm","center");
}

function subir_archivo(){
	document.getElementById("frm_argegar_archivo").style["display"] = "none";
	var frm=document.getElementById("estado");
	frm.innerHTML="<br />Subiendo...<center><img src='img/progreso.gif' alt='' /></center>";
}

function subir_archivo_resp(num,mensaje){
	switch (num){
		case 0:
			llamarasincrono("editar_contenido.php","center");
		//	alert("El archivo se guardo correctamente.");
			break;
		case 1:
			ajax_sinc("agregar_archivo.php","center");
			alert("No se ha podido guardar el archivo en la base de datos.");
			break;
		case 2:
			ajax_sinc("agregar_archivo.php","center");
			alert("No se ha podido subir el archivo al servidor.");
		case 3:
			var div_center=document.getElementById("center");
			div_center.innerHTML="<h2 align=center>"+mensaje+"</h2>";				
	}
}
function subir_imagen_resp(num,mensaje){
	switch (num){
		case 0:
			llamarasincrono("agregar_imagen.php","center");
		//	alert("El archivo se guardo correctamente.");
			break;
		case 1:
			ajax_sinc("agregar_imagen.php","center");
			alert("No se ha podido guardar el archivo en la base de datos.");
			break;
		case 2:
			ajax_sinc("agregar_imagen.php","center");
			alert("No se ha podido subir el archivo al servidor.");
		case 3:
			var div_center=document.getElementById("center");
			div_center.innerHTML="<h2 align=center>"+mensaje+"</h2>";				
	}
}

function getIFrameDocument(id) {  
	var i = document.getElementById(id);  
	if (i.contentDocument) {  
		var d = i.contentDocument;  
	} else if (i.contentWindow) {  
		var d = i.contentWindow.document;  
	} else {  
		var d = window.frames[id].document;  
	}  
	return d;
}  

function ajax_asinc_post(url,param_post,id_div) {
    var cont=document.getElementById(id_div);
    ajax=nuevoAjax();
    ajax.open("POST",url,true);
    ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			cont.innerHTML = ajax.responseText;
		}
	}
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", param_post.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(param_post);
}

