Player = function(opt) {
	this.opt = opt;
	var html = '';
	var me = this;
	
	//var htmlTemplate = "<div id='player-header'></div>";
	var htmlTemplate = "";
	htmlTemplate+= "<table width='100%'><tr><td width='60%'>  	<div id='player-info'>";
	htmlTemplate+= "		<table class='player-info'>";
	htmlTemplate+= "			<tr>"
	htmlTemplate+= "				<td width='10%'><img src='/_images/famfamfam/sound.gif'/></td>";
	htmlTemplate+= "				<td width='25%'>صاحب المادة</td>";
	htmlTemplate+= "				<td><div id='media-author'></div></td>";
	htmlTemplate+= "			</tr>";
	htmlTemplate+= "			<tr>";
	htmlTemplate+= "				<td><img src='/_images/famfamfam/time.gif'/></td>";
	htmlTemplate+= "				<td>المدة</td>";
	htmlTemplate+= "				<td><div id='media-duration'></div></td>";
	htmlTemplate+= "			</tr>";
	htmlTemplate+= "			<tr>";
	htmlTemplate+= "				<td><img src='/_images/famfamfam/package.gif'/></td>";
	htmlTemplate+= "				<td>الحجم</td>";
	htmlTemplate+= "				<td><div id='media-size'></div></td>";
	htmlTemplate+= "			</tr>";
	htmlTemplate+= "			<tr>";
	htmlTemplate+= "				<td><img src='/_images/famfamfam/disk.gif'/></td>";
	htmlTemplate+= "				<td>تحميل</td>";
	htmlTemplate+= "				<td><div id='media-download'></div></td>";
	htmlTemplate+= "			</tr>";
	htmlTemplate+= "		</table>";
	htmlTemplate+= "	</div>";
	htmlTemplate+= "</td><td>	<div id='player-player'></div></td>";
	htmlTemplate+= "</td></tr><tr><td colspan='2'>";
	htmlTemplate+= "<div id='player-footer'>";
	htmlTemplate+= "	<a id='player-prev' href='#' class='tooltip' title=''><img border='0' src='/_images/famfamfam/resultset_next.gif'/></a>";
	htmlTemplate+= "	<select id='player-select'></select>";
	htmlTemplate+= "	<a id='player-next' href='#' class='tooltip' title=''><img border='0' src='/_images/famfamfam/resultset_previous.gif'/></a>";
	htmlTemplate+= "</div></td></tr></table>";
	
	$('#'+this.opt.div).html(htmlTemplate);
	$('#player-select').change(function(){
		me.getData(this.value);
	});
	$('#player-prev').click(function(){
		var selectedIndex = $('#player-select')[0].selectedIndex;
		if (selectedIndex == 0) {
			return false;
		}
		$('#player-select')[0].selectedIndex = $('#player-select')[0].selectedIndex -1;
		$('#player-select').trigger('change');
		return false;
	});
	$('#player-next').click(function(){
		var selectedIndex = $('#player-select')[0].selectedIndex;
		if (selectedIndex == $('#player-select')[0].length-1) {
			return false;
		}
		$('#player-select')[0].selectedIndex = $('#player-select')[0].selectedIndex +1;
		$('#player-select').trigger('change');
		return false;
	});
	
	
	this.render = function(id) {
		html = '<table>';
		this.getData(id, true);
	}
	
	this.getData = function(id, initialLoad) {
		me = this;
		if (initialLoad == undefined) {
			loadList = false;
		}
		//$('#grid').hide();
		$.ajax({
			url:this.opt.url,
			type: 'POST',
			data: { action: this.opt.action, id:id, page: this.opt.page, loadList: initialLoad},
			dataType: 'json',
			success: function(data) {
				me.displayData(data[0]);
				if (initialLoad) {
					me.displayList(data[1], data[0][0].Id_Media);
					if (me.opt.boxy) {
						new Boxy('#player', {modal:true, fixed: false, title:'Media'});
					} else {
						//$('#grid').show();
						$('#player').slideDown(1500, function() {
							me.displayPlayer(data[0][0].Link);
							$('#player')[0].scrollIntoView(true);
						});
					}
				} else {
					me.displayPlayer(data[0][0].Link);
				}
			}
		});
	}
	
	this.displayData = function(data) {
		$('#player-album-header').html('<span class="player-album-title">:: '+data[0].AlbumTitle+' ::</span>');
		$('#player-media-header').html('<span class="player-media-title">'+data[0].Title+'</span>');
		if (data[0].Size < 1024) {
			size =data[0].Size+' B';
		} else if (data[0].Size < 1048576) {
			size = (data[0].Size/1024).toFixed(2)+' KB';
		} else {
			size = (data[0].Size/1048576).toFixed(2)+' MB';
		}
		$('#media-size').html(size);
		if (data[0].Duration == null || data[0].Duration == '') {
			$('#media-duration').html('--');
		} else {
			$('#media-duration').html(data[0].Duration);
		}
		$('#media-author').html('<span class="player-author-name">'+data[0].FullName+'</span>');
		//$('#media-download').html('<a target="_blank" href="/upload/get.php?Id_Media='+data[0].Id_Media+'">هنا</a>');
		$('#media-download').html('<a target="_blank" href="'+data[0].Link+'">هنا</a>');
		$('#player-close').click(function(){
			$('#player-player').hide();
			$('#player').slideUp(1500, function() {
				me.opt.uri.clear();
				$('*.media-click').removeClass("media-click"); //FIXME: this has to be done in the grid component
			});
		});//.dblclick(function(){
		//	$('#player').slideUp('slow', function(){
		//		new Boxy('#player', {modal:true, fixed: false, title:'Media'});
		//	});
		//});
		//this.endRender();
		this.opt.uri.set('Id_Media', data[0].Id_Media);
		
		if (this.opt.mediaEdit) {
			this.opt.mediaEdit.init(data[0]);
		}
		$('#player table tr')[0].scrollIntoView();
	}
	
	this.displayPlayer = function (link) {
		var s1 = new SWFObject('/_nav/player/player.swf','ply','190','100','9','#ffffff');
		s1.addParam('allowfullscreen','true');
		s1.addParam('allowscriptaccess','always');
		s1.addParam('wmode','opaque');
		s1.addVariable("skin", "/_nav/player/skins/comet.swf");
		s1.addParam('flashvars','file='+link);//+'&plugins=revolt-1');
		s1.write('player-player');
		$('#player-player').show();
	}
	
	this.displayList = function(data, selected) {
		list = '';
		totalMedia = data.length;
		$.each(data, function(i, v){
			if (v.Id_Media == selected) {
				list += '<option selected="true" ';
			} else {
				list += '<option ';
			}
			list += 'value="'+v.Id_Media+'" title="'+v.Title+'">'+getMediaNumber(v.Number, totalMedia)+' - '+getTitleVisiblePart(v.Title)+'</option>';
		});
		$('#player-select').html(list);
	}
	
	this.endRender = function() {
		
	}
	
	function getTitleVisiblePart(s) {
		if (s.length <= 40) {
			return s;
		}
		lastSpaceIndex = 0;
		for(i=0;i<s.length;i++) {
			if (i>35) {
				break;
			}
			if (s.charAt(i) == ' ') {
				lastSpaceIndex = i;
			}
		}
		return s.substring(0,lastSpaceIndex)+" ...";
	}

	/**
	 * This function returns the number of the media with additional zeros, depending on the total number of digits
	 */
	function getMediaNumber(n, total) {
		nbDigits = total.toString().length;
		if (nbDigits <= 1) {
			nbDigits = 2;
		}
		ret = n.toString();
		for(i=0;i<nbDigits-n.toString().length;i++) {
			ret = '0'+ret;
		}
		return ret;
	}
}

