/////////////////////////////////////////////////////////////////////////////////////
// Written by Isaac Lau (CLSMSS - IT Team), isaac@clsmss.edu.hk
// Last Updated: 2007-07-04
// For JW FLV Player v3.99 written by Jeroen Wijering (http://www.jeroenwijering.com/)
// Modified from http://www.jeroenwijering.com/embed/javascript.html
// Distributed under Creative Common License
// http://creativecommons.org/licenses/by-nc-sa/2.0/

// Configurable parameters (now saved in config.js)
//var titlePrefix = "CLSMSS Video - "; // title prefix
//var vHeight = 306; // default height of video (multiple of 9 recommended)
//var show_vlink = 1; // show direct link to video
//var videoRoot = ""; // video root location, must with "/" appended, default ""

// ID of DIVs and other objects
var div_id = "vplayer"; // id of the DIV that contains the player
var vtitle_id = "vtitle"; // id of the DIV to contain video/event title
var vdesc_id = "vdesc"; // id of the DIV to contain video/event description
var vlist_id = "videoList"; // id of the tag to contain video list
var vlink_id = "vlink"; // id of DIV contain direct link to the video

// Other global variables
var curPos;
var curVol;
var descArray = new Array(); // storing description
var wideArray = new Array(); // storing wide flag (1 or 0)
var selected = document.location.search.substr(1);
var first = 1; // firstly loaded

// JavaScript API for controling Flash Video Player
function sendEvent(typ,prm) {
  thisMovie(player_id).sendEvent(typ,prm);
};

function loadFile(file,title,link,id,image,author,captions,category,start,type) {
  thisMovie(player_id).loadFile(file,title,link,id,image,author,captions,category,start,type);
};

function thisMovie(movieName) {
  if(navigator.appName.indexOf("Microsoft") != -1) {
    return window[movieName];
  } else {
    return document[movieName];
  }
};

function getUpdate(typ,pr1,pr2) {
  if (typ == "time") { curPos = pr1; }
  else if (typ == "volume") { curVol = pr1; }
  var id = document.getElementById(typ);
  if (id) {
    id.innerHTML = typ+": "+Math.round(pr1);
    (pr2 == undefined) ? null : (id.innerHTML += ", "+Math.round(pr2));
  }
};

function itemData(obj) {
  var id = document.getElementById("data");
  if (id) {
    var nodes = "";
    for (var i in obj) { 
      nodes += "<li>"+i+": "+obj[i]+"</li>"; 
    }
    id.innerHTML = nodes;
  }
};

// Codes added by Isaac:
// Add event listenr(s) to window.load
function onWindowLoad(func) {
  if (document.all) {
    // IE
    window.attachEvent('onload', func);
  } else {
    // Firefox
    window.addEventListener('load', func, false);
  }
}


// Launch Flash Video Player and Load a file (valid for v3.7 onwards)
function launchPlayer(path,title,desc,wide) {
  // set title and description
  document.getElementById(vtitle_id).innerHTML = title;
  document.getElementById(vdesc_id).innerHTML = desc;
  // start player
  var height = vHeight;
  var width = (wide==1)? vHeight*16/9 : vHeight*4/3;
  var use_list = (path.substr(path.length-3,3)=="xml");

  var Video = new SWFObject("flvplayer.swf", use_list?"playlist":"single",
                            width, height+(use_list?90:20), "7");
  Video.addParam("allowfullscreen","true");
  Video.addVariable("file",videoRoot+path);
  Video.addVariable("displayheight",vHeight);
  Video.addVariable("lightcolor","0xff9999");
  Video.addVariable("backcolor","0x000000");
  Video.addVariable("frontcolor","0xffffcc");
  Video.addVariable("repeat","list");
  Video.addVariable("enablejs","true");
  Video.addVariable("shuffle","false");

  Video.write(div_id);
  
};

// Load selected video
function loadSelectedVideo() {
  var idx = document.getElementById("eventList").selectedIndex;
  var path = document.getElementById("eventList").options[idx].value; 
  var path0 = path.split("/")[0];
  var title = document.getElementById("eventList").options[idx].innerHTML;
  var desc = descArray[idx];
  var wide = wideArray[idx];
  if (selected) { // only for dedicated-link url
    if (!first) window.location.search = path0; // reload page here
    document.title = titlePrefix + title;
  }

  if (show_vlink) {
    var vlink_div = document.getElementById(vlink_id);
    var vlink = "<a href=\"?" + path0 + "\" alt=\"" + title + "\">direct link to this video</a>";
    vlink_div.style.visibility = "visible";
    vlink_div.innerHTML = vlink;
  }

  launchPlayer(path,title,desc,wide);
  first = 0; // turn off flag
}


/////////////////////////////////////////////////////////////////////////////////////
// XML Handling
/////////////////////////////////////////////////////////////////////////////////////
// Reference for XML calls:
// http://www.w3schools.com/xml/xml_parser.asp
// http://www.quirksmode.org/dom/importxml.html
// http://www.sitepoint.com/print/xml-javascript-mozilla
var xmlDoc;

// Load XML file of video list
loadXML = function() {
  // code for Mozilla, Firefox, Opera, etc.
  if (document.implementation && document.implementation.createDocument)
  {
    xmlDoc=document.implementation.createDocument("","",null);
    xmlDoc.onload = showList;
  }
  // code for IE
  else if (window.ActiveXObject)
  {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.onreadystatechange = function () {
      if (xmlDoc.readyState == 4) showList();
    };
  }
  else
  {
    alert('Your browser cannot handle this script');
  }
  xmlDoc.load("list.xml");
}


// Show a list of available events/videos
function showList()
{
  var set = 0;
  // Show Event List
  var events = xmlDoc.getElementsByTagName("event");
  var list = "<select id=\"eventList\" onchange=\"loadSelectedVideo()\">\n";
  for (i=0; i<events.length; i++)
  {
    var path = events[i].getElementsByTagName("path")[0].firstChild.nodeValue;
    var title = events[i].getElementsByTagName("title")[0].firstChild.nodeValue;
    descArray[i] = events[i].getElementsByTagName("description")[0].firstChild.nodeValue;
    if (obj = events[i].getElementsByTagName("wide"))
      wideArray[i] = obj[0].firstChild.nodeValue;
    else
      wideArray[i] = 0;
    var item = "<option ";
    // select item from query string, or the latest one
    if ( (selected && (path.split("/")[0]==selected)) || (!set && (i==events.length-1)) ) {
      item += "selected=\"selected\" ";
      set = 1;
    }
    item += "value=\"" + path + "\">" + title + "</option>\n";
    list += item;
  }
  list += "</select>\n";
  document.getElementById(vlist_id).innerHTML += list;

  // Load first video
  loadSelectedVideo();
  //startPlayer(); // obsoleted
}


///////////////////////////////////////////////
// Initialization
onWindowLoad(loadXML);

