// player.js



/*--------------------------------------------------------------- ADDITIONAL MOOTOOLS STUFF REQUIRED----------------------------------------------------------------------------------------- */

//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

MooTools.More = {
	'version': '1.2.3.1'
};

/*
Script: Assets.js
	Provides methods to dynamically load JavaScript, CSS, and Image files into the document.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Asset = {

	javascript: function(source, properties){
		properties = $extend({
			onload: $empty,
			document: document,
			check: $lambda(true)
		}, properties);

		var script = new Element('script', {src: source, type: 'text/javascript'});

		var load = properties.onload.bind(script), check = properties.check, doc = properties.document;
		delete properties.onload; delete properties.check; delete properties.document;

		script.addEvents({
			load: load,
			readystatechange: function(){
				if (['loaded', 'complete'].contains(this.readyState)) load();
			}
		}).set(properties);

		if (Browser.Engine.webkit419) var checker = (function(){
			if (!$try(check)) return;
			$clear(checker);
			load();
		}).periodical(50);

		return script.inject(doc.head);
	},

	css: function(source, properties){
		return new Element('link', $merge({
			rel: 'stylesheet', media: 'screen', type: 'text/css', href: source
		}, properties)).inject(document.head);
	},

	image: function(source, properties){
		properties = $merge({
			onload: $empty,
			onabort: $empty,
			onerror: $empty
		}, properties);
		var image = new Image();
		var element = new Element('img');
		['load', 'abort', 'error'].each(function(name){
			var type = 'on' + name;
			var event = properties[type];
			delete properties[type];
			image[type] = function(){
				if (!image) return;
				if (!element.parentNode){
					element.width = image.width;
					element.height = image.height;
				}
				image = image.onload = image.onabort = image.onerror = null;
				event.delay(1, element, element);
				element.fireEvent(name, element, 1);
			};
		});
		image.src = element.src = source;
		if (image && image.complete) image.onload.delay(1);
		return element.set(properties);
	},

	images: function(sources, options){
		options = $merge({
			onComplete: $empty,
			onProgress: $empty,
			onError: $empty,
			properties: {}}, options);
		sources = $splat(sources);
		var images = [];
		var counter = 0;
		return new Elements(sources.map(function(source){
			return Asset.image(source, $extend(options.properties, {
				onload: function(){
					options.onProgress.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				},
				onerror: function(){
					options.onError.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				}
			}));
		}));
	}

};



/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */


function stopPlaying(){
	var el= $('flash-container');
	el.set('html','');
	
        var a = p.data[p.current] || false;
        if(a.movie){
	    showmov = true;
	    
	$('flash-container').addEvent('click', function(){
	
	this.removeEvents('click');					 
	p.stopPlaying();											
	new Swiff('http://www.petersommer.com/flash/player.swf', {
    		id: 'flashPlayer',
		container : this,
    		width: 468,
    		height: 351,
    		params: {
        		wmode: 'opaque',
        		bgcolor: '#000000'
    		},
    	vars: {
        	video : a.movie,
	skin : 'flash/SkinOverPlaySeekStop.swf'
	       }
	   });
	});
    }


}


