var stopplayer = false;
var current_page = window.location.href;

try {
  document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}

soundManager.url = '/swf/';
soundManager.debugMode = false;

var Pages = Class.create( {
  _pages: null,
  _count: 0,
  
  initialize: function( container ) {
    this._pages = container.childElements();
    i = 0;
    this._pages.each( function( p ) {
      if( !i++ ) {
        this._active = p;
      } else {
        p.hide();
      }
    }.bind( this ) );

    this._count = i;
  },
  
  getCount: function() {
    return this._count;
  },
  
  show: function( page_nr ) {
    page = this._pages[page_nr - 1];
    if( page && this._active != page ) {
			page.setStyle( 'z-index', 98 );
			this._active.setStyle( 'z-index', 99 );
      new Effect.Fade( this._active, { duration: 0.2, queue: 'end' } );
      new Effect.Appear( page, { duration: 0.3 } );
      this._active = page;
    }
  }
});



var PagerWidget = Class.create( {
  _button_class: 'pager_button',
  _li_class: '',
  initialize: function( id, nr_buttons, options ) {

    this._id = id;
    this._active = null;
    this._nr_buttons = nr_buttons;
    this._buttons = [];
    

    // proccess options to override defaults
    for( option in options ) {
      this['_' + option] = options[option];
    }
    

    for( i=0; i <  nr_buttons; i++ ) {
      a = new Element( 'a', { id: 'b' + i, 'class': this._button_class, href: '#mood' + ( i + 1 ) } ).update( i + 1 );

      a._page = i;
      Event.observe( a, 'click', this.onclick.bindAsEventListener(this) );
      Event.observe( a, 'focus', function() { this.blur(); } );
      if( !i ) {
        a.addClassName( 'active' );
        this._active = a;
      }

      this._buttons[this._buttons.length] = a;
    }

  },
  onclick: function( e )
  {
		Event.stop( e );
    a = Event.element(e);
		this.setActive( a, 'onclick' );
  },

	next: function() {
		for( i=0; i< this._nr_buttons; i++ ) {
				if( this._active == this._buttons[i] ) {
					break;
				}
		}
		this.setActive( this._buttons[( i + 1 ) % this._nr_buttons ], 'next' );
	},
	setActive: function( a, origin ) {
    if( a != this._active ) {
      this._active.removeClassName( 'active' );
      a.addClassName( 'active' );
			pageTracker._trackPageview( current_page + '/' + ( a ._page + 1 ) );
      this._active = a;
      a.fire( "pager:changed", { active: a._page, origin: origin } );
    }
	},
  getPresentation: function() {
    ul = new Element( 'ul', { id: this._id } );
    for( i=0; i< this._nr_buttons; i++ ) {
      li = new Element( 'li', { 'class': this._li_class } ).update( this._buttons[i] );
      ul.appendChild( li );
    }
    return ul;
  }
});



var PlaylistWidget = Class.create( {
	
	initialize: function( btn_list ) {
		this._active = null;
		this._buttons = btn_list;
		for( i=0;i<this._buttons.length;i++ ) {
			a = this._buttons[i];
			a.widget = this;
			Event.observe( a, 'click', function() { ;this.widget.onclick( this.rel ); } );
		}
	},
	setActive: function( track_nr ) {
		if( this._active ) {
			this._active.removeClassName( 'active' );
		}
		this._active = this._buttons[ track_nr - 1 ];
		this._active.addClassName( 'active' );	 
	},
	onclick: function( track_nr ) {
		this.setActive( track_nr );
		document.fire( "playlist:play", { track_nr: track_nr } );
	}
	
} );


var ECMPlayer = Class.create( {
	initialize: function( sm2 ) {
		this._sm = sm2;
		this._tracks = [];
		this._active = null;
		
	},
	
	addTrack: function( path ) {
		track_id = 'track' + ( this._tracks.length + 1 );
		this._sm.createSound( {
			id:  track_id,
			url: path,
			multiShot: false,
			onfinish: function() { this.play_next(); }.bind( this )
		} );
		
		this._tracks[this._tracks.length] = track_id;

	},
	stopAll: function()
	{
		if( this._active )
		{
			this._sm.StopAll();			
			console.log( 'stop all');
		}

	},

	play: function( track_nr ) {
		idx = track_nr - 1;
		track = this._tracks[idx];

		if( track ) {
			this._sm.stopAll();
			this._sm.play( track );
			this._active = idx;
			document.fire( "ecmplayer:play", { track_nr: track_nr } );
		}
	},
	
	play_next: function() {
		trackcount = this._tracks.length;
		if( !trackcount ) {
			return false;
		}
		
		if( this._active == null ) {
			this._active =  0;
		}
		
		this.play( ( this._active + 1) % trackcount + 1 );
	}
});



var PlayerPanel = Class.create( {
	
	initialize: function() {
		this._open = false;
	},
	open: function() {
		if ( !this._open ) { 
			new Effect.SlideDown( 'player', { 
				transition : Effect.Transitions.EaseFromTo, 
				beforeStart: function() {
					$('puller_mode_wrap').removeClassName( 'open' );
				} 
			} );
			this._open = true;
	 	}
	},
	close: function() {
		if ( this._open ) { 
			new Effect.SlideUp( 'player', { 
				transition : Effect.Transitions.EaseFromTo, 
				beforeStart: function() {
					$('puller_mode_wrap').addClassName( 'open' );
				}
			} );
			this._open = false;  
	 }
	},
	toggle: function() {
		if ( !this._open ) {
			this.open();
		} else {
		  this.close();
		}
	}
} );

