var g_numseq  = new Array();
var g_currentseq  = new Array();
var repeat_timed = new Array();
var isIE = false;
var responses_html = new Array();
var divnames = new Array();


function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}


function nextGroup(user_data, ud2) {
 
    
    var user_div = document.getElementById (user_data);
    
    //user_div.innerHTML = "";
    
    g_currentseq[ud2]++;
    
    if (g_currentseq[ud2] >= g_numseq[ud2]) { g_currentseq[ud2] = 0;}
    
    user_div.innerHTML =  responses_html[ud2][g_currentseq[ud2]];    
    
    
    
}

function doneGroupsLoadXML(str, xmlstr, user_data, user_data2, user_data3, user_data4) {
    
    var user_div = document.getElementById (user_data);
    
    user_div.innerHTML = "";
    
    //  user_div.innerHTML +=     str; 
    
     // user_div.innerHTML +=     xmlstr; 
    
    if (xmlstr != null) {
        var items = xmlstr.getElementsByTagName("newsitem");
        
        if (items.length) {
            
                user_div.innerHTML += " " + items.length;
            
            if (g_numseq[user_data2] > items.length) {g_numseq[user_data2] = items.length;}
            g_currentseq[user_data2] = Math.floor(Math.random() * (g_numseq[user_data2] - 1));
            
            // alert("start:\n" + g_currentseq[user_data2]);

            
            responses_html[user_data2] = new Array();
            
            for (var i = 0; i < items.length; i++) {
                
                //var mcontent = getElementTextNS("content", "encoded", items[i], 0);
                var mcontent = getElementTextNS("", "body", items[i], 0);

                responses_html[user_data2].push (mcontent);
                
                //user_div.innerHTML += mcontent;
                
            }
            
            user_div.innerHTML = responses_html[user_data2][g_currentseq[user_data2]];
            
           // setTimeout("testtimer('" + user_data + "', " + user_data2 + ")", repeat_timed[user_data2] );
        }
    }
}



function doneLoadXML(str, xmlstr, user_data, user_data2, user_data3, user_data4) {
    
    var user_div = document.getElementById (user_data);
    
    user_div.innerHTML = "";
    
  //  user_div.innerHTML +=     str; 
    
  //  user_div.innerHTML +=     xmlstr; 

    if (xmlstr != null) {
    var items = xmlstr.getElementsByTagName("newsitem");
    
        if (items.length) {
        
        //    user_div.innerHTML += " " + items.length;
    
            if (g_numseq[user_data2] > items.length) {g_numseq[user_data2] = items.length;}
            g_currentseq[user_data2] = 0;
            
            responses_html[user_data2] = new Array();
            
            for (var i = 0; i < items.length; i++) {
                
              //  var mcontent = getElementTextNS("content", "encoded", items[i], 0);
                var mcontent = getElementTextNS("", "body", items[i], 0);

                responses_html[user_data2].push (mcontent);
                
                //user_div.innerHTML += mcontent;
                
            }
            
            user_div.innerHTML = responses_html[user_data2][0];
            
            setTimeout("testtimer('" + user_data + "', " + user_data2 + ")", repeat_timed[user_data2] );
        }
    }
}

function testtimer (ud, ud2) {
    
    var user_div = document.getElementById (ud);
//
    user_div.innerHTML = "";
    
    g_currentseq[ud2]++;
    
    if (g_currentseq[ud2] >= g_numseq[ud2]) { g_currentseq[ud2] = 0;}
    
    user_div.innerHTML +=  responses_html[ud2][g_currentseq[ud2]];    
    
    
    
    setTimeout("testtimer('" + ud + "', " + ud2 + ")", repeat_timed[ud2] );    
}


function doneLoad(str, xmlstr, user_data, user_data2, user_data3, user_data4) {
 
    var user_div = document.getElementById (user_data);
    
    user_div.innerHTML = str; 

   // user_div.innerHTML += g_numseq;
                    
    
}



function doNewsLoad(newstype, targetdivname) { 

    add_server_request (doneLoad, "/event_iframe.cgi", "p=" + newstype + "&n=5", targetdivname, 0, 0, 0);
        
}


function doNewsLoadTimed(newstype, targetdivname, numseq, timed) { 
    
    if (numseq < 1 || numseq > 20) {numseq = 20;}
    
    divnames.push(targetdivname);
    
    var newindex = divnames.length - 1;
    
   // alert("Length:\n" + newindex);
    
    g_numseq[newindex] = numseq;
    g_currentseq[newindex] = 0;
    
    repeat_timed[newindex] = timed * 1000;
    
    add_server_request (doneLoadXML, "/event_iframe.cgi", "p=" + newstype + "&seq=" + numseq, targetdivname, newindex,0,0);
    
}

