/** 
 * Familiar Javascript functions
 */
 
// Base64 encoding/decoding 
 
var Base64 = (function() {
  function encode_base64(data) {
    var out = "", c1, c2, c3, e1, e2, e3, e4;
    for (var i = 0; i < data.length; ) {
       c1 = data.charCodeAt(i++);
       c2 = data.charCodeAt(i++);
       c3 = data.charCodeAt(i++);
       e1 = c1 >> 2;
       e2 = ((c1 & 3) << 4) + (c2 >> 4);
       e3 = ((c2 & 15) << 2) + (c3 >> 6);
       e4 = c3 & 63;
       if (isNaN(c2))
         e3 = e4 = 64;
       else if (isNaN(c3))
         e4 = 64;
       out += tab.charAt(e1) + tab.charAt(e2) + tab.charAt(e3) + tab.charAt(e4);
    }
    return out;
  }

  function decode_base64(data) {
    var out = "", c1, c2, c3, e1, e2, e3, e4;
    for (var i = 0; i < data.length; ) {
      e1 = tab.indexOf(data.charAt(i++));
      e2 = tab.indexOf(data.charAt(i++));
      e3 = tab.indexOf(data.charAt(i++));
      e4 = tab.indexOf(data.charAt(i++));
      c1 = (e1 << 2) + (e2 >> 4);
      c2 = ((e2 & 15) << 4) + (e3 >> 2);
      c3 = ((e3 & 3) << 6) + e4;
      out += String.fromCharCode(c1);
      if (e3 != 64)
        out += String.fromCharCode(c2);
      if (e4 != 64)
        out += String.fromCharCode(c3);
    }
    return out;
  }

  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  return { encode:encode_base64, decode:decode_base64 };
})();


// jQuery slide function (obj = target)

function slidetoggle(obj, speed, triggerdiv, opentext, closedtext) {
	var currenttext = jQuery(triggerdiv).text();
	jQuery(obj).slideToggle(speed, function() {
		if (currenttext == opentext) {
			jQuery(triggerdiv).text(closedtext);
		} else {
			jQuery(triggerdiv).text(opentext);
		}
	});
}


// jQuery hide/unhide function w/fade (obj = target)

function displaytoggle(obj, speed, triggerdiv, opentext, closedtext) {
	var display = jQuery(obj).css('display');
	if (display == 'none') {
		jQuery(obj).fadeIn(speed);
		jQuery(triggerdiv).text(closedtext);
	} else {
		jQuery(obj).fadeOut(speed);
		jQuery(triggerdiv).text(opentext);
	}
}


// jQuery hide "no related content" boxes - also do hover effect for featured release

// function hideunrelated() {
jQuery(document).ready(function(){
	jQuery('.nothingfound').parent().parent().fadeOut('4000');

    jQuery('#catalog-featured-wrapper').hover(
        function() 
        {
            jQuery(this).data('orig_left',jQuery(this).css('left'));
            jQuery(this).css('left','0px');
        },
        function() 
        {
            jQuery(this).css('left',jQuery(this).data('orig_left'));
        }
    );
});
//}

// Media player functions to ensure only one stream is played at a time

mediaplayerlist = new Array();

function addplayer(playerid) {
	mediaplayerlist.push(playerid);
}

function stopmediaplayers(obj) {
	if (obj != null) {
		for (var id in mediaplayerlist) {
			if (obj.id != mediaplayerlist[id]) {
				document.getElementById(mediaplayerlist[id]).sendEvent('STOP');
			}
		}
	} else {
		for (var id in mediaplayerlist) {
			document.getElementById(mediaplayerlist[id]).sendEvent('STOP');
		}
	}
}
