//cacheclass sample code for usage see loadXMLFromCache
function clscacheLib(objTop)
{
	if(objTop == null)
	{
	    objTop = top;
	}
	
	if(objTop.context != null)
	{
//		objTop.cacheUtil    = objTop.context.cacheUtil;
		objTop.cache        = objTop.context.cache;
	}
	else
	{
	    objTop.cache = new Array();
	}

	objTop.cacheUtil = this;
	

	var strDate=""
	var bCacheHalted = true;
	
	var meCacheUtil = this;

	var objCacheFrame = objTop.document.getElementById("cacheLib_cacheFrame");
	
	if(objCacheFrame == null)
	{
	    objCacheFrame                   =   objTop.document.createElement("IFRAME");
	    //objCacheFrame.src             =   top.helperLib.wsfMapPath("/mc/blank.htm");
	    objTop.document.body.appendChild(objCacheFrame);
    	objCacheFrame.id                =   "cacheLib_cacheFrame";
    	objCacheFrame.name              =   "cacheLib_cacheFrame";
    	objCacheFrame.setAttribute("APPLICATION","yes");
	    objCacheFrame.style.cssText     =   "position:absolute;visibility:visible;z-index:1000;top:100px;height:200px;width:500px;";
	    objCacheFrame.style.display     =   "none";
    }
	
	this.cacheFrame = objCacheFrame;
	var cacheFrameContentWindow = objCacheFrame.contentWindow;
	this.cacheIndex         = 0;
	this.cacheGroupIndex    = 0;
	this.publicQueue        = new Array();
	this.clsXSL             = clsXSL;
	this.clsCacheXMLQueueItem = clsCacheXMLQueueItem;
	this.initSpeedCache     = initSpeedCache;
	this.loadXMLFromCache   = loadXMLFromCache;

	function loadXMLFromCache(sObjectID, objFunctionPointer, sTagVariant, sXMLFilePath)
	{
	
		var objQueue = new meCacheUtil.clsCacheXMLQueueItem();
		objQueue.loadComplete   = objFunctionPointer;
		objQueue.tagVariant     = sTagVariant;
			
		for (var i = 3; i < arguments.length; i++)
		{
			//add queueitems to the array in a loop 
			objQueue.queue[objQueue.queue.length] = new meCacheUtil.clsXSL(sObjectID, arguments[i]);
		}	
		
		meCacheUtil.publicQueue[meCacheUtil.publicQueue.length] = objQueue;
		//add initspeedcache if the process is currently halted			
		//alert("loadXMLFromCache");
		meCacheUtil.initSpeedCache();
		
		return meCacheUtil.publicQueue.length-1;
		
	}


	function clsXSL(xslKey,xslPath)
	{
		this.key = xslKey
		this.path = xslPath
		this.XMLObject = null
	}

	function clsCacheXMLQueueItem()
	{
		this.queue = new Array()
		this.loadComplete = null
		this.speedStats = ""
		this.tagVariant =null
	}
	
	function initSpeedCache()
	{
	    //alert("initSpeedCache");
		if (bCacheHalted == true)
		{
			checkCacheSpeed(this);
		}
	}

	function checkCacheSpeed()
	{
	    //alert("checkCacheSpeed");
		bCacheHalted = false;
		if(meCacheUtil.publicQueue.length == meCacheUtil.cacheIndex)
		{
			//alert(m_strDate)
			bCacheHalted = true;
			return;
		}
//		strDate="\n" + getSpeedDate() + "Start Loading group" 
		meCacheUtil.cacheGroupIndex = 0;
		loadCacheGroup();
	}
	
	function loadCacheGroup()
	{
	    //alert("loadCacheGroup");
		var objQueue = meCacheUtil.publicQueue[meCacheUtil.cacheIndex];
		if(objQueue.queue[meCacheUtil.cacheGroupIndex] == null)
		{
			objQueue.speedStats = strDate;
			
			try
			{
			    objQueue.loadComplete(objQueue, meCacheUtil.cacheIndex)
			}
			catch(e)
			{alert(e.message)}
			
			meCacheUtil.cacheIndex++;
			checkCacheSpeed();
			return;
		}
//		strDate+="\n" + getSpeedDate() + "Load " + objQueue.queue[meCacheUtil.cacheGroupIndex].path  		

		loadXSLFromCacheHTML(objQueue.queue[meCacheUtil.cacheGroupIndex].key, objQueue.queue[meCacheUtil.cacheGroupIndex].path);
	}

	function loadXSLFromCacheHTML(sItemName, sXSLFileName)
	{
	    //alert("loadXSLFromCacheHTML: : " + sXSLFileName)
	    if(window.addEventListener)
	    {
	        top.helperLib.attachEvents(window, meCacheUtil.cacheFrame, "onload", frameReady)
	    }
	    else
	    {
	        top.helperLib.attachEvents(window, meCacheUtil.cacheFrame, "onreadystatechange", frameReady);
	    }
//	    
	    
		//meCacheUtil.cacheFrame.onreadystatechange = frameReady;
		//cacheFrameContentWindow.navigate(sXSLFileName)
		
		meCacheUtil.cacheFrame.src = sXSLFileName;
		
	}
	
	function docready()
	{
	}
	
	function frameReady(e)
	{
//	    var functionPointer = "alert('" + meCacheUtil.cacheFrame.readyState + "')"
//	    setTimeout(functionPointer ,1000)
        var objQueue = meCacheUtil.publicQueue[meCacheUtil.cacheIndex];
        
        if(objQueue == null)
        {
            return;
        }
        
		if((meCacheUtil.cacheFrame.readyState && meCacheUtil.cacheFrame.readyState != "complete") || (!meCacheUtil.cacheFrame.readyState && e.type != "load")) 
		{
		    return;
        }		    
        
        top.helperLib.detachEvents(window, meCacheUtil.cacheFrame, "onreadystatechange", frameReady);
        top.helperLib.detachEvents(window, meCacheUtil.cacheFrame, "onload", frameReady);
        //meCacheUtil.cacheFrame.onreadystatechange = null;
		//meCacheUtil.cacheFrame.detachEvent("onreadystatechange", frameReady);
        
		if (cacheFrameContentWindow.location.href.indexOf("about:blank") >= 0)
		{ 
		    setTimeout(frameReady,100);
		    return;
		}
		var objXSL = cacheFrameContentWindow.document.getElementById("xsl");
		//alert(objXSL)
		var sXML = "";
		if(objXSL != null)
		{
			objXSL = objXSL.XMLDocument.cloneNode(true);
	    }
		else
		{
			try
			{
			    objXSL = top.XMLLib.objXMLDocTemplate.cloneNode(true);
		    
		        if(window.addEventListener)
		        {
		            var objXMLSerializer = new XMLSerializer();
		            sXML = objXMLSerializer.serializeToString(cacheFrameContentWindow.document);
		        }	
		        else
		        {
		            sXML = cacheFrameContentWindow.document.XMLDocument.xml;
		        }    
			    objXSL.loadXML(sXML);
			}
			catch(e)
			{}
		}	
		
//		strDate+="\n" + getSpeedDate() + "Finish " + objQueue.queue[meCacheUtil.cacheGroupIndex].path  		
		objQueue.queue[meCacheUtil.cacheGroupIndex].XMLObject = objXSL;
		objQueue.queue[meCacheUtil.cacheGroupIndex].sXML = sXML;
		meCacheUtil.cacheGroupIndex++;
		loadCacheGroup();
	}
}
