/*
 *  (c) Copyright 2000-2001
 *      everstream, Inc.
 *      All rights reserved.
 */

//=============================================================================================
//                  Common JS Library
//=============================================================================================

// Right click disabling | 1 = disabled -or- 0 = allow
var rightClickDisable = 0;
var initialized = false;
var imageCache = new Array();
var playLoaded = false;
var playStarted = false;
var isIE;
var volSlider;
var SNX;
var inAd = false;
var currentStation = "";
var defaultBanner;

initLibrary();

function initLibrary()
{
    isIE = isBrowserName("MSIE");

    rightClickDisable = !DEBUG_TUNER;

    if (rightClickDisable) {
        if (isIE){
            document.oncontextmenu  = function() { return false; }
            document.onmousedown    = function() { return false; }
        } else {
            window.captureEvents(Event.MOUSEDOWN);
            window.captureEvents(Event.MOUSEUP);
            window.onmousedown = function(e){ if(e.which == 3) return false; }
            window.onmouseup = function(e){ if(e.which == 3) return false; }
        }
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function openChild(w)
{
    if (w == "feedback") {
	createStandardWindow(INTERACT_URL,"Interact","", 480,480,480,480);
    } else if (w == "prefs") {
	createStandardWindow(PREFERENCES_URL,"Preferences","",195,161,199,166);
    } else if (w == "editmix") {
	var url = EDITMIX_URL;
	if (isIE) url += "bType=IE";
	createStandardWindow(url, "MyMix", "scrollbars,", 480,416,480,400);
    }

    updateDocumentTitle();
}

function createStandardWindow(url, title, params, ieH, ieW, nsH, nsW)
{
    var str = params;
    str += "left=10,top=10,height=" + (isIE ? ieH : nsH) + "width=" + (isIE ? ieW : nsW) + ",resizable=0";
    if (!isIE) str += ",dependent";
    return window.open(url,title,str);
}

function canXmlHttp() {
 try {
     if (window.XMLHttpRequest) return true;
 } catch(e) {
 }
 try {
     if (window.ActiveXObject) return true;
 } catch(e) {
 }
 return false;
}

function getXmlHttp() {
 try {
     if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
     }
 } catch(e) {
 }
 try {
     if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
     }
 } catch(e) {
 }
}

function XmlRequestor(context, url, fn) {
    this.request = getXmlHttp();
    this.context = context;
    this.started = false;
    if (this.request != null) {
	this.request.open("GET",CacheBust(url),true);
	this.request.onreadystatechange=fn;
    }
}
XmlRequestor.prototype.MakeRequest = function() { this.started = true; this.request.send(""); }
XmlRequestor.prototype.Ready = function() { return this.request.readyState == 4; }
XmlRequestor.prototype.Success = function() { return this.request.status == 200; }
XmlRequestor.prototype.Started = function() { return this.started; }
XmlRequestor.prototype.GetAnswer = function() {
    var xmlDocument;
    if (document.implementation.createDocument) {//Firefox
	var parser = new DOMParser();
	xmlDocument = parser.parseFromString(this.request.responseText, "text/xml");
    } else { //IE
	xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
	xmlDocument.async = false;
	xmlDocument.loadXML(this.request.responseText);
    }
    return xmlDocument;
}

var preroll_http;

function getAdUrl(segment, scope) {
    var url = Custom_GetAdUrl(scope);
    if (url != null) return url;
    return AD_SERVER + "?segment=" + segment + "&scope=" + scope + "&site=" + SNX.StationName + "&format=" + SNX.Channel.Name;
}

function getPreroll() {
  preroll_http = new XmlRequestor("preroll", getAdUrl(1, "preroll"), adLoadStateChange);
  if (preroll_http.request) {
      preroll_http.MakeRequest();
  } else {
      AdBreak_StartNext();
  }
}

