Subversion Repositories bacoAlunos

Rev

Rev 166 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 *
 * AJAX Functions
 *
 * This code is protected under GNU LGPL License
 *
 * @author Jorge Machado
 * @date April 2008
 **/


/**
 * Starts XMLHTTP Ajax request
 *
 * @author Jorge Machado
 * @date April 2008
 *
 * params:
 * @params HTTP GET Parameters for query string
 * @xmlHttpRequest request
 * @id target element
 * @stateChanged target function
 * @innerPhrase to put while waiting for response
 * @navjsp requested jsp
 */

function startRequest(xmlHttpRequest,params,id,stateChanged,innerPhrase,navjsp)
{
    var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
    if(innerPhrase != '')
        getObjectById(id).innerHTML = innerPhrase;
    if (xmlHttpRequest==null)
    {
        alert ("Browser does not support HTTP Request");
        return;
    }
    var finalParams = "";
    var url= navjsp;
    if(params != null && params.length > 0)
    {
        //url=url+"?"+ params;
        //url=url+"&sid="+Math.random();
        url=url+"?sid="+Math.random();
        var paramsArray = params.split("&");
        var i;
        var union = '';
        for(i = 0; i < paramsArray.length; i++){
            var parameter = paramsArray[i].split("=");
            if(parameter.length == 2)
            {
                finalParams += union + parameter[0] + '=' + encodeURIComponent(parameter[1]);
                union = '&';
            }
        }
    }
    else
    {
        url=url+"?sid="+Math.random();
    }

    xmlHttpRequest.onreadystatechange=stateChanged;
    xmlHttpRequest.open("POST",url,true);
    xmlHttpRequest.setRequestHeader("Content-Type", contentType);
    xmlHttpRequest.send(finalParams);
}

/**
 * Return an HTML element given ID
 *
 * @author Jorge Machado
 * @date April 2008
 *
 * params:
 * @objectId required object
 */

function getObjectById(objectId)
{
    // cross-browser function to get an object's style object given its id
    try
    {
        if(document.getElementById && document.getElementById(objectId))
        {
            // W3C DOM
            return document.getElementById(objectId);
        }
        else if (document.all(objectId))
        {
            // MSIE 4 DOM
            return document.all(objectId);
        }
        else if (document.layers && document.layers[objectId])
        {
            // NN 4 DOM.. note: this won't find nested layers
            return document.layers[objectId];
        }
        else
        {
            return false;
        }
    }
    catch(e)
    {
        return false;
    }
}

function hide(id,showId)
{
    getObjectById(id).style.visibility='hidden';
    getObjectById(id).style.position='absolute';
    getObjectById(showId).style.visibility='visible';
    getObjectById(showId).style.position='relative';
}
function show(id,hideId)
{
    getObjectById(id).style.visibility='visible';
    getObjectById(id).style.position='relative';
    getObjectById(hideId).style.visibility='hidden';
    getObjectById(hideId).style.position='absolute';
}
function show(id)
{
    getObjectById(id).style.visibility='visible';
    getObjectById(id).style.position='relative';
}
function showOrHide(id)
{
    if(getObjectById(id).style.visibility == 'hidden')
    {
        show(id);
    }
    else
        hide(id);
}

function showOrHide(id,hideValue,showValue)
{
    if(getObjectById(id).style.visibility == 'hidden')
    {
        show(id);
        return showValue;
    }
    else
    {
        hide(id);
        return hideValue;
    }
}
function hide(id)
{
    getObjectById(id).style.visibility='hidden';
    getObjectById(id).style.position='absolute';
}

/**
 * Creates a new XmlHttpObject
 * @author Jorge Machado
 * @date April 2008
 *
 * params:
 * @handler target xmlHttpObject function
 */

function GetXmlHttpObject(handler)
{
    var objXmlHttp = null;
    if (navigator.userAgent.indexOf("Opera")>=0)
    {
        alert("This example doesn't work in Opera") ;
        return objXmlHttp;
    }
    if (navigator.userAgent.indexOf("MSIE")>=0)
    {
        var strName="Msxml2.XMLHTTP";
        if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
        {
            strName="Microsoft.XMLHTTP";
        }
        try
        {
            objXmlHttp=new ActiveXObject(strName);
            objXmlHttp.onreadystatechange=handler ;
            return objXmlHttp;
        }
        catch(e)
        {
            alert("Error. Scripting for ActiveX might be disabled") ;
            return objXmlHttp;
        }
    }
    if (navigator.userAgent.indexOf("Mozilla")>=0)
    {
        objXmlHttp=new XMLHttpRequest();
        objXmlHttp.onload=handler;
        objXmlHttp.onerror=handler;
        return objXmlHttp;
    }
}

/***************************************************
 TopFlashNews
 ***************************************************/

var xmlHttpTopFlashNews;
var getFlashNewsTimeout;
var getFlashNewsJsp;

function getFlashNews(jsp,timeout)
{
    getFlashNewsJsp = jsp;
    getFlashNewsTimeout = timeout;
    getFlashNewsTimeoutCall();
}
function getFlashNewsTimeoutCall()
{
    xmlHttpTopFlashNews=GetXmlHttpObject(stateChangedGetFlashNews);
    startRequest(xmlHttpTopFlashNews,"","flashTopNews",stateChangedGetFlashNews,"",getFlashNewsJsp)
}
function stateChangedGetFlashNews()
{
    if (xmlHttpTopFlashNews.readyState==4 || xmlHttpTopFlashNews.readyState=="complete")
    {
        getObjectById("flashTopNews").innerHTML=xmlHttpTopFlashNews.responseText;
        setTimeout(getFlashNewsTimeoutCall,getFlashNewsTimeout);
    }
}


