/* 
 * data for silverlight program for Heroes Happen Here
 * 
 * [a] Stijn Van Minnebruggen
 * [c] These Days
 * [w] www.thesedays.com
 * 
*/

var agenda = null;



function SelectSingleNode(xmlDoc, elementPath)
{
    if(window.ActiveXObject)
    {
        return xmlDoc.selectSingleNode(elementPath);
    }
    else
    {
       var xpe = new XPathEvaluator();
       var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
       var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
       if(results.singleNodeValue != "undefined" && results.singleNodeValue.textContent != "undefined")
              {
               results.singleNodeValue.text = results.singleNodeValue.textContent;
              }
       return results.singleNodeValue; 
    }
}

    
    


  function SelectNodes(xmlDoc, elementPath)
    {
        if(window.ActiveXObject)
        {
            return xmlDoc.selectNodes(elementPath);
        }
        else
        {
           var xpe = new XPathEvaluator();
           //var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
           //var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
           //return results.singleNodeValue; 
            var results = xpe.evaluate(elementPath, xmlDoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
            var nodes = new Array();

            if (results != null) {

                var oElement = results.iterateNext();

                while(oElement) {

                    nodes.push(oElement);

                    oElement = results.iterateNext();

                }

            }

            return nodes;           
        }
    }


//var content;
var programXHttpRequest, programXml;
var speakerXHttpRequest, speakerXml;
var days;



if (!window.program) { window.program = {}; }
program.Day = function() {
    this._content = new Object();
    this._id = 0;
}
program.Day.prototype =
{
    get_Content: function() {
        return this._content;
    },
    set_Id: function(value) {
        this._id = value;
    },
    get_Id: function() {
        return this._id;
    }
    
}

function loadSpeakers() {
	speakerXHttpRequest = getXmlHttpRequest(); 
	if(speakerXHttpRequest == null) return;
	speakerXHttpRequest.open("GET", "speakers.xml", true);
	speakerXHttpRequest.onreadystatechange = loadSpeakersXML;
	speakerXHttpRequest.send(null);

}

function loadSpeakersXML() {
	if(speakerXHttpRequest == null) return;
	if(speakerXHttpRequest.readyState != 4) return;
	speakerXml = speakerXHttpRequest.responseXML;
	speakerXHttpRequest = null;			
	
	programXHttpRequest = getXmlHttpRequest(); 
	if(programXHttpRequest == null) return;
	programXHttpRequest.open("GET", "agenda.xml", true);
	programXHttpRequest.onreadystatechange = loadProgramXML;
	programXHttpRequest.send(null);	
	
	return;
}

function loadProgram() {
    loadSpeakers();
}

function loadProgramXML() {
	if(programXHttpRequest == null) return;
	if(programXHttpRequest.readyState != 4) return;
	programXml = programXHttpRequest.responseXML;
	saveXMLData();
	programXHttpRequest = null;
	return;
}

function getXmlHttpRequest() {
	try { return (new ActiveXObject("Msxml2.XMLHTTP2")); } catch (e) {}
	try { return (new ActiveXObject("Microsoft.XMLHTTP")); } catch (e) {}
	try { return (new XMLHttpRequest()); } catch (e) {}
	alert("Your browser is not supported to request XML files. Please use Microsoft Internet Explorer.");
	return(null);
}



function saveXMLData() {
	//content = new Object();
	days = new Array();
	//days.push(new program.Day());
	//days.push(new program.Day());
	//days.push(new program.Day());	
	//days[0].get_Content	
	
	var dayN = programXml.getElementsByTagName('day');
	
	for(j=0; j<dayN.length; j++) { 
	    var day = new program.Day();
	    days.push(day);
	
		//if(dayN[i].getAttribute('id') == thisDay) {
			var timesN = dayN[j].getElementsByTagName('timeslot');
			var dayTxt = dayN[j].getAttribute('date');
		//	break;
		//}
						
	        for(i=0; i<timesN.length; i++) {
	            day.set_Id(j);
		        day.get_Content()[i] = [];
		        day.get_Content()[i]['hour'] = timesN[i].getAttribute('start')+' - '+timesN[i].getAttribute('end');
		        day.get_Content()[i]['data'] = [];
		        var sessions = timesN[i].getElementsByTagName('session');
		        if(!sessions.length) {
			        var sessions = timesN[i].getElementsByTagName('nosession');
			        for(c=0; c<sessions.length; c++) {
				        day.get_Content()[i]['data'][c] = [];
				        day.get_Content()[i]['data'][c]['issession']      = false;
				        //day.get_Content()[i]['data'][c]['title']			= sessions[c].getAttribute('type');
				        day.get_Content()[i]['data'][c]['speaker']		= '-';
				        day.get_Content()[i]['data'][c]['speaker_text']	= '-';
				        switch ( sessions[c].getAttribute('type') ) {
				        case "welcome_day1": 
				        case "welcome_day2": 
				            day.get_Content()[i]['data'][c]['title'] = "Registration"; break;
				        case "cocktail": 
				            day.get_Content()[i]['data'][c]['title'] = "Closing Cocktail"; break;
				        case "lunch": 
				            day.get_Content()[i]['data'][c]['title'] = "Lunch + Lightning Sessions"; break;
				        case "break": 
				            day.get_Content()[i]['data'][c]['title'] = "Coffee Break"; break;
				        case "partnerexpo": 
				            day.get_Content()[i]['data'][c]['title'] = "Partner Expo"; break;

				        case "changesessions": 
				            day.get_Content()[i]['data'][c]['title'] = "Change Sessions"; break;
				        default:
				            day.get_Content()[i]['data'][c]['title']			= sessions[c].getAttribute('type'); break;
				        }
        				
				        day.get_Content()[i]['data'][c]['text']			= sessions[c].getAttribute('text');
				        day.get_Content()[i]['data'][c]['code']			= '-';
				        day.get_Content()[i]['data'][c]['color']			= getColor();
				        day.get_Content()[i]['data'][c]['pic']			= '';
				        day.get_Content()[i]['data'][c]['date']			= dayTxt+' - '+day.get_Content()[i]['hour'];
				        day.get_Content()[i]['data'][c]['more_url']		= '';
			        }
		        } else {
			        for(c=0; c<sessions.length; c++) {
				        var type = sessions[c].getAttribute('type');
				        var id = sessions[c].getAttribute('id');
				        //var sessionData = getSessionData(type, id);
        				
				        var sessionextract = SelectSingleNode(programXml, "/event/details/sessions[@type='" + type + "']/sessionextract[@id='" + id + "']");
        				
        				
				        //programXml.selectSingleNode("/event/details/sessions[@type='" + type + "']/sessionextract[@id='" + id + "']");

        //title
        //longdescription
        //ppt

        				
				        day.get_Content()[i]['data'][c] = [];
				        day.get_Content()[i]['data'][c]['issession'] = true;
				        day.get_Content()[i]['data'][c]['title'] = SelectSingleNode( sessionextract,"title").text; //sessions[c].getElementsByTagName('title')[0].firstChild.nodeValue;
                        var speakers = SelectNodes( sessionextract,"speaker");
                        var s = 0;
                        day.get_Content()[i]['data'][c]['speaker'] = "";
                        day.get_Content()[i]['data'][c]['speaker_text'] = "";
                        day.get_Content()[i]['data'][c]['pic'] = "";
                        for(s=0; s<speakers.length; s++) {
                            var speakerId = SelectSingleNode(speakers[s], "more").text;
                            var speakerMore = SelectSingleNode( speakerXml,"/speakers/speaker[more='"+ speakerId+"']");
                            
				            day.get_Content()[i]['data'][c]['speaker']		= SelectSingleNode(  speakers[s],"name").text;// "Wim Verhaeghen"; //sessions[c].getElementsByTagName('speaker')[0].getElementsByTagName('name')[0].firstChild.nodeValue;
				            day.get_Content()[i]['data'][c]['speaker_text']	= SelectSingleNode(  speakerMore,"bio").text;// "Blah Blah"; //sessions[c].getElementsByTagName('speaker')[0].getElementsByTagName('text')[0].firstChild.nodeValue;                
                            day.get_Content()[i]['data'][c]['pic']			= SelectSingleNode( speakerMore,"picture").text;//""; //sessions[c].getElementsByTagName('speaker')[0].getElementsByTagName('pic')[0].firstChild.nodeValue;				    
                        }				
				        day.get_Content()[i]['data'][c]['text']			= SelectSingleNode ( sessionextract,"longdescription").text; //sessions[c].getElementsByTagName('longdescription')[0].firstChild.nodeValue;
				        day.get_Content()[i]['data'][c]['code']			= getCode(type); //+id;
				        day.get_Content()[i]['data'][c]['color']		= getColor(type);				
				        day.get_Content()[i]['data'][c]['date']			= dayTxt+' - '+day.get_Content()[i]['hour'];
				        day.get_Content()[i]['data'][c]['more_url']		= "http://www.wiver.com"; //'http://www.'+sessions[c].getElementsByTagName('speaker')[0].getElementsByTagName('more')[0].firstChild.nodeValue+'.com';
			        }
		        }
	        }
		
		
	}
	createSLProgram();
}

function getCode(type) {
	if(type == 'itpro') return 'ITPRO';
	else if(type == 'itproarc') return 'ITPRO/ARC';
	else if(type == 'dev') return 'DEV';
	else if(type == 'devarc') return 'DEV/ARC';
	else if(type == 'arc') return 'ARC';
	else return 'ALL';
}

function getColor(type) {
	if(type == 'itpro') return '5F95C1';
	else if(type == 'itproarc') return '008aff';
	else if(type == 'dev') return 'ebb04e';
	else if(type == 'devarc') return 'ff9f00';
	else if(type == 'arc') return '31E300';
	else return 'cccccc';
}

function createSLProgram() {
	document.getElementById("program_loader").style.display = 'none';
	agenda = new program.Program();
	Silverlight.createObjectEx({
		source: "Program.xaml",
		parentElement: document.getElementById("program"),
		id: "sl_program",
		properties: {
			width: "100%",
			height: "100%",
			version: "1.0"			
		},
		events: {
			onLoad: Silverlight.createDelegate(agenda, agenda.handleLoad),
			onError: Silverlight.createDelegate(this,OnErrorEventHandler)
		}
	});
}
function OnErrorEventHandler(sender, errorArgs)
{
    // The error message to display.
    var errorMsg = "xxx Silverlight Error: \n\n";
    
    // Error information common to all errors.
    errorMsg += "Error Type:    " + errorArgs.errorType + "\n";
    errorMsg += "Error Message: " + errorArgs.errorMessage + "\n";
    errorMsg += "Error Code:    " + errorArgs.errorCode + "\n";
    
    // Determine the type of error and add specific error information.
    switch(errorArgs.errorType)
    {
        case "RuntimeError":
            // Display properties specific to RuntimeErrorEventArgs.
            if (errorArgs.lineNumber != 0)
            {
                errorMsg += "Line: " + errorArgs.lineNumber + "\n";
                errorMsg += "Position: " +  errorArgs.charPosition + "\n";
            }
            errorMsg += "MethodName: " + errorArgs.methodName + "\n";
            break;
        case "ParserError":
            // Display properties specific to ParserErrorEventArgs.
            errorMsg += "Xaml File:      " + errorArgs.xamlFile      + "\n";
            errorMsg += "Xml Element:    " + errorArgs.xmlElement    + "\n";
            errorMsg += "Xml Attribute:  " + errorArgs.xmlAttribute  + "\n";
            errorMsg += "Line:           " + errorArgs.lineNumber    + "\n";
            errorMsg += "Position:       " + errorArgs.charPosition  + "\n";
            break;
        default:
            break;
    }
    // Display the error message.
    //alert(errorMsg);
}





if (!window.Silverlight) window.Silverlight = {};
Silverlight.createDelegate = function(instance, method) {
	return function() { return method.apply(instance, arguments); }
}
