var RhapsodyDom = {
  bodyLoaded: false,
  init: function(){
    RhapsodyUtility.addLoadEvent(
      function(){ RhapsodyDom.bodyLoaded = true; }
    );
  }
};
RhapsodyDom.init();

var RhapsodyDynamicNav = {
  _menuPrefix: "",
  ddDialogBoxInstance: null,
  _ddCounter: 0,
  TOP_NAV_HOLDER_ELEMENT_ID: 'topNavMenuHolder',
  _srcVersion: 0,
  TOP_NAV_MENU_ITEM_CLASS_NAME: 'topNavMenuItem',
  TOP_NAV_SUB_MENU_ITEM_CLASS_NAME: 'topNavSubMenuItem',
  evaluateAndToggleElements: [],
  
  init: function( rdnArgObj){
    this._menuPrefix = rdnArgObj.prefix;
    this._srcVersion = rdnArgObj.version;
    this._buildDynamicMenu();
    this._handleClientLogic( this.evaluateAndToggleElements );
    this.colorActiveMenu();
  },
  buildDropDown: function( ddArgObj ){
    var dropDownParentElement = ddArgObj.menuParent;
    var dropDownHTML = this._getDropdownMenuHTML( dropDownParentElement );
    var dropDownElementId = 'topNavDropDownMenu' + this._ddCounter++;

    if( this.ddDialogBoxInstance ){ this.destroyDialogBox(); }
    this.ddDialogBoxInstance = new DialogBox(
      {
        elementId: dropDownElementId,
        elementClassName: 'topNavDropDownMenu',
        elementType: "UL",
        spawnFrom: dropDownParentElement,
        spawnFromOffset: [ 0, 31 ],
        height: 'auto',
        width: '15em',
        htmlContent: dropDownHTML
      }
    );
    try{
      if( this.ddDialogBoxInstance ){
        var theSlideshow = document.getElementById( 'slideshow' );
        var hasSlideshow = ( theSlideshow && ( typeof theSlideshow != 'undefined' ) )? true: false;
        var isFF =  navigator.userAgent.toLowerCase().indexOf('firefox') != -1;
        var isFFMac = ( RhapsodyUtility.getBrowserOs() == 'Macintosh' ) && isFF;
        if( !( isFFMac && hasSlideshow ) ){
          RhapsodyUtility.doFadein( this.ddDialogBoxInstance.getHoldingElement().id, 95, 3, 60 );
        } else { document.getElementById( dropDownElementId ).style.opacity = '1'; }
        this.ddDialogBoxInstance.registerOuterClickListener( this.destroyDialogBox );
        // registerOuterLoiteringListener( this.destroyDialogBox );
        this.ddDialogBoxInstance.show();
        Event.observe( window, 'resize', RhapsodyDynamicNav.destroyDialogBox );
      }     
    } catch( e ){}
  },
  colorActiveMenu: function(){
    var topLevelMenusItems = Element.getElementsByClassName( this._getTopNavHolderElement(), this.TOP_NAV_MENU_ITEM_CLASS_NAME );
    for( var i=0; i < topLevelMenusItems.length; i++ ){
      var tlMenuItem = topLevelMenusItems[ i ];
      var tlMenuItemAnchor = tlMenuItem.getElementsByTagName( 'A' )[ 0 ];
      var theNextElementSibling = RhapsodyUtility.Node.getNextSiblingByType( tlMenuItem, 1 );
      var hasChildren = theNextElementSibling && ( theNextElementSibling.tagName == "UL" );
      if( hasChildren ){
        var tlMenuItemChildren = Element.getElementsByClassName( theNextElementSibling, this.TOP_NAV_SUB_MENU_ITEM_CLASS_NAME );
        for( var j=0; j < tlMenuItemChildren.length; j++ ){
          var tlSubMenuItem = tlMenuItemChildren[ j ];
          var tlSubMenuItemAnchor = tlSubMenuItem.getElementsByTagName( 'A' )[ 0 ];
          this._doCheckAndMakeActiveItem( tlMenuItem, tlSubMenuItemAnchor );
        }
      } else { this._doCheckAndMakeActiveItem( tlMenuItem, tlMenuItemAnchor ); }
    }
  },
  _doCheckAndMakeActiveItem: function( elementToChange, elementToCompare ){
    var currentAddress = window.location.pathname;
    var currentQS = window.location.search;
    var currentAddressWithQS = currentQS !== ''? currentAddress + '?' + currentQS: currentAddress;
    var classNameTextOn = 'navBarMenuLinkon';
    var isHome = ( elementToCompare.href == rhapsodyURL + "/" ) && currentAddress == "/home.html";
    var elementToCompareHref = elementToCompare.href;
    elementToCompareHref = elementToCompareHref.replace( /[^\/]*:\/\/[^\/]*(\/.*)/, "$1" );
    if( ( ( elementToCompareHref == currentAddressWithQS ) || elementToCompareHref == currentAddress ) || isHome ){
      Element.addClassName( elementToChange, classNameTextOn );
    }
  },
  _buildDynamicMenu: function(){
    var menuMgr = new AjaxManager();
    menuMgr.getMenu( this._menuPrefix, this._renderDynamicMenu );
  },
  _shouldRenderDynamicMenu: function( menuData ){
  	return ( menuData && ( typeof menuData != 'undefined' && ( menuData.version != RhapsodyDynamicNav._srcVersion ) ) );
  },
  _renderDynamicMenu: function( menuData ){
    var dynamicMenuHTML = '';
    if( RhapsodyDynamicNav._shouldRenderDynamicMenu( menuData ) ){
      for( var i=0; i < menuData.children.length; i++ ){
        var aMenuItem = menuData.children[ i ];
        var listParentId = 'topNav' + aMenuItem.id;
        var userAgentPattern = aMenuItem.useragentpattern;
        var rhapsodyMemberPropertyName = aMenuItem.rhapsodymemberpropertyname;
		var rhapsodyMemberPropertyValue = aMenuItem.rhapsodymemberpropertyvalue;

        var defaultDisplayNone = userAgentPattern || rhapsodyMemberPropertyName;
		if( defaultDisplayNone ){
			var evalType = rhapsodyMemberPropertyName? "rhapsodyMember": "userAgent";
			var evalName = rhapsodyMemberPropertyName? rhapsodyMemberPropertyName: "userAgent";
			var evalValue = rhapsodyMemberPropertyValue? rhapsodyMemberPropertyValue: userAgentPattern;
			RhapsodyDynamicNav.evaluateAndToggleElements.push( {
				elemId: listParentId,
				evalType: evalType,
				evalName: evalName,
				evalValue: evalValue
			} );
		}
        var menuChildren = aMenuItem.children;
        var hasChildren = menuChildren.length > 0;
        dynamicMenuHTML += '<li'; 
        if( hasChildren || defaultDisplayNone ){
          dynamicMenuHTML += ' id="' + listParentId + '"';
          if( defaultDisplayNone ){
          	dynamicMenuHTML += ' style="display: none;"';
          }
        }
        dynamicMenuHTML += '>' +
          '<div class="navBarMenuLinkoff ' + RhapsodyDynamicNav.TOP_NAV_MENU_ITEM_CLASS_NAME + '">';
        if( hasChildren ){
          dynamicMenuHTML +=
            '<a href="#" title="' + aMenuItem.title + '" onClick="RhapsodyDynamicNav.buildDropDown( { menuParent: \'' + listParentId + '\' } ); return false;">' +
              aMenuItem.title +
            '<\/a> ' +
            '<a href="#" onClick="RhapsodyDynamicNav.buildDropDown( { menuParent: \'' + listParentId + '\' } ); return false;" class="topNavLinksArrow" style="text-decoration: none;" title="' + aMenuItem.title + '">' +
              '&nbsp;&nbsp;&nbsp;' +
            '<\/a>';
        } else {
          dynamicMenuHTML +=
            '<a href="' + aMenuItem.url + '" title="' + aMenuItem.title + '"';
            if( aMenuItem.imageurl && ( typeof aMenuItem.imageurl != 'undefined' ) ){
              dynamicMenuHTML += ' class="topNavMenuHasImage' + aMenuItem.id + '"' +
                ' style="background-image: url(' + aMenuItem.imageurl + ');"';
            }           
          dynamicMenuHTML += '>' +
              aMenuItem.title +
            '<\/a>';
        }
        dynamicMenuHTML +=
          '<\/div>';
        if( hasChildren ){
          dynamicMenuHTML +=
            '<ul class="totallyHidden displayNone topNavDropDown">';
          for( var j=0; j < menuChildren.length; j++ ){ 
            var aSubmenuItem = menuChildren[ j ];
            dynamicMenuHTML +=
              '<li>' +
                '<div class="' + RhapsodyDynamicNav.TOP_NAV_SUB_MENU_ITEM_CLASS_NAME + '">' +
                  '<a href="' + aSubmenuItem.url + '">' +
                    aSubmenuItem.title +
                  '<\/a>' +
                '<\/div>' +
              '<\/li>';
          }
          dynamicMenuHTML += '<\/ul>';
        }
        dynamicMenuHTML +=
        '<\/li>';
        
      }
		RhapsodyDynamicNav._getTopNavHolderElement().innerHTML = dynamicMenuHTML;
		RhapsodyDynamicNav._handleClientLogic( RhapsodyDynamicNav.evaluateAndToggleElements );
		RhapsodyDynamicNav.colorActiveMenu();
    }
  },
  _handleClientLogic: function( ete ){
	if( ete.length > 0 ){
		var i=0;
		while( i < ete.length ){
			if( this._shouldToggleElement( ete[ i ] ) ){
				document.getElementById( ete[ i ].elemId ).style.display = 'block';
			}
			i++;
		}
	} else { return false; }
  },
  _shouldToggleElement: function( eteObj ){
  	if( eteObj.evalType == "userAgent" ){
  		return this._evalUserAgent( eteObj.evalValue );
  	} else if( eteObj.evalType == "rhapsodyMember" ){
  		return this._evalRhapsodyMember( rhapsodyMember, eteObj );
  	}
  },
  _getUserAgent: function(){
  	return "" + navigator.userAgent;
  },
  _evalUserAgent: function( uaToMatch ){
	  var ua = this._getUserAgent();
	  var regex = new RegExp( uaToMatch );
	  return regex.test( ua );
  },
  _evalRhapsodyMember: function( rm, eteObj ){
  	return rm.getMemberAttribute( eteObj.evalName ).toString() === eteObj.evalValue + "";
  },
  _getDropdownMenuHTML: function( menuParent ){
    var defaultMenuParent = document.getElementById( menuParent );
    var defaultMenuParentChildren = defaultMenuParent.getElementsByTagName( 'UL' );
    for( var i=0; i < defaultMenuParentChildren.length; i++ ){
      var menuChild = defaultMenuParentChildren[ i ];
      if( Element.hasClassName( menuChild, 'topNavDropDown' ) ){ return menuChild.innerHTML; }
    } return null;
  },
  _getTopNavHolderElement: function(){
    return document.getElementById( this.TOP_NAV_HOLDER_ELEMENT_ID );
  },
  destroyDialogBox: function(){
    RhapsodyDynamicNav.ddDialogBoxInstance.destroy();
    RhapsodyDynamicNav.ddDialogBoxInstance = null;
    Event.unloadCache();
  }
};

