var imageUpdaterArray = new Array();
var lastDisplayedArray  = new Array();
function createXMLHTTPRequest() {
    var request = null;
    try {
        request = new XMLHttpRequest;
    } catch (err1) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (err2) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (err3) {
                request = null;
            }
        }
    }
    return request;
}


function sendRequest(url, div) {
    if (!url || !div) {
        return false;
    }
    var ajaxObject;
    ajaxObject = createXMLHTTPRequest();
    url = url + "&ms=" + (new Date).getTime();
    url = url + "&" + Math.random();
    ajaxObject.open("GET", url, true);
    ajaxObject.onreadystatechange = function () 
    {
        if (ajaxObject.readyState == 4 || ajaxObject.readyState == "complete") 
        {
            document.getElementById(div).innerHTML = removeAmp(ajaxObject.responseText);
            }
        };
    ajaxObject.send(null);
}

function postAjax(parameters, url, howToDo, caller) {
    var http_request = getHttpRequest();
    if (!http_request) {
        return false;
    }
	
    if('publish' == caller || 'save' == caller){
    	 document.getElementById("throbber").innerHTML='<span style="position:fixed;right:650px;top:135px;color:white;display:block;"><img src="images/throbber.gif" height="80" width="80" /></span>';
    }    

    http_request.onreadystatechange = function ()
    {
        if (http_request.readyState == 4) 
        {
            if (http_request.status == 200) {
		document.getElementById("throbber").innerHTML='';
		
		if('publish' == caller){
			alert('The page has been published.');
		} else if ('save' == caller){
			alert('The contents have been saved.');
		} else {
		}
	   } else {
               alert(http_request.statusText);
           }
        }
     };
    parameters =  "randomeNumber="+Math.random() + "&" + parameters + "&" + "ms=" + (new Date).getTime() ;    
    http_request.open("POST", url, howToDo);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
}



function sendImageRequest(url,count)
{
    if (!url) { return false; }
    var imageObject;
    imageObject = createXMLHTTPRequest( );
    url = url+'&ms='+new Date().getTime();
    imageObject.open("GET", url, true);
    imageObject.onreadystatechange = function ()
    {        
        if (imageObject.readyState==4 || imageObject.readyState=="complete") { 
            getElement('imgTool_hidden_'+count).innerHTML=removeAmp(imageObject.responseText);             
            var allDiv = getElement('imgTool_hidden_'+count).getElementsByTagName("div");
            var allImages = [];
            for (i=0 ; i<allDiv.length ; i++){
                if(allDiv[i].className == "dotlist"){
                    allDiv[i].innerHTML += allDiv[i+1].innerHTML;
                    allImages.push(allDiv[i]);
                }
            }
            // No more 'li', now the feed is enclosed inside div tags.
            // var allImages = getElement('imgTool_hidden_'+count).getElementsByTagName("li");
            if(allImages.length>1){
                displayImage(allImages, 'annotationtextimgTool'+count);
                try{
                    clearInterval(imageUpdaterArray[count]);
                    lastDisplayedArray [count] = null;
                }catch(err){
                }
                try{     
                    var timeIntervalSet = parseInt(getElement('imgTool_timeInterval'+count).value);
                    if(isNaN(timeIntervalSet)){
                        displayImage(allImages, 'annotationtextimgTool'+count, count);
                    }
                    else{
                        imageUpdaterArray[count] = setInterval(function(){displayImage(allImages, 'annotationtextimgTool'+count, count)},timeIntervalSet*1000);
                    }
                }
                catch(err){
                    displayImage(allImages, 'annotationtextimgTool'+count, count);
                }
            }else {
                try{
                    getElement('annotationtextimgTool'+count).innerHTML = '<div class="imagebox">'+allImages[0].getElementsByTagName("p")[0].innerHTML+'</div>';
                }catch(errin){
                    try{
                        getElement('annotationtextimgTool'+count).innerHTML = '<div class="imagebox">'+allImages[0].getElementsByTagName("div")[0].innerHTML+'</div>';
                    }catch(errinin){
                        getElement('annotationtextimgTool'+count).innerHTML = '<div class="imagebox">'+allImages[0].innerHTML+'</div>';
                    }
                }                
            }
        }
    }
    imageObject.send(null);
}

