// ========================================================================================================
// == WOUTER D. SNEL ==
// ========================================================================================================
var paging = new Class({
    Implements: Options,
    options: {

		bplayload		: false,
		fplayload		: false,

       	bplaystate		: false,
       	fplaystate		: false,
		fplayprefstate	: true,
		startnow		: true,

		siteroot		: undefined,
		tplroot			: undefined,

		msg404			: '<h2>Page not Found</h2><p>The page could not be found!</p><p>This is a 404.</p>',
		bplaylist		: "http://www.woutersnel.nl/files/webaudio/wouter.xml",
		div				: 'content'
    },
 
    initialize: function(options){
    	SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleChange);
        this.setOptions(options);
        Cufon.replace('h1,h2,h3');
		this.init_bplayer();
		new Tips('.ttip',{fixed:true,offset: {'x': -100, 'y': 40},windowPadding: {'x': -100, 'y': 40}});
   		},

	// == SET LOADING STATE ==
	loading: function(state) {
		var div = this.options.div;	
		if (state=="0"){
			$('loading').addClass('ready');
			}
		else if (state=="1"){
			$('loading').removeClass('ready');
			}
		else if (state=="-1") {
			$('content').setStyle('display','');
			$('loading').addClass('ready');
			$(div).set('html',this.options.msg404);
			Cufon.refresh();
			}
		else {}
	},

	// == SET PLAYER STATE ==
	playstate: function(obj) {
		if (obj.newstate=="PLAYING"){
			$('playmute').addClass('playing');
			this.loading(0);
			switch (obj.id){
				case "bplayer": this.options.bplaystate = true; break;
				case "fplayer": this.options.fplaystate = true; break;
				}
			}
		else if (obj.newstate=="PAUSED" || obj.newstate=="COMPLETED"){
			this.loading(0);
			$('playmute').removeClass('playing');
			this.options.bplaystate = false;
			switch (obj.id){
				case "bplayer": this.options.bplaystate = false; break;
				case "fplayer": this.options.fplaystate = false; break;
				}
			}
		else if (obj.newstate=="BUFFERING" || obj.newstate=="IDLE"){this.loading(1);}
	},

	// == SEARCH AND REPLACE LINKS ==
	search_links: function() {
		var root = this.options.siteroot;
		$$('a').each(function(element){ // later nog zoeken naar alleen in content anders word menu steeds opnieuw gedaan
			element.addEvent('click', function(e) {
				if (element.getProperty('href') != null){link = element.getProperty('href');} else {link ='';}
				if ((link.test(root)) && !(link.match(/\?/g)=='?') && !(link.match(/\#/g)=='#')) {
					e = new Event(e).stop();
					SWFAddress.setValue(element.getProperty('href').replace(root, ""));
					}
				});
			});
	},

	// == UPDATE CSS CLASS SELECTED LINK ==
	update_selected: function (path) {
		var root = this.options.siteroot;
		$$('a').each(function(element){
			element.removeClass('selected');
			if (element.getProperty('href')==root+path.substr(1)){element.addClass('selected');}
		});
	},

	// == UPDATE CSS CLASS SELECTED TRACK ==
	update_selected_track: function () {
		var id = -1;
		this.options.fplayload == (true) ? player ="fplayer" : player ="bplayer";
		if (this.options.fplayload || this.options.bplayload){
			id = $(player).getConfig().item;
			this.options.trlength = $(player).getPlaylist()[id].duration;
			}
		
		$$('.playlist li').each(function(element){
			element.removeClass('selected');
			if (element.get('id')=="track"+id){element.addClass('selected');}
		});	
	},

	// == INIT BACKGROUND MUSIC PLAYER ==
	init_bplayer: function () {
		var player = this.options.tplroot+'flash/player.swf';
		this.swiffHome = new Element('div', {id: 'swiffHome'}).setStyles({position:'absolute','top':1,'left':1}).inject(document.body);
		this.obj = new Swiff( player, {
				id: 'bplayer',
				width:1,
				height: 1,
				container: this.swiffHome,
				params: {
					name:'bplayer',
					allowfullscreen: 'false'
					},
				vars: {
					file: this.options.bplaylist,
					autostart: this.options.startnow,
					volume:'100',
					repeat:'always',
					playerready:'pager.init_playerjs'
					}
				});
	},

	// == INIT FOREGROUND MUSIC PLAYER ==
	init_fplayer: function () {
		var file = $('frontplayer').get('html');
		var player = pager.options.tplroot+'flash/player.swf';
		var skin = pager.options.tplroot+'flash/skin.zip';
		this.options.startnow = false;
			
		$('frontplayer').hasClass('video') ? size = 301 : size = 20;
		$('frontplayer').hasClass('video') ? pmode = 'list' : pmode = 'always';

		// stop playing music
		if (pager.options.bplaystate == true){
			$('bplayer').sendEvent("PLAY","false");
			pager.options.fplayprefstate = true;		
			}

		// flash video player on the home page
		this.obj = new Swiff(player, {
			id: 'fplayer',
			width:500,
			height: size,
			container: $('frontplayer'),
			params: {
				name:'fplayer',
				allowfullscreen: 'false'
				},
			vars: {
				skin: skin,
				file: file,
				autostart: 'true',
				volume:'100',
				stretching:'fill',
				repeat:pmode,
				//controlbar:'over',
				displayclick:'false',
				wmode : 'transparent',
				playerready:'pager.init_playerjs'
				}
			});
	},

	// == INIT JAVASCRIPT FOR ALL PLAYERS == 
	init_playerjs: function(obj){
		var player = obj.id;
		if(this.options.startnow==false){setTimeout("$('bplayer').sendEvent('PLAY','false')",50);}; // extra stop if linked directly to a frontplayer page
		player == ( "bplayer" ) ? pager.options.bplayload = true : pager.options.fplayload = true;
		$(player).addControllerListener('ITEM','pager.update_selected_track');
		$(player).addModelListener('STATE','pager.playstate');
	},

	// == CONTROLLER KNOBS ON PAGE == 
	play: function (action,option) {
		var player = "bplayer";
		var state = this.options.bplaystate;
		if (this.options.fplayload==true){player="fplayer";state=this.options.fplaystate;}
	
		switch(action) {
			case 'prev'		:$(player).sendEvent("PREV");			break;
			case 'next'		:$(player).sendEvent("NEXT");			break;
			case 'play'		:$(player).sendEvent("PLAY","true");	break;
			case 'pause'	:$(player).sendEvent("PLAY","false");	break;
			case 'track'	:$(player).sendEvent("ITEM",option);	break;
			case 'seek'		:$(player).sendEvent("SEEK",option);	break;
			case 'toggle' 	:state == (false) ? $(player).sendEvent("PLAY","true") : $(player).sendEvent("PLAY","false"); break;
			}
	},

	// == INIT PAGE == 
	init_page: function (path) {
		var page = path.replace(/^\//, "");

		// refresh cufon
		Cufon.refresh();

		// if there is an embedded player, load this and stop global player
		if($chk($('frontplayer'))) {
			this.options.startnow = false; // autostart set to false incase of direct linking to a fronplayer page
			this.init_fplayer();
			}

		// if linked directly to a page with a front player
		else if(this.options.fplayprefstate==true && this.options.bplayload == false){
			this.options.fplayprefstate = false;
			}

		// if no front player but background player was stopped by front player
		else if(this.options.fplayprefstate==true && this.options.bplayload == true){
			this.options.fplayprefstate = false;
			this.options.fplayload = false;
			$('bplayer').sendEvent("PLAY","true");
			}
		
		// if no front player but background player was not stopped by front player
		else{
			if (this.options.fplayload == true){
				$('playmute').removeClass('playing');
				this.options.fplayload = false;
				}
			}

		// update the page title
		if($chk($('jstitle'))) {document.title = $('jstitle').get('html');}

		this.search_links();
		this.update_selected(path);
		this.update_selected_track();

		// show content box (except on main page)
		if  (page != ""){$('content').setStyle('display',''); }

		// update tracker (not yet implemented)
		if (typeof pageTracker != "undefined"){pageTracker._trackPageview(path);}

		// ready loading
		this.loading(0);
	},

	// == LOAD PAGE ==
	load_page: function (event) {
		$('content').setStyle('display','none');
		new Request.HTML({
			evalResponse: true,
			method: 'get', 
			url: (event.path.replace(/^\//, "")+"?view=body"),
			onRequest: function(){pager.loading(1);},
			update: $(this.options.div),
			onSuccess: function(){pager.init_page(event.path);},
			onFailure:function(){pager.loading(-1);}
			}).send();
		}
});

// ========================================================================================================
// == LOAD CONTENT ON EVENT (CLICK OR BROWSER BACK)
// ========================================================================================================
function handleChange(event) {
	pager.load_page(event);
	}