var xmlURL;
var xmlRootURL = "";
var xmlData;
var xmlDataRoot;
var xmlDataNodes;
var xmlPagerInfo;
var objText = "";
var objPagerText = "";
var objPager1;
var objPager2;

var pageCurrent = 0;
var pageCount = 0;
var pageSize = 3;
var hitCount = 3;
var pageRequestSize = 15;

var previewRootName;
var previewContainerName;

var xmlRequest = null;
var isInitial = true;

createCrossBrowserXMLMethods();

function checkReadyXML() 
{
	if(xmlRequest.readyState == 4)
	{
		populateDataXML(xmlRequest.responseXML, isInitial);
	}
}

function getDataXML(xmlURL, size, page, isInit)
{
	isInitial = isInit;
	if(window.ActiveXObject)
	{
		try{
			xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(e) { alert("AJAX Error: " + e); }
	} else if(window.XMLHttpRequest) {
		try{
			//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
			//netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		} catch(e) { alert("AJAX Error reading " + xmlURL + "\n" + e); }
		xmlRequest = new XMLHttpRequest();	
	}

	try{
		xmlRequest.open("GET", xmlURL, true);
		xmlRequest.onreadystatechange = checkReadyXML;
		xmlRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

		xmlRequest.send(null);
	} catch(e) { alert("Open Error: " + e); } 
}

function getDataURL()
{
    return xmlURL;
}

function initializeData(url, size, page, objName1, objName2, rootName, containerName)
{
	pageRequestSize = size;
	if(xmlRootURL == "" ) { xmlRootURL = url; }
	xmlURL = url.replace(".xml", ".xml?page=" + page);
	pageCurrent = page;

	if(objPager1==null) { objPager1 = document.getElementById(objName1); }
	if(objPager2==null) { objPager2 = document.getElementById(objName2); }

	previewRootName = rootName;
	previewContainerName = containerName;

	getDataXML(xmlURL, pageRequestSize, pageCurrent, true);
}

function updateDataXML(url, size, page)
{
	pageRequestSize = size;
	if(xmlRootURL == "" ) { xmlRootURL = url; }
	xmlURL = url.replace(".xml", "-" + page + ".xml");
	pageCurrent = page;

	getDataXML(xmlURL, pageRequestSize, pageCurrent, false);
}

function populateDataXML(data, isInit)
{
	xmlDataRoot = data.documentElement;

	xmlPagerInfo = xmlDataRoot.selectSingleNode("//Header/ResultInfo");
	xmlDataNodes = xmlDataRoot.selectNodes("//Data/Videos/Video");

	initializePager(objPager1, objPager2);

	if(isInit)
	{
		initializeNodeObjects();
	} else {
		initializeNodeObjects();
	}
}

function initializeNodeObjects()
{
	objText = "";
	var totalDisplay = pageSize;
	if(pageSize>pageRequestSize) { totalDisplay = pageRequestSize; }
	
	for(var i=0; i<totalDisplay; i++)
	{
		var thisNode = xmlDataNodes[i];
		if(thisNode != null)
		{
			var itemID = previewRootName + (i+1);
			var containerID = previewContainerName + (i+1);
			getVideoPreview(i, itemID, containerID);
		}
	}

	hideUnusedPreviews(pageSize, pageRequestSize, previewContainerName);
}

function hideUnusedPreviews(size, requested, objName)
{
	for(i=size; i<requested; i++)
	{
		var itemID = objName + (i+1);
		
		try {
			var objTarget = document.getElementById(itemID);
			objTarget.style.display = "none";
		} catch(e) {}
	}
}

function initializePager(objName1, objName2)
{
    if (!window.ActiveXObject) 
    {
        pageSize = parseInt(xmlPagerInfo.selectSingleNode("PageSize").textContent);
	    hitCount = parseInt(xmlPagerInfo.selectSingleNode("TotalHits").textContent);
	    pageCurrent = parseInt(xmlPagerInfo.selectSingleNode("Page").textContent);
    } else {
	    pageSize = parseInt(xmlPagerInfo.selectSingleNode("PageSize").text);
	    hitCount = parseInt(xmlPagerInfo.selectSingleNode("TotalHits").text);
	    pageCurrent = parseInt(xmlPagerInfo.selectSingleNode("Page").text);
	}

	var addPage = 1;
	if((hitCount%pageRequestSize) == 0) { addPage = 0; }

	//pageCount = Math.floor(hitCount/pageRequestSize) + addPage;
	pageCount = 1;

	objPagerText = getPagerText(pageCurrent, pageCount, objName1, objName2);

	if(objPager1==null) { objPager1 = document.getElementById(objName1); }
	if(objPager1 != null) { objPager1.innerHTML = objPagerText; }

	if(objPager2==null) { objPager2 = document.getElementById(objName2); }
	if(objPager2 != null) { objPager2.innerHTML = objPagerText; }
	
	if(pageCount == 1)
	{
	    objPager1.style.display = "none";
	    objPager2.style.display = "none";
	}
}

function getPagerText(page, count, o1, o2)
{
	var out = "";
	out += "Page " + (page + 1) + " of " + count + "&nbsp;&nbsp;";
	if(page > 0) { out += getPrevLink(page); }

	for(var i=0;i<count;i++)
	{
		out += getPagerLink(i, o1, o2);
	}

	if(page < (count-1)) { out += getNextLink(page); }

    out = "Page 1 of 1";
	return out;
}

function getPrevLink(page)
{
	var out = "";
	out += "<a class=\"" + pagerClassLink + "\" style=\"padding-left:10px\" onclick=\"updatePager('" + (page-1) + "');\" style=\"cursor:hand;\">";
	out += "< Previous </a>";
	return out;
}

function getNextLink(page)
{
	var out = "";
	out += "<a class=\"" + pagerClassLink + "\" style=\"padding-left:10px\" onclick=\"updatePager('" + (page+1) + "');\" style=\"cursor:hand;\">";
	out += " Next ></a>";
	return out;
}

function updatePager(page)
{
	updateDataXML(xmlRootURL, pageRequestSize, page);
	initializePager(objPager1, objPager2);
	initializeNodeObjects(previewRootName, previewContainerName);
}

function getPagerLink(index)
{	
	thisClass = pagerClass;
	if(index == pageCurrent) { thisClass = pagerClassSelected; }
	if(index == pageCount-1) { thisClass = pagerClassLink; }

	var out = "";
	out += "<a class=\"" + thisClass + "\" onclick=\"updatePager('" + index + "');\" style=\"cursor:hand;\">";
	out += (index + 1);
	out += "</a>";

	return out;
}

function getVideoPreview(index, objID, contID)
{
	var previewID = "preview" + index;
	
	if (!window.ActiveXObject) 
    {
        var thisImage = xmlDataNodes[index].selectSingleNode("ThumbnailPhoto/Url").textContent;
	    var thisVideo = xmlDataNodes[index].selectSingleNode("PreviewVideo/Url").textContent;
	    var thisCaption = xmlDataNodes[index].selectSingleNode("HeadLine").textContent;
    } else {
	    var thisImage = xmlDataNodes[index].selectSingleNode("ThumbnailPhoto/Url").text;
	    var thisVideo = xmlDataNodes[index].selectSingleNode("PreviewVideo/Url").text;
	    var thisCaption = xmlDataNodes[index].selectSingleNode("HeadLine").text;
	}
	thisCaption = escape(thisCaption);
	
	var out = AC_FL_RunContentWithReturn( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0','width','130','height','150','id',previewID,'align','middle','src','swf/VideoPreview','quality','high','wmode','transparent','flashvars','image=' + thisImage + '&video=' + thisVideo + '&caption=' + thisCaption + '&itempos=' + index + '&css=css/previews.css','bgcolor','transparent','name',previewID,'allowscriptaccess','sameDomain','allowfullscreen','false','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','swf/VideoPreview' );
    /*
	var out = "";
	out += "<script type=\"text/javascript\">";
    out += "AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0','width','130','height','150','id','" + previewID + "','align','middle','src','swf/VideoPreview','quality','high','wmode','transparent',";
    out += "'flashvars','image=" + thisImage + "&video=" + thisVideo + "&caption=" + thisCaption + "&itempos=" + index + "&css=css/previews.css',";
    out += "'bgcolor','transparent','name','" + previewID + "','allowscriptaccess','sameDomain','allowfullscreen','false','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','swf/VideoPreview' );</script>";
    out += "<noscript>";
	out += "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0\" width=\"130\" height=\"150\" wmode=\"transparent\" id=\"" + previewID + "\" align=\"middle\">";
	out += "<param name=\"allowScriptAccess\" value=\"sameDomain\" />";
	out += "<param name=\"allowFullScreen\" value=\"false\" />";
	out += "<param name=\"movie\" value=\"swf/VideoPreview.swf\" />";
	out += "<param name=\"flashvars\" value=\"value='image=" + thisImage + "&video=" + thisVideo + "&caption=" + thisCaption + "&itempos=" + index + "&css=css/previews.css' />";
	out += "<param name=\"quality\" value=\"high\" />";
	out += "<param name=\"bgcolor\" value=\"transparent\" />";
	out += "<param name=\"wmode\" value=\"transparent\" />	";
    out += "<embed src=\"swf/VideoPreview.swf\" quality=\"high\" flashvars=\"image=" + thisImage + "&video=" + thisVideo + "&caption=" + thisCaption + "&itempos=" + index + "&css=css/previews.css\" bgcolor=\"transparent\" width=\"130\" height=\"150\" name=\"" + previewID + "\" id=\"" + previewID + "\" align=\"middle\" allowScriptAccess=\"sameDomain\" allowFullScreen=\"false\" wmode=\"transparent\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" /></object>";
    out += "</noscript>";
    */
	try{
		var objTarget = document.getElementById(objID);
		objTarget.innerHTML = out;

		var objContainer = document.getElementById(contID);
		objContainer.style.display = "block";
	} catch(e) { alert("problem at " + objID + ": " + e.toString()); }
}

function createCrossBrowserXMLMethods()
{
    if (!window.ActiveXObject) 
    {
        Element.prototype.selectNodes = function(sXPath) {
            var oEvaluator = new XPathEvaluator();
            var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
            var aNodes = new Array();
            if (oResult != null) 
            {
                var oElement = oResult.iterateNext();
                while(oElement) 
                {
                    aNodes.push(oElement);
                    oElement = oResult.iterateNext();
                }
            }
            return aNodes;
        }

        Element.prototype.selectSingleNode = function(sXPath) {
            var oEvaluator = new XPathEvaluator();

            // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.
            var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
            if (oResult != null) 
            {
                return oResult.singleNodeValue;
            } else {
                return null;
            }              
        }
    }
}
