// ==UserScript==
// @name          TVNZ OnDemand direct download script v0.6
// @namespace     http://www.additiverich.com/gm/
// @description   Links directly to flash video (FLV) files on TVNZ's website
// @include       http://tvnz.co.nz/*
// @include       http://tvnzondemand.co.nz/content/*
// ==/UserScript==

var player = document.getElementById("player");
if(player) {
    for(i = 0; i < player.childNodes.length; i++) {
        if(player.childNodes[i].name == "flashvars") {
            vars = player.childNodes[i].value;
        }
    }
}
if(vars) {
  tempList = vars.split("&");
  for (var i=0;i<tempList.length;i++) {
    var pair = tempList[i].split("=");
    if (pair[0] == "playlist") {
      playlistURI = pair[1];
    }
  }
}

if(console) { console.log(playlistURI); }

if(playlistURI) {
  /* Download SMIL from server */
  GM_xmlhttpRequest({
    method: 'GET',
    url   : 'http://' + document.domain + playlistURI,
    onload : completeRequest
  });
}

function completeRequest(r) {
	var parser = new DOMParser();
	var dom = parser.parseFromString(r.responseText, "application/xml");
	var videos = dom.getElementsByTagName('seq');

	var currentChapter = "";
	var links = "";

	for (var i = 0; i < videos.length; i++) {
		var video = videos[i];
		var nielsen = video.getElementsByTagName('param')[0].textContent;

		/* Work out chapter number by splitting by doing a RegExp */
		var re = new RegExp("chapt-(\\d+)$");
		var chapter = ""; match = re.exec(nielsen); if(match) { chapter = match[1]; }

		if(chapter) {
			var chapters = video.getElementsByTagName('video');
			for(var j = 0; j < chapters.length; j++) {
				var url = chapters[j].getAttribute("src");
				if(url.indexOf("http") > -1) {
					var bitrate = chapters[j].getAttribute("systemBitrate");
					bitrate = Math.ceil(bitrate / 1000) + "k";
					if(chapter != currentChapter) {
						links += "&nbsp;&nbsp;<span class=\"episode_num\">Chapter " + chapter + ": ";
					}
					links += "&nbsp;&nbsp;<a href=\"" + url + "\">" + bitrate + "</a>";

					if(chapter != currentChapter) {
						currentChapter = chapter;
					}
				}
			}

			if(links == "") {
				links += "&nbsp;&nbsp;Sorry, this show can't be downloaded.";
			}

		}
	}

	if(links != "") {
		var els = document.getElementsByTagName("div");
		for(i = 0; i < els.length; i++) { if(els[i].className == "title") { episodeNum = els[i]; break; }}
		if(episodeNum) {
			// if(console) { console.log("LINKS: " + links); }
			episodeNum.innerHTML += "<br /><div><strong>Direct download links:</strong>" + links + "</div>";
		}
	}
}