function doHeaderLoadTimed(newstype, targetdivname, numseq, timed) { 
    
    if (numseq < 1 || numseq > 20) {numseq = 20;}
    
    divnames.push(targetdivname);
    
    var newindex = divnames.length - 1;
    
    // alert("Length:\n" + newindex);
    
    g_numseq[newindex] = numseq;
    g_currentseq[newindex] = 0;
    
    repeat_timed[newindex] = timed * 1000;
    
    add_server_request (doneLoadXML, "/event_iframe.cgi", "p=" + newstype + "&seq=" + numseq + "&headonly=1", targetdivname, newindex,0,0);
    
}

function doNewsLatestLoad(newstype, numpick, targetdivname) { 
    
    add_server_request (doneLoad, "/event_iframe.cgi",  "p=" + newstype +"&latest=" + numpick, targetdivname, 0, 0, 0);
    
}


function doGroupsLoad(newstype, targetdivname) { 
    
    divnames.push(targetdivname);
    
    var newindex = divnames.length - 1;
    
    // alert("Length:\n" + newindex);
    
    g_numseq[newindex] = 20;
    g_currentseq[newindex] = 0;
    
    repeat_timed[newindex] = 3 * 1000;    
    
    add_server_request (doneGroupsLoadXML, "/event_iframe.cgi",  "groupsxml=1&user_data=" + targetdivname + "&ud2=" + newindex, targetdivname, 0, 0, 0);
    
}

function doNewsOneLoad(newstype, targetdivname) { 
    
    add_server_request (doneLoad, "/event_iframe.cgi", "s=" + newstype, targetdivname, 0, 0, 0);
    
}

/*
 Server request functions
 */
var server_request_stack = new Array();
var server_request_in_progress = false;
var httpObject = getHTTPObject();

function Server_Request (handler, url, post_data, user_data, user_data2, user_data3, user_data4) {
    this.handler = handler;
    this.url = url;
    this.post_data = post_data;
    this.user_data = user_data;
    this.user_data2 = user_data2;
    this.user_data3 = user_data3;
    this.user_data4 = user_data4;

    
}

function server_request_busy () {
    return server_request_in_progress;
}

function perform_server_request () {
    server_request_in_progress = true;
    request = server_request_stack.shift();
        
  //  var debug_cont = document.getElementById ('debugdiv');
        
    httpObject.open("POST", request.url, true);
    
    //Send the proper header information along with the request
    httpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   // httpObject.setRequestHeader("Content-length", request.post_data.length);
   // httpObject.setRequestHeader("Connection", "close");
    
    httpObject.onreadystatechange = function() {
        
       // debug_cont.innerHTML += "response" + httpObject.readyState + "<br>"; 
        
        if(httpObject.readyState == 4) {
            if (httpObject.status == 200) {

                request.handler(httpObject.responseText, httpObject.responseXML, request.user_data, request.user_data2, request.user_data3, request.user_data4);
                if (server_request_stack.length > 0) {
                    perform_server_request();
                } else {
                    server_request_in_progress = false;
                }
            } else { alert("There was a problem retrieving the XML data:\n" +
                           httpObject.statusText);
            }
        }
    }

  // debug_cont.innerHTML += "send post data " + "<br>"; 


    httpObject.send(request.post_data);
}

function add_server_request (handler, url, post_data, user_data, user_data2, user_data3, user_data4) {
    server_request_stack.push (new Server_Request (handler, url, post_data, user_data, user_data2, user_data3, user_data4));
    if (!server_request_in_progress) {
        perform_server_request();
    }
}


/*
	Written by Bill Bercik
	from http://www.webpasties.com/xmlHttpRequest/xmlHttpRequest_tutorial_1.html
 */
function getHTTPObject() {
    
    var xmlhttp;
    
    /*@cc_on
    
    @if (@_jscript_version >= 5)
    
    try {
        
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        isIE = true;

    } catch (e) {
        
        try {
            
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            isIE = true;

        } catch (E) {
            
            xmlhttp = false;
            
        }
        
    }
    
    @else

    xmlhttp = false;
    
@end @*/
    
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        
        try {
            
            xmlhttp = new XMLHttpRequest();
            
        } catch (e) {
            
            xmlhttp = false;
            
        }
        
    }
    
    return xmlhttp;
    
}

