var GLB_OBJETOS = new Array();

var base64s =
 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function encode(decStr){
	//decStr=escape(decStr);		//line add for chinese char
	
  var bits, dual, i = 0, encOut = '';
  while(decStr.length >= i + 3){
    bits =
    (decStr.charCodeAt(i++) & 0xff) <<16 |
    (decStr.charCodeAt(i++) & 0xff) <<8  |
     decStr.charCodeAt(i++) & 0xff;
    encOut +=
     base64s.charAt((bits & 0x00fc0000) >>18) +
     base64s.charAt((bits & 0x0003f000) >>12) +
     base64s.charAt((bits & 0x00000fc0) >> 6) +
     base64s.charAt((bits & 0x0000003f));
    }
  if(decStr.length -i > 0 && decStr.length -i < 3){
    dual = Boolean(decStr.length -i -1);
    bits =
     ((decStr.charCodeAt(i++) & 0xff) <<16) |
     (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
    encOut +=
      base64s.charAt((bits & 0x00fc0000) >>18) +
      base64s.charAt((bits & 0x0003f000) >>12) +
      (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +
      '=';
    }
  return encOut
  }

function decode(encStr) {
  var bits, decOut = '', i = 0;
  for(; i<encStr.length; i += 4){
    bits =
     (base64s.indexOf(encStr.charAt(i))    & 0xff) <<18 |
     (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | 
     (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
      base64s.indexOf(encStr.charAt(i +3)) & 0xff;
    decOut += String.fromCharCode(
     (bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
    }
  if(encStr.charCodeAt(i -2) == 61)
    undecOut=decOut.substring(0, decOut.length -2);
  else if(encStr.charCodeAt(i -1) == 61)
    undecOut=decOut.substring(0, decOut.length -1);
  else undecOut=decOut;
  
  return unescape(undecOut);		//line add for chinese char
 
}

function getObjectType(objeto) {

	if(objeto instanceof Date)
		return "date";
	if(objeto instanceof Array)
		return "array";
	if(objeto instanceof String)
		return "string";
	if(objeto instanceof Number)
	{
		if(Math.round(objeto) == objeto)
			return "number";
		else
			return "float";	
	}
	if(objeto && objeto.clase)
		return objeto.clase;
	
	if(!isNaN(objeto))		
	{
		var aux1 = parseInt(objeto);
		if(!isNaN(aux1))
			return "number";
		
		var aux2 = parseFloat(objeto);
		if(!isNaN(aux2))
			return "float";
	}	

	return typeof objeto;	
}

function serialize(objeto, id)
{
    var r = ""
	if (id)
		r = "<o class='"+ getObjectType(objeto)+ "' id='" + id +  "'>\r\n"
	var ele = "o";
	if (objeto instanceof Array)
		 ele = "r";
		for (i in objeto)
		{
		    if (objeto[i] == null)
		    {
				continue;
		    }
			var tmpClass = getObjectType(objeto[i]);
			
			r += "<" + ele + " id='"+ i + "' class='"+ tmpClass + "'>"
			if (tmpClass == "number" || tmpClass == "float" || tmpClass == "string" )
				r += objeto[i];
			else	
			if (tmpClass == "date")
				r += SerializeFecha(objeto[i]);
			else
				r += "\r\n" + serialize(objeto[i])
				
				
				r += "</" + ele + ">\r\n"	
			}	
	
	if (id)
		r += "</o>";
	
	return r;
}  
function enviar()
{
	var envio = "<root>"
	for (i in GLB_OBJETOS)
		envio += serialize(GLB_OBJETOS[i], i);
	envio += "</root>";
	return envio;
}

function enviarServicio(datos)
{
	var envio = "<root>"
	for (i in datos)
		envio += serialize(GLB_OBJETOS[datos[i]], datos[i]);
	envio += "</root>";
	return envio;
}

function getHTTPObject() 
{ 
	var xmlhttp;
	if(browser.isNS) 
		xmlhttp = new XMLHttpRequest();
	else if(browser.isIE) 
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	
	return xmlhttp;
}

//Invoca a un servicio web y ejecuta un código javascript una vez que la operación ha finalizado.
function CallWebService(url, metodo, datos, js, f)
{
    var res;
	var xml = getHTTPObject();
	xml.open("POST", url + "/" + metodo,true);
	xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xml.onreadystatechange = function() {
	    if (xml.ResponseXml && xml.ResponseXml.documentElement)
	        res = xml.ResponseXml.documentElement.text;
	    else if (xml.responseXML && xml.responseXML.documentElement)
	        res = xml.responseXML.documentElement.textContent;

	    if (res != null && res.indexOf('<error>GetPermisoSuceso') >= 0) {
            res = "<error>No existe la noticia en este canal</error>";
	    }


	    if (xml.readyState == 4) {
	        //		if(res!=null && res.indexOf("<table")>=0 && res.indexOf("<br",res.indexOf("<div id='noti'>")<0)){
	        //		
	        //		for(var i=0; i<100;i++){
	        //		    var indiceScript=res.indexOf("<script")
	        //		    var indicern=res.indexOf("\n");
	        //		    if(indicern< indiceScript){
	        //		       // res= res.replace("\r\n","<br>");
	        //		        res= res.replace("\n","<br>");
	        //		        //res= res.replace("\r","<br>");
	        //		        //res= res.replace("\t","<br>");
	        //		    }else
	        //		        i=100;
	        //		    //res= res.replace(chr(10),"<br>");
	        //		
	        //		}
	        //		//alert(res);
	        //		}

	        //Ocultar la barra de progreso
	        document.getElementById("Main_barraProgreso").style.display = "none";
	        document.getElementById("Main_navegacion").style.display = "";
	        if (js && js != "")
	            eval(js);
	        try {
	            if (Canaljuventud != null) ocultarImagen();
	        } catch (err) { }


	    }
	}
	//Mostrar la barra de progreso
	document.getElementById("Main_navegacion").style.display = "none";
	document.getElementById("Main_barraProgreso").style.display = "block";
	
	//llamada en otro hilo para permitir actualizar el interfaz    
	if(!f)
	  window.setTimeout( function () {xml.send("datos="+enviarServicio(datos));}, 10 );
	else
	  window.setTimeout( function () {xml.send(datos);}, 10 );
	
}


function SerializeFecha(d)
{
    alert(d);	
	var s = "";
	s = d.getFullYear() + " ";	
	s += (d.getMonth() + 1) + " ";
	s += d.getDate() + " ";
	s += d.getHours() + " ";
	s += d.getMinutes() + " ";
	s += d.getSeconds() + " " +  - (d.getTimezoneOffset() / 60) ;
	return s;
}
