/**
 * the VideoPlayer class
 * replaces link-element with JWplayer object, if required Flash version is present
 *
 * @author Klaas Dieleman, <klaas[AT]efocus.nl>
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @since 24 mar 2010
 * @version 1.0
 * @copyright eFocus
 *
 * @uses jQuery 1.4.2, <http://www.jquery.com>
 * @uses SWFobject 1.4, <http://code.google.com/p/swfobject>
 * @uses JWplayer 4.4, <http://www.longtailvideo.com>
 *
 * @param Element a-tag with url to movie to be replaced by JWplayer
 * @param Object options (optional)
 * @param String unique id for <object>-element (optional but recommended)
 *
 * @todo streaming options
 */
function VideoPlayer(elLink, options, uid){
	
	if(typeof(elLink) == 'object') {
		this.elLink = elLink;
		this.uid = uid || 0;
		
		var opt = options || {};
		
		this.options = {
			'width'				: 320,
			'height'			: 200,
			'autoplay'			: true,
			'playerurl'			: '',
			'skinurl'			: '',
			'controlbarheight'	: 20,
			'videofile'			: ''
		};
		
		for(i in this.options) {
			if(opt[i] != undefined) {
				this.options[i] = opt[i];
			}
		}
		
		this.initialize();
	}
	
};

VideoPlayer.prototype = {
	/**
	 * intializes player with requested options and inserts it
	 */
	initialize: function() {

		this.parseOptions();
		this.createPlaceholder();
		this.insertPlayer();
			
    },
    
    /**
     * reads specified options in the 'rel'-attribute and applies them, overwriting js-requested options
     */
    parseOptions: function() {
		
		var arrGivenOptions = [];
		var arrParsedOptions = [];
		
		arrGivenOptions = String(this.elLink.attr('rel')).replace(/ /g, '').split(';');

		for(var i=0; i<=arrGivenOptions.length; i++) {
			if(arrGivenOptions[i]){
				var strOptionName = arrGivenOptions[i].split('=')[0];
				var strOptionValue = arrGivenOptions[i].split('=')[1];
				arrParsedOptions[strOptionName] = strOptionValue;	
			}
		}	

		
		for(i in this.options) {
			if(arrParsedOptions[i] != undefined) {
				
				var blnOptionFormatInvalid = true;
				
				switch(i) {
					case 'width':
						blnOptionFormatInvalid = isNaN(arrParsedOptions[i]);
						arrParsedOptions[i] = parseInt(arrParsedOptions[i]);
						break;
					case 'height':
						blnOptionFormatInvalid = isNaN(arrParsedOptions[i]);
						arrParsedOptions[i] = parseInt(arrParsedOptions[i]);
						break;
					case 'autoplay':
						if(arrParsedOptions[i] == 'true' || arrParsedOptions[i] == 'false') blnOptionFormatInvalid = false;
						break;
					default:
						this.options[i] = this.options[i];
				}
				
				if(blnOptionFormatInvalid == false) {
					this.options[i] = arrParsedOptions[i];
				}
				
			}
		}
		
		this.options.videofile = jQuery(this.elLink).attr('href');
		
	},

	/**
     * creates placeholder and replaces link element with it
     */
	createPlaceholder: function() {
	
		this.container = jQuery('<span></span>');
		this.container.attr('id', ('videoplayer_' + this.uid));
		this.elLink.after(this.container);
		this.elLink.remove();
		
	},
	
	/**
     * embeds JWplayer on placeholder
     */
	insertPlayer: function() {
		var strIdPlayer = this.container.attr("id");
		var so = new SWFObject('/nl/Images/playerlicensed_tcm217-541333.swf',"pl_" + strIdPlayer,'430','32','9');
		so.addParam('allowscriptaccess','always');
		so.addVariable('file', this.options.videofile);
		so.addVariable('backcolor','000000');
		so.addVariable('frontcolor','FFFFFF');
		so.addVariable('lightcolor','FF6600');
		so.addVariable('screencolor','FF6600');
		so.addVariable('stretching','fill');
		so.addVariable('wmode','transparent');
		so.addVariable('skin','/nl/Images/modieus_tcm217-541332.swf');
		//so.addVariable('autostart','true');
		//so.addVariable('controlbar','none');
		so.write(strIdPlayer);
	}
}

