/****************************************************************************************/
/*																						*/
/*	Accordent SearchSlide v1.00															*/
/*	===========================															*/
/*																						*/
/*	Last Edited: May 5, 2008 															*/
/*	Please send all comments & bug reports to: support@accordent.com 					*/
/*																						*/
/****************************************************************************************/

	/* global variable... can be forced */
	
	var ie, ns, mz, debug, msver, os;
	var ie=self.document.all;
	var ns=eval("self.document.layers");
	var mz=self.document.getElementById;
	var os=1; //assume pc by default
//	var debug=eval(getvar("debug","false"));
	var os,browser,version,data;
	
	/* do not edit */

///////////////////////// 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';");
	CurrentSlideNumber = "r1";
		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;

	//	alert("eventImg="+ eventImg); 
		return this;
	})();	
//	try{

		//Handle PresenterPLUS presentations by finding slide number from the HTML reference
		var replace1 = "http://Server/s-";
		var replace2 = "_1.jpg";


     
	    //Parse PresenterPRO presentations by finding slide number from the HTML reference
		var turl2 = eventImg.replace(replace1,"");
		var turl3 = turl2.replace(replace2,"");
//alert("CurrentSlideNumber="+ CurrentSlideNumber); 
		CurrentSlideNumber = turl3;

	return;
//		currentSlide = CurrentSlideNumber;
	//	var currentLargeSlide = new String(CurrentSlideNumber); 
//		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.htm?url='+currentSlide +"','"+eventTarget+"');");
//			return;
//		}
//	}
}


// browser and os detection code
	function detectbrowser() {
		var ua = navigator.userAgent.toLowerCase();
		if (detectagent('msie',ua)) browser = "ie";
		else if (detectagent('firefox',ua)) browser = "firefox";
		else if (detectagent('netscape',ua)) browser = "netscape";
		else if (detectagent('safari',ua)) browser = "safari";
		else if (detectagent('opera',ua)) browser = "opera";
		else if (detectagent('konqueror',ua)) {browser = "konqueror"; os = "linux";}
		else if (detectagent('omniweb',ua)) browser = "omniweb";
		else if (detectagent('webtv',ua)) browser = "webtv";
		else if (detectagent('icab',ua)) browser = "icab";
		else if (!detectagent('compatible',ua)) {browser = "mozilla"; version = ua.charAt(8);}
		else browser = "unknown";

		if (!version) version = ua.charAt(stringposition + data.length);

 	    if (detectagent('linux',ua)) os = "linux";
	    else if (detectagent('x11',ua)) os = "unix";
	    else if (detectagent('mac',ua)) os = "mac";
	    else if (detectagent('win',ua)) os = "win";
	    else os = "unknown";

	}
	function detectagent(type,useragent) {
	   stringposition = useragent.indexOf(type) + 1;
	   data = type;
	   return stringposition;
	}


	