/* Documento JavaScript
 *  Nova Messenger v1.0
 * Author: Carlos Rodriguez Guette
 * Email: carlosrogue@gmail.com
 * Copyright 2008
 * Este documento contiene las funciones pertenecientes al módulo de Chat, 
 * para servicio técnico y de ventas de Novamedica ltda. Equipos Médicos
*/

// Esta función abre la ventana que contiene el Nova Messenger
function novamessenger (){
	NovaMessenger('chat.php','Messenger','scrollbars=yes,width=500,height=516,top=50,left=600');
}

var nmWin;

function NovaMessenger(urlStr,winName,winOpt) {

    if(nmWin == null || nmWin == undefined){
    	//alert("bmWin is null");
	    nmWin = window.open(urlStr,winName,winOpt);
        if (nmWin.opener == null) nmWin.opener = window;
        nmWin.opener.name = "opener";
	    nmWin.focus();
    }else{
	    if(nmWin.closed == true){
		    //alert("bmWin is closed");
		    nmWin = window.open(urlStr,winName,winOpt);
            if (nmWin.opener == null) nmWin.opener = window;
            nmWin.opener.name = "opener";
	    }else{
		    //alert("bmWin already open");
		    nmWin.location.href = urlStr;
		    nmWin.focus();
	    }
    }
}

//this function create an XMLHTTP object, depending of browser type
function createAjaxObj(){
	try {
		req = new XMLHttpRequest(); /* e.g. Firefox */
	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");  /* some versions IE */
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");  /* some versions IE */
			} catch (E) {
				req = false;
			}
		}
	}
	return req;
}

//Esta función verifica y se encarga de mantener actualizada la ventana de chat
function checkearChat(){
	setTimeout(checkearChat,5000);
	 if(nmWin == null || nmWin == undefined){
		preCheck();
	}else{
		if(nmWin.closed == true){
			preCheck();
		}
	}
}

var canPreCheck = true;

//Esta función se encarga de verificar si desde el momento que hemos ingresado hemos recibido nuevos mensajes
function preCheck(){
	if(canPreCheck){
		canPreCheck = false;
		var prechecker = createAjaxObj();
		if(prechecker){
			prechecker.onreadystatechange = function() {
				canPreCheck = true;
				//A continuación, recorremos el arbol XML
				if(prechecker.readyState == 4) {
					if(prechecker.status == 200) {
						var somethingNew = prechecker.responseText;
						if ( somethingNew == 1 ){
							novamessenger();
						}
					}
				}
			};
			prechecker.open("GET","chat.php?action=checkUpdate",true);
			prechecker.send(null);
		}
	}
}

// Esta función cargará las paginas
function verificar (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor);
    }
    //document.getElementById(id_contenedor).innerHTML = '<img src="images/loading.gif" />';
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}

//Funciones de Ajax

// Esta función cargará las paginas
function llamarasincrono (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor);
    }
    document.getElementById(id_contenedor).innerHTML = '<img src="images/chat/loading.gif" /><br><span class="text">Cargando el contenido. Por favor, espere...</span>';
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}

// todo es correcto y ha llegado el momento de poner la información requerida
// en su sitio en la pagina xhtml
function cargarpagina (pagina_requerida, id_contenedor)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
    document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;
}

function enviarFormulario(frm,page,id_contenedor){
	var ajax = false;
    if (window.XMLHttpRequest){
        // Si es Mozilla, Safari etc
        ajax = new XMLHttpRequest ();
    } else if (window.ActiveXObject){
        // pero si es IE
        try {
            ajax = new ActiveXObject ("Msxml2.XMLHTTP");
        }catch (e){
            // en caso que sea una versión antigua
            try{
                ajax = new ActiveXObject ("Microsoft.XMLHTTP");
            }catch (e){ }
        }
    } 
    else
	    return false;
	document.getElementById(id_contenedor).innerHTML = '<img src="images/chat/loading.gif" /> Cargando contenido. Espere, por favor...';
	ajax.open("POST", page,true);
    ajax.onreadystatechange = function (){
        // función de respuesta
        cargarpagina (ajax, id_contenedor);
    }
	ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	ajax.send(getFormValues(frm));
}

function getFormValues(frm){
	var objForm;
	var submitDisabledElements=false;
	if(arguments.length > 1&&arguments[1]==true)
		submitDisabledElements=true;
	
	var prefix="";
	if(arguments.length > 2)
		prefix=arguments[2];
	
	if(typeof(frm)=="string")
		objForm= document.getElementById(frm);
	else
		objForm=frm;

	var sXml="";
	if(objForm&&objForm.tagName=='FORM'){
		var formElements=objForm.elements;
		for(var i=0;i < formElements.length;i++){
			if(!formElements[i].name)
				continue;
			if(formElements[i].name.substring(0,prefix.length)!=prefix)
				continue;
			if(formElements[i].type&&(formElements[i].type=='radio'||formElements[i].type=='checkbox')&&formElements[i].checked==false)
				continue;
			if(formElements[i].disabled&&formElements[i].disabled==true&&submitDisabledElements==false)
				continue;
			var name=formElements[i].name;
			if(name){
				if(sXml!='')
					sXml+='&';
				if(formElements[i].type=='select-multiple'){
					for(var j=0;j < formElements[i].length;j++){
						if(formElements[i].options[j].selected==true)
							sXml+=name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";
					}
				}else{
					sXml+=name+"="+encodeURIComponent(formElements[i].value);
				}
			}
		}
	}
	return sXml;
}