/* This file augments ipui-packer.js and is intended to act as a site-wide js library. */

// ==========================
// = JW Player Support File =
// ==========================

var player = null;
var playerid = null;

function playerReady(obj) {
	playerid = obj['id'];
	player = document.getElementById(playerid);
	
	// set up listener functions for player
	player.addControllerListener("ITEM", "activate_track");
	player.addControllerListener("STOP", "deactivate_tracks");
	
	// print playlist
	show_playlist();
};

function show_playlist() {
	// renders playlist for specified player into specified div

	// get player's playlist
	var playlistitems = player.getPlaylist();

	if (playlistitems) {
		var playlistnode = document.createElement("ol");
		playlistnode.id = playerid + "_tracks";
		playlistnode.className = "tracks";	
	
		for (var i=0; i < playlistitems.length; i++) {		
			var plisttitle = isset(playlistitems[i].title) ? playlistitems[i].title : playlistitems[i].file;
			
			// create list item
			var listitem = document.createElement("li");
			listitem.id = playerid + "_track_" + i;
			if(i % 2 == 0) {
				listitem.className = "track even track_" + i;
			} else {
				listitem.className = "track odd track_" + i;
			}
			
			// text node
			var txtNode = document.createTextNode(plisttitle);
			listitem.appendChild(txtNode);
			
			// tools
			var listtools = document.createElement("div");
			listtools.className = "tools";
			
			// stream link
			if(isset(playlistitems[i].file)) {
				var streamlink = document.createElement('a');
				streamlink.setAttribute("href", "javascript:void(0);");
				streamlink.setAttribute("onClick", "playtrack(\"" + i + "\", \"" + playerid + "\");");
				streamlink.className = "stream";
				streamlink.appendChild(document.createTextNode("stream"));
				listtools.appendChild(streamlink);
			}
			
			// download link
			if(isset(playlistitems[i].link)) {
				var downloadlink = document.createElement('a');
				downloadlink.setAttribute("href", playlistitems[i].link);
				downloadlink.className = "download";
				downloadlink.appendChild(document.createTextNode("download"));
				listtools.appendChild(downloadlink);
			}
					
			// append tools to list item
			listitem.appendChild(listtools);
					
			// insert list item into list
			playlistnode.appendChild(listitem);
		};
		
		
		// find div to place list inside 
		var targetnode = document.getElementById(playerid + "_playlist");
		targetnode.appendChild(playlistnode);
	} else {
		setTimeout("show_playlist", 300);
	}
}

// listener functions
function activate_track(obj)
{
	// sets selected track to "playing" and deactivates all other tracks
	
	// get playlist node
	var playlistnode = document.getElementById(obj['id'] + "_tracks");
	
	// get childnodes of playlist node
	var tracks = playlistnode.childNodes;
	
	for (var i=0; i < tracks.length; i++) {
		tracknode = tracks[i];
		if(i == obj['index']) {
			// activate track
			tracknode.className += " playing";
		} else {
			tracknode.className = str_replace(" playing", "", tracknode.className);
		}
	};
}

function deactivate_tracks(obj)
{
	// deactivates all tracks
	
	// get playlist node
	var playlistnode = document.getElementById(obj['id'] + "_tracks");
	
	// get childnodes of playlist node
	var tracks = playlistnode.childNodes;
	
	for (var i=0; i < tracks.length; i++) {
		tracknode = tracks[i];
		tracknode.className = str_replace(" playing", "", tracknode.className);
	};
	
}

// ========================
// = Controller functions =
// ========================
function playtrack(tracknum, playerid)
{
	// directs media player to switch to selected track
	var player = document.getElementById(playerid);
	
	player.sendEvent('ITEM', tracknum);
}

// support functions
function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // -    depends on: is_array
    
    var f = search, r = replace, s = subject;
    var ra = is_array(r), sa = is_array(s), f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
    };
     
    return sa ? s : s[0];
}

function is_array( mixed_var ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Legaev Andrey
    // +   bugfixed by: Cord
 
    return ( mixed_var instanceof Array );
}

function pausecomp(millis)
{
	var date = new Date();
	var curDate = null;
	
	do { curDate = new Date(); }
	while(curDate-date < millis);
}

function isset(  ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    
    var a=arguments; var l=a.length; var i=0;
    
    if (l==0) { 
        throw new Error('Empty isset'); 
    }
    
    while (i!=l) {
        if (typeof(a[i])=='undefined' || a[i]===null) { 
            return false; 
        } else { 
            i++; 
        }
    }
    return true;
}

// =====================================
// = Social Bookmarking code generator =
// =====================================


function getPageDesc()
{
	// gets page description
	
	var foundDesc = false;
	var i = 0;
	var x = document.getElementsByTagName("meta");
	var description = null;
	
	do {
		if (x[i].name == "Description" || x[i].name == "description") {
			description = x[i].content;
			foundDesc = true;
		}
		i++
	} while(foundDesc == false && i < x.length);
	
	description = encodeURIComponent(description);
	
	return description;
}

function getDiggLink(pageURL, pageTitle, pageDesc) {
	var linkurl = "http://digg.com/submit?url="+ pageURL + "&title=" + pageTitle + "&bodytext=" + pageDesc + "&media=news&topic=music";
	var digg_link = document.createElement("a");
	digg_link.setAttribute("href",linkurl);
	digg_link.setAttribute("target", "_blank");
	digg_link.setAttribute("title", "Digg This!");
	digg_link.id = "add-to-digg";
	digg_link.className = "sn-addButton digg";
	digg_link.appendChild(document.createTextNode("Digg This!"));
	
	return digg_link;	
}

