/****************************************************************************************/
/*																						*/
/*	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);
	//alert(returnedTimeIndex);
	if (returnedTimeIndex == -1){ // binarySearch returned a null value
		eval("parent.frames['Slide'].location.href = 's-1.htm';");
		return;
	};
	var resultTime = xmlEventsTimeArrayOrdered[returnedTimeIndex];
	var pattern, eventNodeList, eventNode, eventId, eventType, eventTime, eventTarget, eventUrl, eventImg, eventTargetNumber, eventUrlNumber, slideUrl, slideSrc;
	
	var snap = (function(){
		pattern = "EVENTGROUP/EVENT[EVENTSTIME='" + resultTime + "']";
		eventNodeList = xmlDoc.documentElement.selectNodes(pattern);
		eventNode = eventNodeList[0];
		eventId  = eventNode.selectSingleNode('EVENTSID').childNodes[0].nodeValue;
		eventType  = eventNode.selectSingleNode('EVENTSTYPE').childNodes[0].nodeValue;
		eventTime = resultTime;
		eventTarget = eventNode.selectSingleNode('EVENTSTARGET').childNodes[0].nodeValue;
		eventUrl = eventNode.selectSingleNode('EVENTSURL').childNodes[0].nodeValue;
		try{
			if (eventType != 'URL') {
				eventUrlNumberPosition = eventUrl.length-1;
				eventUrlNumber = eventUrl.charAt(eventUrlNumberPosition);
				slideUrl = 's-' + eventUrlNumber + '.htm';
				slideSrc = eventUrl + '.jpg';
			} else {
				slideUrl = eventUrl;
			}
		} catch(e) {
			err = 1;
		}
		
		return this;
	})();	
	eval("parent.frames[eventTarget].location.href = slideUrl;");
	try
	{
		if (top.Video.lgwin){
			top.Video.currentSilde = slideSrc;
			var proslide = /(slide)(\d)/i;
			if(proslide.test(slideSrc)) {
				updLargeSld(slideSrc);
				top.Video.currentLargeSlide = 'lg_'+slideSrc;
			}else{
				updLargeSld('slidenotavailable.jpg');
				top.Video.currentLargeSlide = 'lg_slidenotavailable.jpg';
			}
		}
	}
	catch (e)
	{
	}
}