document.write('<div id="signinoutpreload" style="visibility:hidden; position:absolute;"><\/div>');
function signinoutswfpreload() {
  var thediv = document.getElementById("signinoutpreload");
  if( thediv ) {
    try {
      var flashVars = { "state":"signin", "pcode":"rn" };
      var rhapSwfObject = RhapsodyPlayer.getRhapsodySwfObject( "signin", "signinoutpreload", "window", flashVars );
      var theerror = rhapSwfObject.getEmbedStatus();
      if( theerror ) { setTimeout("signinoutswfpreload()",100); }
      else { setTimeout( function(){ document.getElementById('signinoutpreload').innerHTML = '&nbsp;'; }, 500 ); }
    }
    catch( e ) { }
  }
  else { setTimeout( function(){ signinoutswfpreload(); }, 100); }
}
signinoutswfpreload();


document.write('<div id="signinoutdebug" style="position:absolute;"><\/div>');
var inoutstart = (new Date()).valueOf();
function inoutdebugreset() { inoutstart = (new Date()).valueOf(); }
function inoutdebug(s) {
  var timedelta = (new Date()).valueOf() - inoutstart;
//  document.getElementById("signinoutdebug").innerHTML += timedelta + " -- " + s + "<br />";
}

var SignInOutDialogBox = {
  signInOutDialog : null,
  getMovie: function(){
    return document.getElementById("popoutPlayer_signin");
  },
  
  showDialog: function( state ) {
    if( SignInOutDialogBox.signInOutDialog ){ SignInOutDialogBox.hideDialog(); }
    inoutdebug("showDialog");
    var innerHTML = '&nbsp';
  
    if( SignInOutDialogBox.signInOutDialog ) {
      SignInOutDialogBox.signInOutDialog.loadContent( { htmlContent:innerHTML } );
    }
    else {
      SignInOutDialogBox.signInOutDialog = null;
      SignInOutDialogBox.signInOutDialog = new DialogBox(
        {
          spawnFrom: document.getElementById("topNavSignInOut"),
          spawnFromOffset: [ -180, 0 ],
          elementId: "signInOutDialogDiv",
          elementClassName: "signInOutDialogClass",
          width: '302px',
          height: '385px',
          htmlContent: innerHTML
        }
      );
      SignInOutDialogBox.signInOutDialog.registerOuterClickListener( SignInOutDialogBox.outerClickHandler );
      SignInOutDialogBox.signInOutDialog.show();
      SignInOutDialogBox.signInOutDialog.toggleMeddlesomeElements();
    }
    
    SignInOutDialogBox.tryFlashEmbed(state);
  },
  
  updateHeight: function( h ){
    if(document.getElementById('signInOutDialogDiv') !== null && document.getElementById('signInOutDialogDiv') != 'undefined'){
      document.getElementById('signInOutDialogDiv').style.height = h + 'px';
    }
  },
  
  slideUp: function(){
    if(document.getElementById('signInOutDialogDiv') !== null && document.getElementById('signInOutDialogDiv') != 'undefined'){
      document.getElementById('signInOutDialogDiv').style.height='0px';
      document.getElementById('signInOutDialogDiv').style.visibility='hidden';
    }
  },  

  tryFlashEmbed: function( state ) {
    inoutdebug("tryFlashEmbed...");
    var theDiv = document.getElementById("signInOutDialogDiv");
    
    if( theDiv ) {
      var flashVars = { "state":state, "pcode":RhapsodyPlayer.getPcode() };
      inoutdebug("embedding swf...");
      var isFF = navigator.userAgent.indexOf("Firefox")>=0;
      var rhapSwfObject = RhapsodyPlayer.getRhapsodySwfObject( "signin", "signInOutDialogDiv", (isFF?"window":"transparent"), flashVars );
      var embedResult = rhapSwfObject.getEmbedStatus();
      inoutdebug("...done embedding swf.");
      if( embedResult > 0 ) {
        this.signInOutDialog.setMask( true );
        this.signInOutDialog.setWidth( 350 );
        this.signInOutDialog.setHeight( 'auto' );
        this.signInOutDialog.loadContent(
          {
            htmlContent:
              '<div class="signInOutDialogDivNoFlash">' +
                'A new version of Flash is required to use this feature.<br \/>' +
                '<a href="http://www.adobe.com/support/flashplayer/downloads.html" target="_blank" onclick="SignInOutDialogBox.hideDialog();">Download Flash from Macromedia<\/a>.' +
              '<\/div>'
          }
        );
        this.signInOutDialog.centerInPage();
        RhapsodyUtility.addEvent( window, 'scroll', function(e){ this.signInOutDialog.centerInPage(); } );
        RhapsodyUtility.addEvent( window, 'resize', function(e){ this.signInOutDialog.centerInPage(); } );
        return;
      }
    }
    else {
      setTimeout( function(){ SignInOutDialogBox.tryFlashEmbed('"+state+"'); }, 50);
    }
  },
  
  onLoginSWFReady: function(){
    if( RhapsodyUtility.Client.isIE6() ){ SignInOutDialogBox.getMovie().unfocusAll(); }
    else { SignInOutDialogBox.getMovie().focus(); }
  },
  
  outerClickHandler: function(){
    SignInOutDialogBox.hideDialog();
  },
  
  hideDialog: function(){
    if( SignInOutDialogBox.signInOutDialog ){
      SignInOutDialogBox.signInOutDialog.setMask();
      SignInOutDialogBox.signInOutDialog.toggleMeddlesomeElements( true );
      SignInOutDialogBox.signInOutDialog.hide();
      SignInOutDialogBox.signInOutDialog.destroy();
      SignInOutDialogBox.signInOutDialog = null;
      Event.unloadCache();
    }
  }
};


