// Esta es para llamado de datos remotos via xmlHttpRequest

function datosServidor() {
};
datosServidor.prototype.iniciar = function() {
	try {
		// Mozilla / Safari
		this._xh = new XMLHttpRequest();
	} catch (e) {
		// Explorer
		var _ieModelos = new Array(
		'MSXML2.XMLHTTP.5.0',
		'MSXML2.XMLHTTP.4.0',
		'MSXML2.XMLHTTP.3.0',
		'MSXML2.XMLHTTP',
		'Microsoft.XMLHTTP'
		);
		var success = false;
		for (var i=0;i < _ieModelos.length && !success; i++) {
			try {
				this._xh = new ActiveXObject(_ieModelos[i]);
				success = true;
			} catch (e) {
				// Implementar manejo de excepciones
			}
		}
		if ( !success ) {
			// Implementar manejo de excepciones, mientras alerta.
			return false;
		}
		return true;
	}
}

datosServidor.prototype.ocupado = function() {
	estadoActual = this._xh.readyState;
	return (estadoActual && (estadoActual < 4));
}

datosServidor.prototype.procesa = function() {
	if (this._xh.readyState == 4 && this._xh.status == 200) {
		this.procesado = true;
	}
}

datosServidor.prototype.enviar = function(urlget,datos) {
	if (!this._xh) {
		this.iniciar();
	}
	if (!this.ocupado()) {
		this._xh.open("GET",urlget,false);
		this._xh.send(datos);
		if (this._xh.readyState == 4 && this._xh.status == 200) {
			return this._xh.responseText;
		}
		
	}
	return false;
}


// Este es un acceso rapido, le paso la url y el div a cambiar
function _gr(reqseccion,divcont) {
	remotos = new datosServidor;
	nt = remotos.enviar(reqseccion,"");
	document.getElementById(divcont).innerHTML = nt;
}

// Esta es para generar un base64 encoding igual al de php, lo uso porque puede haber caracteres
// especiales en el contenido, y me parece más seguro mandarlo codificado
// Además de que ofusca un poco la forma de llamado directo a la URL

function base64() {
}
base64.chars = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
base64.cadena = "";
base64.cuenta = 0;
base64.setCadena = function (str){
    base64.cadena = str;
    base64.cuenta = 0;
}
base64.read = function (){    
    if (!base64.cadena) return "END_OF_INPUT";
    if (base64.cuenta >= base64.cadena.length) return "END_OF_INPUT";
    var c = base64.cadena.charCodeAt(base64.cuenta) & 0xff;
    base64.cuenta++;
    return c;
}
base64.prototype.encode = function (str){
    base64.setCadena(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = base64.read()) != "END_OF_INPUT"){
        inBuffer[1] = base64.read();
        inBuffer[2] = base64.read();
        result += (base64.chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != "END_OF_INPUT"){
            result += (base64.chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != "END_OF_INPUT"){
                result += (base64.chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64.chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64.chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64.chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('\n');
            lineCount = 0;
        }
    }
    return result;
}
b64 = new base64;



// Aqui convertimos el texto en un input
function cambia(nn,actual) {
	elem = document.getElementById("cont" + nn + "top");
	elem.innerHTML = "<input maxlength=\"30\"type=\"text\" value=\"" + actual.innerHTML + "\" size=\"30\" onkeypress=\"return guardaEnter(this,event," + nn + ")\" onblur=\"return guardaBlur(this," + nn + ")\" />";
	elem.firstChild.focus();
}

//Estas dos son para guardar

var urlBase = "guarda.php?coded=";


function guardaEnter(campo,evt,idfld) {
	evt = (evt) ? evt : window.event;
	if (evt.keyCode == 13 && campo.value!="") {
		campo.value = campo.value.replace("/\|/","");
		elem = document.getElementById("cont" + idfld + "top");
		remotos = new datosServidor;
		nt = remotos.enviar(urlBase + escape(b64.encode(elem.className + "|" + campo.value)),"");
		elem.innerHTML = "<span ondblclick=\"cambia(" + idfld + ",this);\">" + nt + "</span>";
		//elem.innerHTML = urlBase + escape(b64.encode(elem.className + "|" + campo.value));
		return false;
	} else {
		return true;
	}
}

function guardaBlur(campo,idfld) {
	if (campo.value!="") {
		campo.value = campo.value.replace("/\|/","");
		elem = document.getElementById("cont" + idfld + "top");
		remotos = new datosServidor;
		nt = remotos.enviar(urlBase + escape(b64.encode(elem.className + "|" + campo.value)),"");
		elem.innerHTML = "<span ondblclick=\"cambia(" + idfld + ",this);\"></span>";
		elem.firstChild.innerHTML = nt;
		return false;
	}
}

