/************************************************************************************************************
Ajax dynamic content
Copyright (C) 2006  DTHMLGoodies.com, Alf Magne Kalleland

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Dhtmlgoodies.com., hereby disclaims all copyright interest in this script
written by Alf Magne Kalleland.

Alf Magne Kalleland, 2006
Owner of DHTMLgoodies.com


************************************************************************************************************/	

var enableCache = true;
var jsCache = new Array();

var dynamicContent_ajaxObjects = new Array();

function ajax_showContent(divId,ajaxIndex,url)
{
	var targetObj = document.getElementById(divId);
	targetObj.innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;
	
	if(enableCache){
		jsCache[url] = dynamicContent_ajaxObjects[ajaxIndex].response;
	}
	
	dynamicContent_ajaxObjects[ajaxIndex] = false;
	
	ajax_parseJs(targetObj)
}


function ajax_loadContent(divId,url)
{
	if(enableCache && jsCache[url]){
	    //document.getElementById(divId).innerHTML = jsCache[url];
	    
		var storedObj = document.getElementById(divId);
		storedObj.innerHTML = jsCache[url];
		ajax_parseJs(storedObj)
		return;
	}
	
	var ajaxIndex = dynamicContent_ajaxObjects.length;
	document.getElementById(divId).innerHTML = '';
	dynamicContent_ajaxObjects[ajaxIndex] = new sack();
	dynamicContent_ajaxObjects[ajaxIndex].requestFile = url;	// Specifying which file to get
	dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function(){ ajax_showContent(divId,ajaxIndex,url); };	// Specify function that will be executed after file has been found
	dynamicContent_ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function		
}



function ajax_parseJs(obj)
{
	var scriptTags = obj.getElementsByTagName('SCRIPT');
	var string = '';
	var jsCode = '';
	for(var no=0;no<scriptTags.length;no++){	
		if(scriptTags[no].src){
	        var head = document.getElementsByTagName("head")[0];
	        var scriptObj = document.createElement("script");
	
	        scriptObj.setAttribute("type", "text/javascript");
	        scriptObj.setAttribute("src", scriptTags[no].src);  	
		}else{
			if(navigator.userAgent.indexOf('Opera')>=0){
				jsCode = jsCode + scriptTags[no].text + '\n';
			}
			else
				jsCode = jsCode + scriptTags[no].innerHTML;	
		}
		
	}

	if(jsCode)ajax_installScript(jsCode);
}


function ajax_installScript(script)
{		
    if (!script)
        return;		
    if (window.execScript){        	
    	window.execScript(script)
    }else if(window.jQuery && jQuery.browser.safari){ // safari detection in jQuery
        window.setTimeout(script,0);
    }else{        	
        window.setTimeout( script, 0 );
    } 
}	
	
var isBusy = false;
	
function setResponseHtml(pUrl, pDiv) {
    var lHttp = getHTTPObjectHtml();
    var lUrl = pUrl;
    lUrl = lUrl.replace("+","%2b");
    if (isBusy) {
        lHttp.onreadystatechange = function () {}
        lHttp.abort();
    }
            
    lHttp.open("GET", lUrl , true);        
    lHttp.onreadystatechange = function() { getHttpResponseText(pDiv, lHttp); };
    
    if (window.XMLHttpRequest) { // Mozilla check
        if (!isBusy) {
            isBusy = true;            
            lHttp.send(null);
        }
    } else { // IE Check
        isBusy = true;            
        lHttp.send(null);
    }
}


function getHTTPObjectHtml() {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');                
        }            
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    return http_request;
}

function getHttpResponseText(pDiv, pHttp) {
    var lHttp = pHttp;
    
    if (lHttp == null) // just in case!
        lHttp = gHttp;
    
    if (lHttp.readyState == 4) {
        isBusy = false;
        
        var status = "";
        try {
            status = lHttp.statusText;
            if (lHttp.status == 200) {
                var htmlDocument = lHttp.responseText;
                document.getElementById(pDiv).innerHTML = htmlDocument;            
            }
        } catch(e) {
            status = "Trouble accessing it";
            document.getElementById(pDiv).innerHTML = e.message;
        }            
    } else {
        if (getAjaxLoadingMessage() != '' && getAjaxLoadingMessage() != null) {
            // only display a loading message if it is defined
            setVisible(pDiv, true);            
            document.getElementById(pDiv).innerHTML = getAjaxLoadingMessage();                    
        }
        return;
    }
}

var gAjaxLoadingMessage = '';

function setAjaxLoadingMessage(pMessage) {
    gAjaxLoadingMessage = pMessage;
}

function getAjaxLoadingMessage() {
    return(gAjaxLoadingMessage);
}