var currentAdBreak;
function AdBreak(items) {
    this.items = items;
    this.index = 0;
    this.adTimer = -1;
    this.adWindow = null;
    this.StartNext = AdBreak_StartNext;
    this.Cleanup = AdBreak_Cleanup;
    this.AdFinished = AdBreak_AdFinished;
    this.AdTimeout = AdBreak_AdTimeout;
}

function AdBreak_StartNext() {
    var found = false;
    while (found != true) {
	if ((this.items == null) || (this.index >= this.items.length)) {
	    completeStationChange();
	    return;
	}
	var item = this.items.item(this.index);
	var attrs = item.attributes;
	var URL = attrs.getNamedItem("URL").nodeValue;
	var dur = attrs.getNamedItem("Duration").nodeValue;
	var height = attrs.getNamedItem("Height").nodeValue;
	var width = attrs.getNamedItem("Width").nodeValue;
	var type = attrs.getNamedItem("ContentType").nodeValue;

	if ((height == 0) || (width == 0)) {
	    var win = document.getElementById("coverArt");
	    if (win != null) {
		if (height == 0) height = win.height;
		if (width == 0) width = win.width;
	    } else {
		if (height == 0) height = 125;
		if (width == 0) width = 125;
	    }
	}

	var pad = 0;

	this.index++;

	debugOutput(2, "StartAd:" + URL);
	if (type == "Flash") {
	    found = true;
            this.adObject = new SWFObject(URL, "advert", width, height);
	    this.adWindow = addWindow(this.adObject.getSWFHTML(), "AdWindow");
	    this.adWindow.Width = width;
	    this.adWindow.Height = height;
	} else if (type == "WindowsMedia") {
	    found = true;
	    this.adObject = new WindowsMediaPlayer();
	    this.adObject.URL = URL;
	    this.adObject.Name = "advert";
	    this.adObject.ID = "advert";
	    pad = 1;
	    var ext = getExtension(URL).toLowerCase();
	    if (ext == "wmv") {
		this.adObject.Width = width;
		this.adObject.Height = height;
		pad = 2;
	    }
	    this.adWindow = this.adObject.create("AdWindow");
	    this.adWindow.style.visibility = (ext == "wmv") ? "visible" : "hidden";
	} else if (type == "IFrame") {
	    found = true;
	    this.adWindow = addIFRAME(URL, "AdWindow", width, height);
	}

	if (found) {
	    dur = dur - 0;
	    dur = dur + pad;
	    this.adType = type;
	    this.adTimer = setTimeout("currentAdBreak.AdTimeout();", dur * 1000);
	}
    }
}

function AdBreak_AdFinished() {
    this.Cleanup();
    this.StartNext();
}

function AdBreak_AdTimeout() {
    this.adTimer = -1;
    this.AdFinished();
}

function AdBreak_Cleanup() {
    if (this.adTimer != -1) {
	clearTimeout(this.adTimer);
	this.adTimer = -1;
    }
    if (this.adType == "WindowsMedia") {
	this.adObject.destroy();
    } else {
	if (this.adWindow != null) {
	    var body = document.getElementById("body");
	    body.removeChild(this.adWindow);
	}
    }
    this.adObject = null;
    this.adWindow = null;
    this.adType = "";
}

function adLoadStateChange() {
    if (preroll_http.Ready()) {
	var items = null;

	if (preroll_http.Success()) {
	    try {
	        var xml = preroll_http.GetAnswer().documentElement;
	        var newXml = Custom_ProcessAdResult(xml);
	        if (newXml) xml = newXml;
	        items = xml.getElementsByTagName("MediaItem");
	    } catch(e) {
	    }
	}
	if (currentAdBreak != null) currentAdBreak.Cleanup();
	currentAdBreak = new AdBreak(items);
	currentAdBreak.StartNext();
	preroll_http = null;
    }
}

function advert_finished() {
    if (currentAdBreak != null)
	currentAdBreak.AdFinished();
}

function advert_clicked() {
}