function displayImage(allImages, div, count) {
    var isDone = false;
    var numOfTimesIterated = 0;
    while(!isDone){ 
        var randomnumber = lastDisplayedArray[count];
        if(randomnumber == null){
            randomnumber=Math.floor(Math.random()*allImages.length)
        }else {
            randomnumber = (randomnumber + 1)%(allImages.length);
        }
        var toDisp = allImages[randomnumber];
        try {
            var linkToDisp =  toDisp.getElementsByTagName("a")[0].href;
            var partsOfLink = linkToDisp.split("/");
            var toDecide = partsOfLink[partsOfLink.length-2];
            if (toDecide == "url"){
                try {
                    getElement(div).innerHTML = '<div class="imagebox">'+toDisp.getElementsByTagName("p")[0].innerHTML+'</div>';
                }catch(errin){
                    try {
                        getElement(div).innerHTML = '<div class="imagebox">'+toDisp.getElementsByTagName("div")[0].innerHTML+'</div>';
                    }catch(errinin){
                        getElement(div).innerHTML = '<div class="imagebox">'+toDisp.innerHTML+'</div>';
                    }
                }
                isDone = true;
            }
        }catch(errout){                
        }
        lastDisplayedArray[count] = randomnumber;
        numOfTimesIterated++;
        if(numOfTimesIterated == allImages.length){
            getElement('annotationtextimgTool'+count).innerHTML=getElement('imgTool_hidden_'+count).innerHTML;
            break;
        }
    }                  
}


function sendSearchRequest(url,div, count)
{
    if (!url || !div) { return false; }
    var searchObject;
    searchObject = createXMLHTTPRequest( );
    url = url+'&'+ Math.random();
    searchObject.open("GET", url, true);
    searchObject.onreadystatechange = function ()
    {  
        if (searchObject.readyState==4 || searchObject.readyState=="complete") {

            var xmlText = searchObject.responseText;
            var xmlPage = searchObject.responseXML.documentElement;
            var titlenodes = xmlPage.childNodes[getIndex(0)].childNodes[getIndex(1)].childNodes;           
            var titlediv = document.getElementById('hdnttl_search'+count);
            var codenodes = xmlPage.childNodes[getIndex(0)].childNodes[getIndex(3)].childNodes;
            var htmlcodediv = document.getElementById('search_hdncode'+count);

            titlediv.innerHTML = '';
            htmlcodediv.innerHTML = '';

            for(ttlcnt=0 ; ttlcnt<titlenodes.length ; ttlcnt++)
            {
                try{
                    // 1 means an html Node Element.
                    if (titlenodes[ttlcnt].nodeType == 1){
                        titlediv.appendChild(titlenodes[ttlcnt]);
                    }
                    // When we have only text title, no need to check for nodeType
                    if(titlenodes[ttlcnt].nodeType == 3 && titlenodes.length == 1){
                        titlediv.appendChild(titlenodes[ttlcnt]);
                    }
                }catch(e){
                    if(navigator.appName=="Microsoft Internet Explorer"){
                        // This code gets executed for IE browser. Logically, it should not give an error while appending child but you know MS.
                        titlediv.innerHTML = titlediv.innerHTML + titlenodes[ttlcnt].xml;
                    }else{
                        // This code has been added to work for Safari. appendChild seems to fail for Safari.
                        titlediv.innerHTML = titlediv.innerHTML + xmlText.substring(xmlText.indexOf('<title>')+7, xmlText.lastIndexOf('</title>'));
                        break;
                    }  
                }
            } 

            for(i=0 ; i<codenodes.length ; i++)
            {
                // 1 means an html Node Element.  
                try{
                    if (codenodes[i].nodeType == 1){                
                        htmlcodediv.appendChild(codenodes[i]);
                    } 
                }catch(e){
                    if(navigator.appName=="Microsoft Internet Explorer"){
                        // This code gets executed for IE browser. Logically, it should not give an error while appending child but you know MS.
                        htmlcodediv.innerHTML = htmlcodediv.innerHTML + codenodes[i].xml;
                    }else{
                        // This code has been added to work for Safari. appendChild seems to fail for Safari.
                        htmlcodediv.innerHTML = htmlcodediv.innerHTML + xmlText.substring(xmlText.indexOf('<code>')+6, xmlText.lastIndexOf('</code>'));
                        // After adding the entire string, looping through all the children is not required.
                        break;
                    } 
                }
            }

            getElement('search_title_'+count).innerHTML = titlediv.innerHTML;
            // we are adding the new "search" html chunk newly retrieved to the DOM:
            document.getElementById(div).innerHTML = htmlcodediv.innerHTML;
        }
    }
    searchObject.send(null);
}


