/****************************************************************************************/
/*																						*/
/*	Accordent SearchSlide v1.00															*/
/*	===========================															*/
/*																						*/
/*	Last Edited: May 5, 2008 															*/
/*	Please send all comments & bug reports to: support@accordent.com 					*/
/*																						*/
/****************************************************************************************/

///////////////////////// selectNodes for browsers different than IE //////////////////////////////////
if( document.implementation.hasFeature("XPath", "3.0") ){
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
		if( !xNode ) {
			xNode = this;
		}
		var defaultNS = this.defaultNS;
		var aItems = this.evaluate(cXPathString, xNode,{
			normalResolver:
			this.createNSResolver(this.documentElement),
			lookupNamespaceURI : function (prefix) {
				switch (prefix) {
					case "dflt":
					return defaultNS;
					default:
					return this.normalResolver.lookupNamespaceURI(prefix);
				}
			}
		},XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){
			aResult[i] =  aItems.snapshotItem(i);
		}
		return aResult;
	}

	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){
			return this.ownerDocument.selectNodes(cXPathString, this);
		}else{
			throw "For XML Elements Only";
		}
	}

	// set the SelectionNamespaces property the same for NN or IE: 
	XMLDocument.prototype.setProperty = function(p,v){
		if(p=="SelectionNamespaces" && v.indexOf("xmlns:dflt")==0){
			this.defaultNS = v.replace(/^.*=\'(.+)\'/,"$1");
		}
	}
	XMLDocument.prototype.defaultNS;
}

///////////////////////// selectSingleNode for browsers different than IE //////////////////////////////////
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;
		}              
	}
}

// time format conversion - returns seconds
function time2s(str) {
	var re = /[0]*([1-9])/g;
	str = new String(str);
	if(re.test(str)) str = str.replace(re,"$1");
	var foo = str.split(":");
	var tsec = parseInt(foo[foo.length-1]);
	tsec += parseInt(foo[foo.length-2])*60;
	tsec += parseInt(foo[foo.length-3])*60*60;
	return tsec
}

// search with the binary method  ///////////////////////////////////////////////////////////////
function searchBinary(array, value){
    var al = array.length;
	var l = -1;
	var m;
    while(al - l > 1)
        if(array[m = al + l >> 1] < value) l = m;
        else al = m;
	return array[al] != value ? al-1 : al;
};
 
// load the xml document if browser is IE or FF /////////////////////////////////////////////////
detectbrowser();
if (ie || ns)
{
	function loadXMLDoc(dname) 
	{
	try //Internet Explorer
		{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.load(dname);
		}
	catch(e)
		{
		try //Firefox, Mozilla, Opera, etc.
			{
			xmlDoc=document.implementation.createDocument("","",null);
		parser=new DOMParser();
			xmlDoc=parser.parseFromString(dname,"text/xml");
			}
		catch(e) {alert(e.message)}
		}
	try 
		{
		xmlDoc.async=false;
		xmlDoc.load(dname);
		return(xmlDoc);
		}
	catch(e) {alert(e.message)}
	return(null);
	}
	
	loadXMLDoc('presentation.xml');
	xmlPresObj=xmlDoc.documentElement;
}

// create EVENTSTIME array  ////////////////////////////////////////////////////////////
var xmlEventsTimeArray = new Array;
var xmlEventsTimeArrayOrdered = new Array;
	
try{
	var eventlist = xmlPresObj.selectNodes("EVENTGROUP/EVENT");
	for (var i=0; i <= (eventlist.length)-1; i++ ) {
		xmlEventsTimeArray[i] = xmlDoc.getElementsByTagName("EVENTSTIME")[i].childNodes[0].nodeValue;
	}
} catch(e) {
	err = 1;
}

// sort ascending EVENTSTIME array
function SortNumeric(x,y){return x-y};
// sort
xmlEventsTimeArrayOrdered = xmlEventsTimeArray.sort(SortNumeric);

/////////////////////////////////// UPDATE REGION /////////////////////////////////////
function updateRegions(time){
	var searchedTime = time;
	var P25 = navigator.mimeTypes && navigator.mimeTypes["application/x-ms-wmp"]; // Firefox P25 plugin detection
	if(P25){
		searchedTime = time2s(time);
	}
	var returnedTimeIndex = searchBinary(xmlEventsTimeArrayOrdered,searchedTime);
	if (returnedTimeIndex == -1){ // binarySearch returned a null value
		eval("parent.frames['region1'].location.href = 'slide.htm';");
		return;
	};
	var resultTime = xmlEventsTimeArrayOrdered[returnedTimeIndex];
	var pattern, eventNodeList, eventNode, eventTime, eventTarget, eventImg;
	
	var snap = (function(){
		pattern = "EVENTGROUP/EVENT[EVENTSTIME='" + resultTime + "']";
		eventNodeList = xmlDoc.documentElement.selectNodes(pattern);
		eventNode = eventNodeList[0];
		eventTarget = eventNode.selectSingleNode('EVENTSTARGET').childNodes[0].nodeValue.toLowerCase();;
		eventImg = eventNode.selectSingleNode('EVENTSIMG').childNodes[0].nodeValue;
		return this;
	})();	
	try{
		currentSlide = eventImg;
		var currentLargeSlide = new String(currentSlide); 
		currentLargeSlide = currentLargeSlide.replace("_1","_lg");
		updLargeSld(currentLargeSlide); // update zoom slide
		
		eval("parent.frames[eventTarget].document.getElementById('slideimage').src = currentSlide;");
	} catch(e) {
		if(top.video){
			eval("window.open('"+'slide.html?url='+currentSlide +"','"+eventTarget+"');");
			return;
		}
	}
}