var pendingRequests;

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
function init()
{
    document.domain = "sonixtream.com";
    if (('trace' in QueryData) && (QueryData["trace"] != null))
	setDebugLevel(QueryData["trace"]);
    SNX = new SoniXtream(aff_alias, format_alias);
    var s = GetChannelCombo();
    if (s.length > 0) {
        var p = document.createElement("form");
        p.innerHTML = s;
        var body = document.getElementById("body");
        body.appendChild(p);
    }

    var v = XPlayerGetVolume();
    setVol(v);

    var win = document.getElementById("volumeSlider");
    if (win != null) {
	volSlider = new Slider(win);
	if (volSlider) { 
	    volSlider.setValue(v);
	    volSlider.onchange = function () { setVol(volSlider.getValue()); };	
	}
    }

    Custom_Init();

    stationChange(SNX.Channel.Name);

    if (canXmlHttp()) {
	pendingRequests = new Array();
	pendingRequests[pendingRequests.length] = new XmlRequestor("TitleSponsor", getAdUrl(1, "title&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("chSponsor", getAdUrl(1, "channel&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link1", getAdUrl(1, "link1&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link2", getAdUrl(1, "link2&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link3", getAdUrl(1, "link3&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link4", getAdUrl(1, "link4&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link5", getAdUrl(1, "link5&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link6", getAdUrl(1, "link6&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link7", getAdUrl(1, "link7&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("link8", getAdUrl(1, "link8&xml=yes"), loadElement);
	pendingRequests[pendingRequests.length] = new XmlRequestor("banner", getAdUrl(1, "banner&xml=yes"), loadElement);

	loadElement();
    }

    try {
	preloadCSSImages();
    } catch(e) {
    }
}

function insertElement(req, item) {
    var attrs = item.attributes;
    var URL = attrs.getNamedItem("URL").nodeValue;
    var height = attrs.getNamedItem("Height").nodeValue;
    var width = attrs.getNamedItem("Width").nodeValue;
    var click = attrs.getNamedItem("ClickURL").nodeValue;
    var type = attrs.getNamedItem("ContentType").nodeValue;

    if (type == "Flash") {
	var obj = new SWFObject(URL, req.context, width, height);
	var win = addWindow(obj.getSWFHTML(), "AdWindow");
	win.Width = width;
	win.Height = height;
    } else if (type == "WindowsMedia") {
	var obj = new WindowsMediaPlayer();
	obj.URL = URL;
	var ext = getExtension(URL).toLowerCase();
	if (ext == "wmv") {
	    obj.Width = width;
	    obj.Height = height;
	}
	obj.create(req.context);
    } else if (type == "Image") {
	var s = "<IMG src='" + URL + "' border=0></IMG>";
	if ((click != null) && (click != ""))
	    s = "<A href=\"" + AD_SERVER_HOST + "/clickspon.aspx?url=" + URL + "," + SNX.StationName + SNX.Channel.Name + "&dest=" + click + "\" target=_blank>" + s + "</A>";
	var win = addWindow(s, req.context);
    } else if (type == "IFrame") {
	addIFRAME(URL, req.context, width, height);
    }

    if (req.context == "banner")
	defaultBanner = URL;
}

function loadElement() {
    if (pendingRequests == null) return;

    for (i = 0; i < pendingRequests.length; i++) {
	var req = pendingRequests[i];
	if (req == null) continue;
	if (req.Ready()) {
	    if (req.Success()) {
		try {
                    if (!Custom_LoadAdElement(req)) {
		        var items = req.GetAnswer().documentElement.getElementsByTagName("MediaItem");
		        if (items.length > 0) insertElement(req, items[0]);
                    }
		} catch(e) {
		}
	    }
	    pendingRequests[i] = null;
	}
    }

    // start the next request
    for (i = pendingRequests.length - 1; i >= 0; i--) {
	var req = pendingRequests[i];
	if (req == null) continue;
	if (!req.Started()) {
	    req.MakeRequest();
	    break;
	}
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function f_onUnload()
{
    try {
	SNX.Close();
    } catch(e) {
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function saveBookmark()
{
    if (!initialized) return;
    curStation = escape(SNX.StationName + SNX.Channel.Name);
    var ck_station = curStation.toUpperCase();
    if(ck_station.indexOf("NEWS") == -1) {
        var cEntry = XPlayerGetMediaIndex();
        if (cEntry == 0) return;
        var now = new Date();
        fixDate(now);
        now.setTime(now.getTime() + 1 * 24 * 60 * 60 * 1000);
        setCookie(curStation, cEntry, now, "/");
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function updateDocumentTitle()
{
    if (!Custom_UpdateDocumentTitle())
	document.title = tunerTitle;
}

function drawNextSong()
{
    if (inAd) return;

    if (!Custom_DrawNextSong()) {
	setElementInnerHtml("next","");

	if (SNX.NextSong.Artist)
	    setElementInnerHtml("next","Next up: " + SNX.NextSong.Artist.substring(0, 38));
    }

    updateDocumentTitle();
}

function getCoverArtClickUrl()
{
    var s = Custom_GetCoverArtClickUrl();

    if (s == null) {
	var cbt = new Date();
	cbt = cbt.getTimezoneOffset() + cbt.getTime();
	s = "?a=" + SNX.StationName + "&f=" + SNX.Channel.Name + "&t=" + escape(SNX.NowPlaying.Artist) + "|" + escape(SNX.NowPlaying.Title) + "&u=" + String(cbt);
	s = CacheBust(SNX.NowPlaying.CoverArt + s);
    }
    return s;
}

function drawNowPlaying()
{
    if (inAd) return;

    if (!Custom_DrawNowPlaying()) {
	setElementInnerHtml("artist","");
	setElementInnerHtml("title","");

	if (SNX.NowPlaying.Artist)
	    setElementInnerHtml("artist",SNX.NowPlaying.Artist);
	if (SNX.NowPlaying.Title)
	    setElementInnerHtml("title",SNX.NowPlaying.Title);

	var elem = document.images["CoverArt"];
	if (elem) {
	    if (SNX.NowPlaying.CoverArt != "") {
	        elem.title = "Click to buy: " + SNX.NowPlaying.Artist;
                var t = getCoverArtClickUrl();
                if (t != elem.src)
	            elem.src = getCoverArtClickUrl();
	    }
        }
    }

    updateDocumentTitle();
}

function drawCommercial()
{
    if (!Custom_DrawCommercial()) {
        // nothing to do right now
    }
}

function drawAd()
{
    setElementInnerHtml("next","");
    setElementInnerHtml("artist","");
    setElementInnerHtml("title","");

    if (!Custom_DrawAd()) {
	if (SNX.NowPlaying.Artist)
	    setElementInnerHtml("artist",SNX.NowPlaying.Artist);
	if (SNX.NowPlaying.Title)
	    setElementInnerHtml("title", SNX.NowPlaying.Title);

	var elemArt = document.images["CoverArt"]
	if (elemArt) {
	    if ((SNX.NowPlaying.CoverArt != "") && !CacheBustCompare(elemArt.src, SNX.NowPlaying.CoverArt))
	        elemArt.src = CacheBust(SNX.NowPlaying.CoverArt);
	    elemArt.title = "Click to " + (SNX.NowPlaying.adURL ? "visit: " : "buy: ") + SNX.NowPlaying.Artist;
	}

	if (SNX.NextSong.Title)
	    setElementInnerHtml("next","Next up: " + SNX.NextSong.Title.substring(0, 38));
    }

    updateDocumentTitle();
}

function refreshMetaInfo()
{
    if (inAd) {
        drawAd();
    } else {
        drawNowPlaying();
        drawNextSong();
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function stationChange(s)
{
    // TODO: if we were in an ad, we need to stop the current ad

    inAd = false;

    s = Custom_ChannelChange(s);
    if (s == null) return;

    s = SNX.SelectChannel(s);
    if (s == null) return;

    playLoaded = false;
    playStarted = false;
    initialized = false;

    // XPlayerUnload();
    getPreroll();
}

function completeStationChange() {
    XPlayerSetStation(SNX.Channel);

    if (!Custom_ChannelChanged()) {
        var elem = document.getElementById("chSponsor");
        if (elem && (elem.src != SNX.Channel.Sponsor))
            elem.src = SNX.Channel.Sponsor;
    }
    updateDocumentTitle();
    XPlayerInit();
    preroll_http = null;
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function setVol(w)
{
    if (Custom_PlayerButton(w))
	return;

    if (w == "mute") {
        if (!XPlayerMuted()) {
            XPlayerMute(true);
            setElementInnerHtml("artist",tunerTitle);
            setElementInnerHtml("title"," -- Muted --");
            setElementInnerHtml("next","");
            swapClass("mute", "unmute", "mute");
        } else {
            if (!inAd) {
                XPlayerMute(false);
                refreshMetaInfo();
            }
            swapClass("mute", "mute", "unmute");
        }
    } else if (w == "skip") {
        if (!XPlayerIsLiveStream()) {
            if (!SNX.NowPlaying.isAd) {
                if (XPlayerCanSkip()) {
                    saveBookmark();
                    setElementInnerHtml("artist",tunerTitle);
                    setElementInnerHtml("title","-- Getting next selection --");
                    setElementInnerHtml("next","");
                    XPlayerMoveNext();
                }
            }
        }
    } else if (w == "pauseplay") {
        if (!XPlayerIsLiveStream()) {
            if (XPlayerIsPaused()) {
                XPlayerPlay();
                refreshMetaInfo();
            } else {
                XPlayerPause();
                setElementInnerHtml("artist",tunerTitle);
                setElementInnerHtml("title","-- Paused --");
                setElementInnerHtml("next","");
            }
        }
    } else if (!isNaN(w)) {
        moveBars(w);
        XPlayerSetVolume(w);
    }

    updateDocumentTitle();
}

function moveBars(n)
{
    setClass("volumeBar6", "on" , (n == 100));
    setClass("volumeBar5", "on" , (n >= 80));
    setClass("volumeBar4", "on" , (n >= 60));
    setClass("volumeBar3", "on" , (n >= 40));
    setClass("volumeBar2", "on" , (n >= 20));
    setClass("volumeBar1", "on" , (n >= 10));
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

function getCD()
{
    updateDocumentTitle();

    if (SNX.NowPlaying.isAd || SNX.NowPlaying.adURL) {
	adTileClick();
    } else {
	albumTileClick();
    }
}

function adTileClick()
{
    if (!Custom_AdClick()) {
	var site_url = AD_SERVER_HOST + "/onclick.aspx?url=";
	var file_name = XPlayerGetStation();

	index = file_name.lastIndexOf("/");
	start_index = index + 1;
	end_index = start_index + (file_name.length - index - 5);
	new_file_name = file_name.substring(start_index, end_index);
	site_url = site_url + SNX.NowPlaying.ecommerceURL + "," + new_file_name;

	var j = window.open(site_url,"","top=0,left=0,height=10,width=10+,toolbar=0,resizable=0,menubar=0,scrollbars=0,location=1");

	var ad_url = SNX.NowPlaying.adURL;
	if (ad_url != "") {
	    if (ad_url.indexOf("http://") == -1)
	        ad_url = "http://" + ad_url;
	    ad_url = CacheBust(ad_url);

	    var x = window.open(ad_url,"","top=0,left=0,height="+screen.height+",width="+screen.width+',toolbar=1,resizable=1,menubar=1,scrollbars=1,location=1"');
	}
    }
}

function albumTileClick()
{
    var regArtistReplace = /#ev_artist/;
    var strArtistReplace = "#ev_artist";

    if (!Custom_AlbumClick()) {
	var sAuthor = SNX.NowPlaying.Artist;
	if (sAuthor != "") {
	    sAuthor = sAuthor.toUpperCase();
	    if (sAuthor.indexOf(" ") != -1)
		sAuthor = escape(sAuthor);

	    if (sAuthor != "") {
		var fn = strReplace(ECOMMERCE_URL, strArtistReplace, sAuthor);
		var x = window.open(fn,"BUY_THE_CD","top=0,left=0,height="+screen.height+",width="+screen.width+',toolbar=1,resizable=1,menubar=1,scrollbars=1,location=1"');
	    }
	}
    }
}

function setProperty(properties) {
    if (properties["BannerURL"] != null) {
	var newBanner = properties["BannerURL"];
	var win = document.getElementById("banner");
	if (win != null) {
	    if (newBanner == "default")
		newBanner = defaultBanner;

	    if (win.src != newBanner)
		win.src = newBanner;
	}
    }
}
//function handlePrebufferAd(code)
//{
//    if (!DUAL_PLAYER)
//        return;
//    if (inAd) {
//    needAd = code;
//    return;
//    }
//    firstAd=true;
//    needAd="";
//    MPlayer2.volume = MPlayer.volume;
//    MPlayer2.filename = APP_PATH + LIVEADS_URL + "?a=" + aff_alias + "&c=" + code + "&f=" + format_alias;
//}
//
//
//function handlePlayAd(code)
//{
//    if (inAd)
//       return;
//    inAd = true;
//    if (DUAL_PLAYER) {
//        firstAd = false;
//        if (MPlayer.Mute == 1) {
//            MPlayer2.Mute = 1;
//        }
//        
//        if (MPlayer2.PlayState != 1) {
//            MPlayer2.filename = APP_PATH + LIVEADS_URL + "?a=" + aff_alias + "&c=" + code + "&f=" + format_alias;
//        }
//        
//    needAd="";
//        MPlayer2.Play();
//        MPlayer.Mute = 1;
//    } else {
//        currentStation = MPlayer.filename;
//        MPlayer.filename = APP_PATH + LIVEADS_URL + "?a=" + aff_alias + "&c=" + code + "&f=" + format_alias;
//    }
//    drawMetaInfo();
//}
//

function TunerEvent(snx, evType, properties)
{
    if (!Custom_TunerEvent(snx, evType, properties)) {
	if (evType == "alert") {
	    alert(properties.Title);
	} else if (evType == "reload") {
	    initialized = false;
	    window.location.reload();
	} else if (evType == "preBufferadBreak") {
	    //handlePrebufferAd(evData);
	} else if (evType == "playAdBreak") {
	    //handlePlayAdBreak(evData);
	} else if (evType == "preBufferad") {
	    //handlePrebufferAd(evData);
	} else if (evType == "playAd") {
	    //handlePlayAd(evData);
	} else if (evType == "nowPlaying") {
	    drawNowPlaying();
	} else if (evType == "nextSong") {
	    drawNextSong();
	} else if (evType == "commercial") {
	    drawCommercial();
	} else if (evType == "setProperty") {
	    setProperty(properties);
	} else {
	}
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
// Live Stream Ad Insertion Code

function handlePlayAdBreak(adProps)
{
    if (inAd) return;

    if (!Custom_PlayAd(adProps)) {
	inAd = true;
	currentStation = XPlayerGetStation();
	XPlayerSetURL(APP_PATH + LIVEADS_URL + "?a=" + SNX.StationName + "&c=" + adProps.Duration + "&f=" + SNX.Channel.Name);
	drawAd();
    }
}

function playStateChanged(v)
{
    if (!Custom_PlayStateChanged(v)) {
	if (v) {
	    swapClass("PlayPause", "play" , "pause");
	} else {
	    swapClass("PlayPause", "pause" , "play");
	}
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
// Cookie functions

function setCookie(name, value, expires, path, domain, secure)
{
    var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
    document.cookie = curCookie;

}

function getCookie(name)
{
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) {
            return null;
        }
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }

    var ret = unescape(dc.substring(begin + prefix.length, end));
    return ret;
}

function fixDate(date)
{
    var base = new Date(0);
    var skew = base.getTime();
    if (skew > 0){
        date.setTime(date.getTime() - skew);
    }
}

function DeleteCookie (name,path,domain)
{
    if (getCookie(name)){
        document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
// Utility Methods

function strReplace(srcStr, fndStr, replStr)
{
    var tmp = srcStr;
    replStr = unescape(replStr);
    if (tmp.indexOf(fndStr) != -1) {
        var a = tmp.substring(0, tmp.indexOf(fndStr) );
        var b = tmp.substring(tmp.indexOf(fndStr) + fndStr.length);
        tmp = a + escape(replStr);
        tmp += b;
    }
    return tmp;
}

function listAttributes(cm) {
    for (var i = 0; i < cm.attributeCount; i++ ) {
        var s = cm.getAttributeName(i);
        debugOutput(0, s + " == " + cm.getItemInfo(s));
    }
}

function isBrowserName(name)
{
    var nAgt = navigator.userAgent.toLowerCase();
    var verOffset = nAgt.indexOf(name.toLowerCase());
    return (verOffset != -1);
}

function preloadCSSImages()
{
    var ss;
    var imageTmp;

    for ( i = 0; i < document.styleSheets.length; i++ ) {
        ss = document.styleSheets[i];
        var allRules;
        var thisRule;

        /* Internet Explorer browsers use the .rules object
        to iterate over the rules in a styleSheet */
        allRules = ss.rules;
        if (!allRules)
            allRules = ss.cssRules; // Mozilla uses .cssRules

        var c = 0;
        // Otherwise, rules / cssRules behave the same...
        for ( j = 0 ; j < allRules.length; j++ ) {
            thisRule = allRules[j];
            if (thisRule.style.backgroundImage) {
                var sSrc = thisRule.style.backgroundImage.toString(); 
                if (sSrc == "none") continue;
                // Determine if 'url(' is in the string.
                if (sSrc.indexOf("url(") >= 0 ) {
                    // Cut out the offensive part.
                    sSrc = sSrc.substring(4,sSrc.length-1);
                }
                imageTemp = new Image();
                imageTemp.src = sSrc;
                imageCache[c] = imageTemp;
                c++;
            }
        }
    }
}

function setElementInnerHtml(name,inner)
{
    var elem = document.getElementById(name)
    if (elem) elem.innerHTML = inner;
}

function swapClass(id, style1, style2)
{
    var element = document.getElementById(id);
    if (element) {
        var className = element.className;
        var result = replaceClass(className, style1 , style2 );
        element.className = result;
    }
}

function replaceClass(classList, o, n)
{
    var classes = classList.split("_");
    var retClasses = new Array();

    for (i = 0; i < classes.length; i++) {
	if ((classes[i] != o) && (classes[i] != n) && (classes[i] != ""))
            retClasses[retClasses.length] = classes[i];
    }

    if (n != "")
        retClasses[retClasses.length] = n;

    retClasses.sort();
    return retClasses.join("_");
}

function setClass(id, newClass, over)
{
    var element = document.getElementById(id);
    var result;
    if (element) {
        if (over)
            result = replaceClass(element.className, "", newClass);
        else
            result = replaceClass(element.className, newClass, "");

        element.className = result;
    }
}

function CacheBust(str)
{
    var regTimeReplace = /#ev_time/;
    var strTimeReplace = "#ev_time";

    // Cache busting code
    if (str != null) {
	var t = new Date();
	var cbt = t.getTimezoneOffset() + t.getTime();
        if (str.indexOf(strTimeReplace) != -1) {
            str = str.replace(regTimeReplace, String(cbt));
        } else if (str.indexOf("?") == -1) {
	    str = str + "?cachebust=" + String(cbt);
	} else {
	    str = str + "&cachebust=" + String(cbt);
	}
    }

    return str;
}

function CacheBustCompare(str1, str2)
{
    var m = str1.indexOf("?cachebust");
    if (m == -1)
	m = str1.indexOf("&cachebust");
    if (m == -1)
	return str1 == str2;
    return str1.substring(0, m-1) == str2;
}

function GetChannelCombo()
{
    if (SNX.Channels.length <= 1) return "";

    var lastGenre = "";
    var html = new Array();
    for (i = 0; i < SNX.Channels.length; i++) {
        if (SNX.Channels[i].Genre != lastGenre) {
            lastGenre = SNX.Channels[i].Genre;
            html[html.length] = "<option value=\"\">[ " + lastGenre + " ]</option>";
        }
        var s = SNX.Channels[i].Name == SNX.Channel.Name ? " selected " : "";
        html[html.length] = "<option value=\"" + SNX.Channels[i].Name + "\" " + s + ">  " + SNX.Channels[i].Description + "</option>";
    }
    return "<select name=\"channels\" id=\"channels\" onchange=\"stationChange(this.options[this.selectedIndex].value);\">" +
            html.join("") + "</select>";
}

function addWindow(s,n) {
 if (s.length > 0) {
  var p = document.createElement("div");
  p.name = n;
  p.id = n;
  p.innerHTML = s;
  var body = document.getElementById("body");
  return body.appendChild(p);
 }
}

function addIFRAME(url, name, width, height) {
 var p = document.createElement("iframe");
 p.src = url;
 p.scrolling = "no";
 p.frameBorder = 0;
 p.marginHeight = 0;
 p.marginWidth = 0;
 p.name = name;
 p.id = name;
 p.vspace = 0;
 p.hspace = 0;
 if (width > 0) p.width = width;
 if (height > 0) p.height = height;
 var body = document.getElementById("body");
 body.appendChild(p);
 if (width > 0) p.width = width;
 if (height > 0) p.height = height;
 return p;
}

function addEvent(obj,evType,fn,useCapture,addOn){
 var ret=false;
 if(obj!=null){
  if(obj.addEventListener){
   obj.addEventListener(evType,fn,useCapture);
   ret=true;
  } else if(obj.attachEvent){
   if(addOn){
    obj.attachEvent('on'+evType,fn);
   }else{
    obj.attachEvent(evType,fn);
   }
   ret=true;
  }
 }
 return ret;
}

function removeEvent(obj,evType,fn,useCapture,addOn){
 var ret=false;
 if(obj!=null){
  if(obj.removeEventListener){
   obj.removeEventListener(evType,fn,useCapture);
   ret=true;
  } else if(obj.detachEvent){
   if(addOn){
    obj.detachEvent('on'+evType,fn);
   }else{
    obj.detachEvent(evType,fn);
   }
   ret=true;
  }
 }
 return ret;
}

function buildFlashRequest(movie,id,width,height)
{
 var flash = new SWFObject(movie, id, width, height, "6");
 flash.addParam("wmode", "transparent");
 flash.addParam("allowScriptAccess", "always");
 var req = flash.getSWFHTML();
 req += "<SCRIPT event=FSCommand(cmd,args) for=" + id + ">" + id + "_DoFSCommand(cmd, args);</SCRIPT>";
 return req;
}

function getExtension(str) {
    var i = str.lastIndexOf(".");
    if (i < 0) return "";
    i++;
    if ((i + 1) >= str.length) return "";

    var s = str.substr(i);
    i = s.indexOf("&");
    var j = s.indexOf("?");
    var k = s.indexOf("/");
    if (i == -1) i = j;
    if (i == -1) i = k;

    if (j < i) i = j;
    if (k < i) i = k;

    if (i <= 0) return s;
    return s.substr(0, i);
}