function getStumbleUponLink(pageURL, pageTitle, pageDesc) {
	var linkurl = "http://www.stumbleupon.com/submit?url=" + pageURL + "&title=" + pageTitle;
	var su_link = document.createElement("a");
	su_link.setAttribute("href",linkurl);
	su_link.setAttribute("target", "_blank");
	su_link.setAttribute("title", "Stumble It!");
	su_link.id = "add-to-stumbleupon";
	su_link.className = "sn-addButton stumbleupon";
	su_link.appendChild(document.createTextNode("Stumble It!"));
	
	return su_link;
}

function getFacebookLink(pageURL, pageTitle, pageDesc) {
	var linkurl = "http://www.facebook.com/share.php?u=" + pageURL;
	var fb_link = document.createElement("a");
	fb_link.setAttribute("onclick", "fbs_click(" + pageURL + ", " + pageTitle + ");");
	fb_link.setAttribute("href", linkurl);
	fb_link.setAttribute("target", "_blank");
	fb_link.setAttribute("title", "Share on Facebook");
	fb_link.id = "add-to-facebook";
	fb_link.className = "sn-addButton facebook";
	fb_link.appendChild(document.createTextNode("Share on Facebook"));
	
	return fb_link;
}

function getMyspaceLink(pageURL, pageTitle, pageDesc) {
	var linkurl = 'http://www.myspace.com/index.cfm?fuseaction=postto&' + 't=' + pageTitle
+ '&c=' + pageDesc + '&u=' + pageURL + '&l=' + 8;
	var myspace_link = document.createElement("a");
	myspace_link.setAttribute("href", linkurl);
	myspace_link.setAttribute("target", "_blank");
	myspace_link.setAttribute("title", "Add to Myspace");
	myspace_link.id = "add-to-myspace";
	myspace_link.className = "sn-addButton myspace";
	myspace_link.appendChild(document.createTextNode("Add to Myspace"));
	
	return myspace_link;
}

function getDeliciousLink (pageURL, pageTitle, pageDesc) {
	var linkurl = "http://delicious.com/save?v=5&noui&jump=close&url="+pageURL+"&title="+pageTitle;
	var dl_link = document.createElement("a");
	dl_link.setAttribute("href", linkurl);
	dl_link.setAttribute("onclick", "dls_click(" + pageURL + ", " + pageTitle + ");");
	dl_link.setAttribute("target", "_blank");
	dl_link.setAttribute("title", "Bookmark on Delicious");
	dl_link.id = "add-to-delicious";
	dl_link.className = "sn-addButton delicious";
	dl_link.appendChild(document.createTextNode("Bookmark on Delicious"));
	
	return dl_link;
}

function fbs_click(pageURL, pageTitle) {
	window.open('http://www.facebook.com/sharer.php?u='+pageURL+'&t='+pageTitle, 'sharer', 'toolbar=0,status=0,width=626,height=436');
	return false;
}

function dls_click(pageURL, pageTitle) {
	window.open('http://delicious.com/save?v=5&noui&jump=close&url='+pageURL+'&title='+pageTitle, 'delicious', 'toolbar=no,status=0,width=550,height=550');
	return false;
}

function sbLinks(targetDiv, URL, title, desc) {
	// adds social bookmarking links to target div element	
	var pageURL = isset(URL) == false ? encodeURIComponent(window.location.href) : URL;
	var pageTitle = isset(title) == false ? encodeURIComponent(document.title) : title;
	var pageDesc = isset(desc) == false ? getPageDesc() : desc;
	var mediaType = null;
		
	var target = document.getElementById(targetDiv);
	
	var sbLinks = document.createElement("ul");
	sbLinks.id = "social_bookmarks";
	
	// append children returned from functions
	var diggli = document.createElement("li");
	diggli.className = "social_bookmark digg";
	diggli.id = "digglink";
	diggli.appendChild(getDiggLink(pageURL, pageTitle, pageDesc));
	sbLinks.appendChild(diggli);
	
	var fbli = document.createElement("li");
	fbli.className = "social_bookmark facebook";
	fbli.id = "facebooklink";
	fbli.appendChild(getFacebookLink(pageURL, pageTitle, pageDesc));
	sbLinks.appendChild(fbli);
	
	var suli = document.createElement("li");
	suli.className = "social_bookmark stumbleupon";
	suli.id = "stumbleuponlink";
	suli.appendChild(getStumbleUponLink(pageURL, pageTitle, pageDesc));
	sbLinks.appendChild(suli);
	
	var deli = document.createElement("li");
	deli.className = "social_bookmark delicious";
	deli.id = "deliciouslink";
	deli.appendChild(getDeliciousLink(pageURL, pageTitle, pageDesc));
	sbLinks.appendChild(deli);
	
	var msli = document.createElement("li");
	msli.className = "social_bookmark myspace";
	msli.id = "myspacelink";
	msli.appendChild(getMyspaceLink(pageURL, pageTitle, pageDesc));
	sbLinks.appendChild(msli);
	
	target.appendChild(sbLinks);
}