var SampleModeUpsell = {
	overlayWidth: 375,
	overlayHeight: 340,
	modalDialogBoxInstance: null,
	_dialogBoxOverrides: null,
	setDialogBoxOverrides: function( dbOverrideObj ){
		this._dialogBoxOverrides = dbOverrideObj;	
	},
	init: function(overlayHtmlContent){
		if( overlayHtmlContent != null && overlayHtmlContent != 'undefined' && overlayHtmlContent != '' ){
			var dbWidth = ( this._dialogBoxOverrides && this._dialogBoxOverrides.dbWidth )? this._dialogBoxOverrides.dbWidth: this.overlayWidth;
			var dbClassName = ( this._dialogBoxOverrides && this._dialogBoxOverrides.dbClassName )? this._dialogBoxOverrides.dbClassName: null;
			SampleModeUpsell.modalDialogBoxInstance = new DialogBox(
				{
				width: this.overlayWidth + 'px',
				height: this.overlayHeight + 'px',
				maskOpacityPercent: 60,
				holdingElementBgColor: '#363636',
				zIndex: '999999999',
				maskBgColor: '#000',
				maskZIndex: '10000',
				htmlContent: overlayHtmlContent,
				elementClassName: dbClassName
				}
			);
				SampleModeUpsell.modalDialogBoxInstance.centerInPage( .90 );
				SampleModeUpsell.modalDialogBoxInstance.toggleMeddlesomeElements();
				SampleModeUpsell.modalDialogBoxInstance.setMask( true );
				SampleModeUpsell.modalDialogBoxInstance.setShadow( true );

				Event.observe( window, 'scroll', function(e){
				SampleModeUpsell.modalDialogBoxInstance.centerInPage( .90 );
				SampleModeUpsell.modalDialogBoxInstance.setMask( true );
			} );
				Event.observe( window, 'resize', function(e){
				SampleModeUpsell.modalDialogBoxInstance.centerInPage( .90 );
				SampleModeUpsell.modalDialogBoxInstance.setMask( true );
			} );
		}
	},
	destroy: function(){
		Event.unloadCache();
		SampleModeUpsell.modalDialogBoxInstance.toggleMeddlesomeElements();
		SampleModeUpsell.modalDialogBoxInstance.destroy();
		SampleModeUpsell.modalDialogBoxInstance = null;
	},
	resumePlayback: function(answer){
		var app = RhapsodyPlayer.getFlashApp("embedded");
		if(app != null && app != 'undefined'){
			if(answer)
				app.doPlay();
			else
				app.doStop();
		}
	},
	closeAndResume: function(){
		SampleModeUpsell.destroy();
		SampleModeUpsell.resumePlayback(true);
	},
	closeAndStop: function(){
		SampleModeUpsell.destroy();
		SampleModeUpsell.resumePlayback(false);
	}
}
function onSampleModeUpsell(){
	var closeXSpan = '<div class="shareOverlayClose"><a href="#" onclick="SampleModeUpsell.closeAndStop(); return false;">Close <span>X</span></a></div>';
	var overlayContent = closeXSpan;
	overlayContent += '<div class="sampleModeInnards"><p class="sampleModeInnardsTitle">Join Now</p><p class="sampleModeInnardsHeading">You&#39;re hearing <span style="color:#ffcc33;">30-second samples</span>.</p><p class="sampleModeInnardsBodyText">To get unlimited access to full-length tracks, join Rhapsody now.</p><p class="sampleModeInnardsOfferText">Listen all you want for $12.99&#47;month</p><div class="sampleModeInnardsButtons"><a href="#" onclick="SampleModeUpsell.closeAndResume(); return false;"><img src="' + staticPath + '/images/buttons/btn_keep_playing_samples.gif"/></a><a onclick="SampleModeUpsell.closeAndStop(); return false;" href="http://learn.rhapsody.com/plans/unlimited?src=rcom_efp&pcode=rn&cpath=rcom_efp&ocode=rn"><img src="' + staticPath + '/images/buttons/btn_sub_now.gif"/></a></div><p><a href="http://learn.rhapsody.com/?src=rcom_efp_lm&pcode=rn&cpath=rcom_efp">Learn more</a></p><div align="center"><a href="http://www.rhapsody.com/-privacy_policy">Privacy Policy</a> | <a href="http://www.rhapsody.com/-terms_of_use">Terms and Conditions</a></div></div>';
	SampleModeUpsell.init(overlayContent);
}
//setTimeout("onSampleModeUpsell();",5000);