var player_popup = null;

var page_actions = {
	'main_playerList': function(){
		$$('.player_start').each( function( a ) {
			Event.observe( a, 'click', function( e ) {
				w = window.open( this.href, 'ecmplayer', 'width=820,height=620,scrollbars=no,resizeable=no' );
				w.focus();
				
				Event.stop( e );
			});
		});
	}
};




var modal_tellafriend = null;
var player = null;
var player_panel = null;
var playlist = null;
var active_menu = null;


document.observe( 'dom:loaded', function() {
	// prepare player if applicable
	ecm_player = $('player');
	if( ecm_player ) {
		ecm_player.hide();
		ppanel = $('player_panel');
		ppanel.setStyle( { left: '0px' } );
		ppanel.show();
		
		Event.observe( 'puller', 'click', function( e ) {
			Event.stop( e );
     	document.fire( "player:toggle");
		});

		// initialize soundmanager
		var progress_bar = $('progress_bar');
		var track_time   = $('track_time');
		soundManager.defaultOptions['whileplaying'] = function() {
				re_sec = Math.ceil( ( this.durationEstimate - this.position  ) / 1000 );
				display_minutes = Math.floor(re_sec / 60);
				display_seconds = re_sec % 60;
				if( display_seconds < 10 ) {
					display_seconds = "0" + display_seconds;;
				}

				remaining = "- " + display_minutes + ":" + display_seconds;
				width = this.position / this.durationEstimate * 150 - 2; 
				progress_bar.setStyle( { 'width': width + 'px'  } );
				track_time.update( remaining );
		};

		player_panel = new PlayerPanel();

		soundManager.onload = function(){
			//prepare tracklist
			playlist = new PlaylistWidget( $$('.btn_playlist') );

			player = new ECMPlayer( soundManager );
	  	playlist_tracks.each( function( track ) {
				player.addTrack( track );
			});
			if( !stopplayer ) {
				player.play( 1 );				
			}

		};



	}

	active = $$('a.active');
	if( active.length ) {
		active_menu = active[0];
	}

	$$('.ajax a').each( function( a ) {
			if( a.href != "#" ) {
				Event.observe( a, 'click', function( e ) {
					if( active_menu ) {
						active_menu.removeClassName( 'active' );
					}
					active_menu = this;
					this.addClassName( 'active' );

					new Effect.Fade( 'content', { duration: 0.2, afterFinish: function() {

						new Ajax.Updater( 'content', a.href, {
							evalScripts: true,
							onComplete: function( e ) {
								current_page = e.request.url;
								pageTracker._trackPageview( e.request.url );
								new Effect.Appear('content'); 

							}
						} );


					} } );
					Event.stop( e );
				} );
			}
	});




	// disable blur margins
	$$('a').each( function( a ) {
		a.onfocus = function() { return this.blur(); };
	});

	taf = $('menu_interact_tellafriend');
	if( taf ) {

		modal_tellafriend = new Control.Modal( taf.down(),{  
		    overlayOpacity: 0.75,  
		    className: 'modal',  
		    fade: true,
				afterClose: function() { 
					this.getRemoteContentInsertionTarget().update('');	
					this.remoteContentLoaded = false;
				},
				afterOpen: function() {
 					pageTracker._trackPageview( this.href );
					div = new Element( 'div', { id: 'saf_close'} );
					img = new Element( 'img', { src: '/images/saf_close.gif', title: 'cancel/close' } );
					div.insert( img );
					this.container.insert( div );
					Event.observe( div, 'click', function() { this.close(); }.bind( this ) );
				}
		} );		
	}

	


	
	body_id = document.body.id ? document.body.id : '';
	if( page_actions[body_id] ) {
		page_actions[body_id]();
	}
	

	$$('#menu_interact_buy').each( function( li ) {
		Event.observe( li, 'mouseover', function( e ) {
			this.addClassName( 'sfhover' );

		});
		Event.observe( li, 'mouseout', function( e ) {
			this.removeClassName( 'sfhover' );
		});
		
	});

} );




document.observe( "player:open", function(event) {	
	player_panel.open();
} ); 

document.observe( "player:toggle", function(event) {
	player_panel.toggle(); 
} ); 




document.observe( "playlist:play", function(event) {	
	player.play( event.memo.track_nr );
} ); 

document.observe( "ecmplayer:play", function(event) {
	track_nr = event.memo.track_nr;
	new Effect.Move( 'playhead', { x: 0, y: ( track_nr - 1 ) * 26, mode:'absolute', duration: 0.4 } );
	playlist.setActive( track_nr );
} ); 


Effect.Transitions.EaseFromTo = function(pos) {
   if ((pos/=0.5) < 1) return 0.5*Math.pow(pos,4);
   return -0.5 * ((pos-=2)*Math.pow(pos,3) - 2);   
};