/***************************************************
 Search
 ***************************************************/

var xmlHttpSearch;
var searchResultsDiv;

function searchCall(div,query,searchType,page,module,action)
{
    searchResultsDiv = div;
    xmlHttpSearch=GetXmlHttpObject(stateChangedSearchCall);
    startRequest(xmlHttpSearch,"dispatch=searchModule&query=" + query + "&searchType=" + searchType + "&page=" + page + "&module=" + module,"",stateChangedSearchCall,"",action);
}
function stateChangedSearchCall()
{
    if (xmlHttpSearch.readyState==4 || xmlHttpSearch.readyState=="complete")
    {
        getObjectById(searchResultsDiv).innerHTML=xmlHttpSearch.responseText;
    }
}


/***************************************************
 Pop
 ***************************************************/

var xmlHttpPop;
var popDiv;

function loadPop(div,action)
{
    popDiv = div;
    xmlHttpPop=GetXmlHttpObject(stateChangedPopCall);
    startRequest(xmlHttpPop,"","",stateChangedPopCall,"",action);
}
function stateChangedPopCall()
{
    if (xmlHttpPop.readyState==4 || xmlHttpPop.readyState=="complete")
    {
        getObjectById(popDiv).innerHTML=xmlHttpPop.responseText;
    }
}

/***************************************************
 Reminders
 ***************************************************/


var activeRemindersCounter = 0;
var expiredRemindersCounter = 0;

function setActiveReminders(active)
{
    activeRemindersCounter = active;
}
function setExpiredReminders(expired)
{
    expiredRemindersCounter = expired;
}

var xmlHttpReminder;
var newReminderId;
var reminderFormId;
var putMsgId;
var putOkMsg;
var putFailMsg;

function putReminder(startDate,expireDate,text,newReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg)
{
    newReminderId = newReminderDiv;
    reminderFormId = reminderFormDiv;
    putMsgId = msgDiv;
    putOkMsg = okMsg;
    putFailMsg = failMsg;
    getObjectById(putMsgId).innerHTML = waitMsg;
    xmlHttpReminder=GetXmlHttpObject(stateChangedPutReminderCall);
    startRequest(xmlHttpReminder,"dispatch=save&startDate="+startDate+"&expireDate="+expireDate+"&reminderView.text="+ text,"",stateChangedPutReminderCall,"",action);
//    hide(reminderFormId);
    show(putMsgId);
}
function stateChangedPutReminderCall()
{
    if (xmlHttpReminder.readyState==4 || xmlHttpReminder.readyState=="complete")
    {
        if(xmlHttpReminder.responseText.indexOf("<div class=\"messages\">") >= 0)
        {
            getObjectById(putMsgId).innerHTML = xmlHttpReminder.responseText;
        }
        else
        {
            getObjectById(putMsgId).innerHTML = '<div class="statusOK">' + putOkMsg + '</div>';
            activeRemindersCounter++;
            show('activeReminders');
            getObjectById(newReminderId).innerHTML = xmlHttpReminder.responseText + getObjectById(newReminderId).innerHTML;
        }
    }
    setTimeout(cleanReminderStatus,3000);
}
function cleanReminderStatus()
{
   getObjectById(putMsgId).innerHTML = '';
}

function deleteExpiredReminder(id,deleteReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg)
{
    deleteReminder(id,deleteReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg,stateChangedDeleteExpiredReminderCall);
}
function deleteActiveReminder(id,deleteReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg)
{
    deleteReminder(id,deleteReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg,stateChangedDeleteActiveReminderCall);
}
function deleteReminder(id,deleteReminderDiv,msgDiv,reminderFormDiv,action,waitMsg,okMsg,failMsg,callBack)
{
    newReminderId = deleteReminderDiv;
    reminderFormId = reminderFormDiv;
    putMsgId = msgDiv;
    putOkMsg = okMsg;
    putFailMsg = failMsg;
    getObjectById(putMsgId).innerHTML = waitMsg;
    xmlHttpReminder=GetXmlHttpObject(callBack);
    startRequest(xmlHttpReminder,"dispatch=delete&id="+id,"",callBack,"",action);
//    hide(reminderFormId);
    show(putMsgId);
}

function stateChangedDeleteExpiredReminderCall()
{
    expiredRemindersCounter--;
    stateChangedDeleteReminderCall();
    if(expiredRemindersCounter <= 0)
    {
        hide('expiredReminders');
    }
    if(expiredRemindersCounter < 0)
        expiredRemindersCounter = 0;
}
function stateChangedDeleteActiveReminderCall()
{
    stateChangedDeleteReminderCall();
    activeRemindersCounter--;

    if(activeRemindersCounter <= 0)
    {
        hide('activeReminders');
    }
    if(activeRemindersCounter < 0)
        activeRemindersCounter = 0;
}
function stateChangedDeleteReminderCall()
{
    if (xmlHttpReminder.readyState==4 || xmlHttpReminder.readyState=="complete")
    {
        if(xmlHttpReminder.responseText.indexOf("<div class=\"messages\">") >= 0)
        {
            getObjectById(putMsgId).innerHTML = xmlHttpReminder.responseText;
        }
        else
        {
            getObjectById(putMsgId).innerHTML = '<div class="statusOK">' + putOkMsg + '</div>';
            getObjectById(newReminderId).innerHTML = '';
        }
    }
    setTimeout(cleanReminderStatus,3000);
}