var p = {
	
	xmlPath : 'homepage.xml',
	flashPath : 'flash/flvplayer.swf',
	imgPathPrefix : '',
	videoPathPrefix : '',
	delayTime : 10000,
	currentLink : 0,
	
	container : 'homepage-banner',
	
	
	data : [],
	current : 0,
	periodicalIndex : '',
	
	getText:function(node){
		var c = node.childNodes;
		var r = false;
		for(var i=0; i<c.length; i++){
                     
			if(c[i].nodeType ==4 || c[i].nodeType == 3 ){
				r = c[i].nodeValue;
			}
		}
              
		return r;
	},
	
	getElements:function(node, name){
		var c = node.childNodes;
		var r = [];
		for(var i=0; i<c.length; i++){
			if(c[i].nodeName == name){r.push(c[i]);}
		}
		if( r.length == 0 ){
			return false;
		}else{
			return r;
		}
		
	},
	
	getElement:function(node, name){
		var els =  p.getElements(node, name);
		if(els === false || els.length == 0){
			return false;
		}else{
			return els[0];
		}
	},

	xmlFail: function(){
		alert('failed to load xml');
	},
	
	atBeginning: function(){
		return p.current == 0 ? true : false;
	},
	
	atEnd: function(){
		return p.current == p.data.length ? true : false;
	},
	
	hide: function(){
		var txt = $('slide-info');
		var pic = $('slide-image');
		var mov = $('flash-container');
		txt.set('tween', {transition:'back:in'});
                pic.set('tween', {duration:500, onComplete:p.setData} );
		//txt.tween('left', -400);
		pic.tween('opacity', 0);
		mov.tween('opacity', 0);
	},
	
	show: function(showTxt, showPic, showMov){
		var txt = $('slide-info');
		var pic = $('slide-image');
		var mov = $('flash-container');
		txt.set('tween', {transition:'back:out'});
                 pic.set('tween', {duration:1000, onComplete:$empty} );
		//if(showTxt) txt.tween('left', 20);
		if(showPic) pic.tween('opacity', 1);
		if(showMov) mov.tween('opacity', 1);
	},
	
	play: function(){
		p.periodicalIndex = p.gotoSlide.periodical( p.delayTime, this, 'next' );
	},
	
	stopPlaying: function(){$clear(p.periodicalIndex);},
	
	gotoSlide: function(slide){
		var i;
		switch(slide){
			case 'next' : i = p.current + 1; break;
			case 'previous' : i = p.current - 1; break;
			default : i = slide;
		}
		if( i < 0 ) i = p.data.length - 1;
		if( i > (p.data.length - 1) ) i = 0;
		p.current = i;
		p.hide();
	},
	
	setData: function(){
            
		$('flash-container').removeEvents('click');
		stopPlaying();
		var a = p.data[p.current] || false;
		if( !a ){p.show();}else{
                       
			if(a.title) $('slide-header').set('html', a.title);
                      
			if(a.text) $('slide-text').set('html', a.text);
			if(a.background) $('slide-image').src =  a.background;
                      
		/*	if(a['link']){$('slide-link').setStyles({'display':'block'});
				$('slide-link').href =  a['link'];
			}else{$('slide-link').setStyles({'display':'none'});}*/
			var showimage = false;
			var showmov = false;
			var showtxt = false;
			if( a.title || a.text ) showtxt = true;
			if( a.background ) showimage = true;
			p.show(showtxt, showimage, showmov);
			$('slide-pagination').getElements('li a').each( function(el){el.removeClass('active');});
			$('slide-pagination').getElements('li')[p.current].getElement('a').addClass('active');
			if(a.movie){
				showmov = true;
				$('flash-container').setStyles({'display':'block','opacity':0});
				$('flash-container').addEvent('click', function(){
					//this.setStyle('background-color', '#000');	
					this.removeEvents('click');					 
					p.stopPlaying();											
					new Swiff('http://www.petersommer.com/flash/player.swf', {
    					id: 'flashPlayer',
						container : this,
    					width: 468,
    					height: 351,
    					params: {
        					wmode: 'opaque',
        					bgcolor: '#000000'
    					},
    					vars: {
        					video : a.movie,
							skin : 'flash/SkinOverPlaySeekStop.swf'
						}
					});
				});
			}
              Cufon.refresh();
			p.show.delay(1000, this, [showtxt, showimage, showmov] );
		}
	},		
	
	
	parseXML: function(txt, xml){
		var root = xml.documentElement;
		var slides = p.getElements(root, 'slide');
		var data, b, ti, te, m, l;
             
		for(var i=0; i<slides.length; i++){
			data = {background:false, title:false, text:false, movie:false, 'link':false};
			b = p.getElement(slides[i], 'background');
			if(b) data.background = p.imgPathPrefix + p.getText(b);
			ti = p.getElement(slides[i], 'title');
			if(ti) data.title = p.getText(ti);
			te = p.getElement(slides[i], 'text');
			if(te) data.text = p.getText(te);
			m = p.getElement(slides[i], 'movie');
			if(m) data.movie = p.videoPathPrefix + p.getText(m);
			l = p.getElement(slides[i], 'link');
			if(l) data['link'] = p.getText(l);
			p.data.push(data);
		}
		p.preloadImages();
	},
	
	preloadImages: function(){
             
		var imgs = [];
		p.data.each( function(d){
			if(d.background) imgs.push(d.background);
		});
		var myImages = new Asset.images(imgs, {onProgress: p.imageLoad, onComplete: p.imageLoadingComplete} );
	},
	
	imageLoad: function(counter, index){
		var a = new Element('a', {href:'javascript:void(0)', 'id':'slide-link' + p.currentLink});
		var li = new Element('li');
		a.inject(li);
		li.inject( $('slide-pagination').getElement('ul'), 'bottom');
		p.currentLink ++;
	},
	
	imageLoadingComplete: function(){
               
		p.gotoSlide(0);
		if( p.data.length > 1) p.play();
		$('slide-pagination').getElements('li a').each( function(a){
			a.addEvent('click', function(){
				if( !this.hasClass('active') ){
					p.stopPlaying();
					p.gotoSlide( this.id.replace('slide-link', '') );
				}
			});
		});
	},

	
	loadXML: function(){
               
		new Request({url:p.xmlPath, 'method':'get', onSuccess: p.parseXML, onFailure:p.xmlFail}).send();
	},
	
	init: function(xmlPath){
              
		p.xmlPath = xmlPath;
		$(p.container).setStyle('overflow', 'hidden');
		p.loadXML();
	}
}
	
	
