if(typeof Achilles12 == "undefined") {

	var Achilles12 = new Object();

	Achilles12.utils = new Object();

}





















/****************************************************************************

* The player wrapper; loads config variables and starts MVC cycle.

****************************************************************************/

Achilles12.Player = function(cnt,src,cfg) {

	this.controller;

	this.model;

	this.view;

	this.configuration = {

		backgroundcolor:'FFFFFF',

		windowless:'true',

		file:'',

		height:'256',

		image:'',

		backcolor:'FFFFFF',

		frontcolor:'000000',

		lightcolor:'000000',

		screencolor:'000000',

		width:'352',

		logo:'http://www.achilles12.nl/achilleslogo_klein.png',

		overstretch:'false',

		shownavigation:'true',

		showstop:'false',

		showdigits:'true',

		usefullscreen:'true',

		usemute:'false',

		autostart:'false',

		bufferlength:'3',

		duration:'0',

		repeat:'true',

		sender:'',

		start:'0',

		volume:'90',

		link:'',

		linkfromdisplay:'false',

		linktarget:'_self'

	};

	for(itm in this.configuration) {

		if(cfg[itm] != undefined) {

			if (itm.indexOf('color') > 0) { 

				this.configuration[itm] = cfg[itm].substr(cfg[itm].length-6);

			} else {

				this.configuration[itm] = cfg[itm];

			}

		}

	}

	Silverlight.createObjectEx({

		source:src,

		parentElement:cnt,

		properties:{

			width:this.configuration['width'],

			height:this.configuration['height'],

			version:'1.0',

			inplaceInstallPrompt:true,

			isWindowless:this.configuration['windowless'],

			background:'#'+this.configuration['backgroundcolor']

		},

		events:{

			onLoad:this.onLoadHandler,

			onError:null

		},

		context:this

	});

}



Achilles12.Player.prototype = {

	addListener: function(typ,fcn) {

		this.view.listeners.push({type:typ,func:fcn});

	},



	getConfig: function() { 

		return this.configuration;

	},



	onLoadHandler: function(pid,tgt,sdr) {

		tgt.configuration['sender'] = sdr;

		tgt.controller = new Achilles12.Controller(tgt.configuration);

		tgt.view = new Achilles12.View(tgt.configuration,tgt.controller);

		tgt.model = new Achilles12.Model(tgt.configuration,tgt.controller,tgt.view);

		tgt.controller.startMVC(tgt.view,tgt.model);

	},



	sendEvent: function(typ,prm) {

		switch(typ.toUpperCase()) {

			case 'LINK':

				this.controller.setLink();

				break;

			case 'LOAD':

				this.controller.setLoad(prm);

				break;

			case 'MUTE':

				this.controller.setMute();

				break;

			case 'PLAY':

				this.controller.setPlay();

				break;

			case 'SCRUB':

				this.controller.setScrub(prm);

				break;

			case 'STOP':

				this.controller.setStop();

				break;

			case 'VOLUME':

				this.controller.setVolume(prm);

				break;

		}

	}

}





















/****************************************************************************

* The controller of the player MVC triad, which processes all user input.

****************************************************************************/

Achilles12.Controller = function(cfg) {

	this.configuration = cfg;

}



Achilles12.Controller.prototype = {

	startMVC: function(vie,mdl) {

		this.view = vie;

		this.model = mdl;

		if(this.configuration['usemute'] == 'true') {

			this.view.onVolume(0);

			this.view.onMute(true);

			this.model.goVolume(0);

		} else {

			this.view.onVolume(this.configuration['volume']);

			this.model.goVolume(this.configuration['volume']);

		}

		if(this.configuration['autostart'] == 'true') {

			this.model.goStart();

		} else { 

			this.model.goPause();

		}

	},



	setState: function(old,stt) {

		this.state = stt;

		var pos = this.configuration['start'];

		if(old == 'Closed' && pos > 0) {

			setTimeout(Achilles12.utils.delegate(this,this.setScrub),200,pos);

		} 

	},



	setLink: function() {

		if (this.configuration['linktarget'].indexOf('javascript:') == 0) {

			return Function(this.configuration['linktarget']).apply();

		} else if (this.configuration['linktarget'] == '_blank') {

			window.open(this.configuration['link']);

		} else if (this.configuration['linktarget'] != '') {

			window.location = this.configuration['link'];

		}

	},



	setLoad: function(fil) {

		if(this.model.state != "Closed") {

			this.model.goStop(); 

		}

		this.configuration['file'] = fil;

		if(this.configuration['autostart'] == 'true') {

			setTimeout(Achilles12.utils.delegate(this.model,this.model.goStart),100);

		}

	},



	setMute: function() {

		if(this.configuration['usemute'] == 'true') {

			this.configuration['usemute'] = 'false';

			this.model.goVolume(this.configuration['volume']);

			this.view.onMute(false);

		} else {

			this.configuration['usemute'] = 'true';

			this.model.goVolume(0);

			this.view.onMute(true);

		}

	},



	setPlay: function() {

		if(this.state == 'Buffering' || this.state == 'Playing') {

			if(this.configuration['duration'] == 0) { 

				this.model.goStop();

			} else { 

				this.model.goPause();

			}

		} else {

			this.model.goStart();

		}

	},



	setScrub: function(sec) {

		if(sec < 2) {

			sec = 0;

		} else if (sec > this.configuration['duration']-4) {

			sec = this.configuration['duration']-4;

		}

		if(this.state == 'Buffering' || this.state == 'Playing') {

			this.model.goStart(sec);

		} else {

			this.model.goPause(sec);

		}

	},



	setStop: function() {

		this.model.goStop();

	},



	setVolume: function(pct) {

		if(pct < 0) { pct = 0; } else if(pct > 100) { pct = 100; }

		this.configuration['volume'] = Math.round(pct);

		this.model.goVolume(pct);

		this.view.onVolume(pct);

		if(this.configuration['usemute'] == 'true') {

			this.configuration['usemute'] = 'false';

			this.view.onMute(false);

		} 

	},



	setFullscreen: function() {

		var fss = !this.configuration['sender'].getHost().content.FullScreen;

		this.configuration['sender'].getHost().content.FullScreen = fss;

		Achilles12.utils.delegate(this.view,this.view.onFullscreen);

	}

}





















/****************************************************************************

* The view of the player MVC triad, which manages the graphics.

****************************************************************************/

Achilles12.View = function(cfg,ctr) {

	this.configuration = cfg;

	this.listeners = Array();

	this.controller = ctr;

	this.fstimeout;

	this.fslistener;

	this.display = this.configuration['sender'].findName("PlayerDisplay");

	this.controlbar = this.configuration['sender'].findName("PlayerControls");

	this.configuration['sender'].getHost().content.onResize = 

		Achilles12.utils.delegate(this,this.resizePlayer);

	this.configuration['sender'].getHost().content.onFullScreenChange = 

		Achilles12.utils.delegate(this,this.onFullscreen);

	this.assignColorsClicks();

	this.resizePlayer();

}



Achilles12.View.prototype = {

	onBuffer: function(pct) {

		var snd = this.configuration['sender'];

		if(pct == 0) { 

			snd.findName("BufferText").Text = null;

		} else { 

			pct < 10 ? pct = "0"+pct: pct = ""+pct;

			snd.findName("BufferText").Text = pct;

		}

		this.delegate('BUFFER',[pct]);

	},



	onFullscreen: function(fss) {

		var snd = this.configuration['sender'];

		var fst = snd.getHost().content.FullScreen;

		if(fst) { 

			this.fstimeout = setTimeout(Achilles12.utils.delegate(this,

				this.hideFSControls),2000);

			this.fslistener = this.display.addEventListener('MouseMove',

				Achilles12.utils.delegate(this,this.showFSControls));

			snd.findName("FullscreenSymbol").Visibility = "Collapsed";

			snd.findName("FullscreenOffSymbol").Visibility = "Visible";

		} else {

			clearTimeout(this.fstimeout);

			this.display.removeEventListener("MouseMove",this.fslistener);

			this.controlbar.Visibility = "Visible";

			this.display.Cursor = "Hand";

			snd.findName("FullscreenSymbol").Visibility = "Visible";

			snd.findName("FullscreenOffSymbol").Visibility = "Collapsed";

		}

		this.resizePlayer();

		this.delegate('FULLSCREEN');

	},



	showFSControls: function(sdr,arg) {

		var vbt = sdr.findName('PlayerControls');

		var yps = arg.GetPosition(vbt).Y;

		clearTimeout(this.fstimeout);

		this.controlbar.Visibility = "Visible";

		this.display.Cursor = "Hand";

		if(yps < 0) { 

			this.fstimeout = setTimeout(Achilles12.utils.delegate(this,

				this.hideFSControls),2000);

		}

	},



	hideFSControls: function() {

		this.controlbar.Visibility = "Collapsed";

		this.display.Cursor = "None";

	},



	onLoad: function(pct) {

		var snd = this.configuration['sender'];

		var max = snd.findName("TimeSlider").Width;

		snd.findName("DownloadProgress").Width = Math.round(max*pct/100);

		this.delegate('LOAD',[pct]);

	},



	onMute: function(mut) {

		var snd = this.configuration['sender'];

		this.configuration['usemute'] = ''+mut;

		if(mut) {

			snd.findName("VolumeHighlight").Visibility = "Collapsed";

			snd.findName("MuteSymbol").Visibility = "Visible";

			snd.findName("MuteOffSymbol").Visibility = "Collapsed";

			if(this.state == 'Playing') {

				snd.findName("MuteIcon").Visibility = "Visible";

			}

		} else {

			snd.findName("VolumeHighlight").Visibility = "Visible";

			snd.findName("MuteSymbol").Visibility = "Collapsed";

			snd.findName("MuteOffSymbol").Visibility = "Visible";

			snd.findName("MuteIcon").Visibility = "Collapsed";

		}

		this.delegate('MUTE');

	},



	onState: function(old,stt) {

		var snd = this.configuration['sender'];

		this.state = stt;

		if(stt == 'Buffering' || stt == 'Playing' || stt == 'Opening') {

			snd.findName("PlayIcon").Visibility = "Collapsed";

			snd.findName("PlaySymbol").Visibility = "Collapsed";

			snd.findName("PlayOffSymbol").Visibility = "Visible";

			if (stt=='Playing') {

				snd.findName("BufferIcon").Visibility = "Collapsed";

				snd.findName("BufferText").Visibility = "Collapsed";

				if(this.configuration['usemute'] == 'true') {

					snd.findName("MuteIcon").Visibility = "Visible";

				}

			} else{

				snd.findName("BufferIcon").Visibility = "Visible";

				snd.findName("BufferText").Visibility = "Visible";

			}

		} else { 

			snd.findName("MuteIcon").Visibility = "Collapsed";

			snd.findName("BufferIcon").Visibility = "Collapsed";

			snd.findName("BufferText").Visibility = "Collapsed";

			snd.findName("PlayOffSymbol").Visibility = "Collapsed";

			snd.findName("PlaySymbol").Visibility = "Visible";

			if(this.configuration['linkfromdisplay'] == 'true') {

				snd.findName("PlayIcon").Visibility = "Collapsed";

			} else { 

				snd.findName("PlayIcon").Visibility = "Visible";

			}

		}

		try {

			if(!(old == 'Completed' && stt == 'Buffering') &&

				!(old == 'Buffering' && stt == 'Paused')) {

				playerStatusChange(old.toUpperCase(),stt.toUpperCase());

			}

		} catch (err) {}

		this.delegate('STATE',[old,stt]);

	},



	onTime: function(elp,dur) {

		var snd = this.configuration['sender'];

		var snd = this.configuration['sender'];

		var max = snd.findName("TimeSlider").Width;

		if(dur > 0) {

			var pos = Math.round(max*elp/dur);

			this.configuration['duration'] = dur;

			snd.findName("ElapsedText").Text = Achilles12.utils.timestring(elp);

			snd.findName("RemainingText").Text = Achilles12.utils.timestring(dur-elp);

			snd.findName("TimeSymbol").Visibility = "Visible";

			snd.findName("TimeSymbol")['Canvas.Left'] = pos+4;

			snd.findName("TimeHighlight").Width = pos-2;

		} else  { 

			snd.findName("TimeSymbol").Visibility = "Collapsed";

		}

		this.delegate('TIME',[elp,dur]);

	},



	onVolume: function(pct) {

		var snd = this.configuration['sender'];

		snd.findName("VolumeHighlight").Width = Math.round(pct/5);

		this.delegate('VOLUME',[pct]);

	},



	assignColorsClicks: function() {

		this.display.Cursor = "Hand";

		this.display.Background = "#FF"+this.configuration['screencolor'];

		if(this.configuration['linkfromdisplay'] == 'false') { 

			this.display.addEventListener('MouseLeftButtonUp',

				Achilles12.utils.delegate(this.controller,

				this.controller.setPlay));

		} else { 

			this.display.addEventListener('MouseLeftButtonUp',

				Achilles12.utils.delegate(this.controller,

				this.controller.setLink));

			this.display.findName("PlayIcon").Visibility = "Collapsed";

		}

		if(this.configuration['logo'] != '') {

			this.display.findName('OverlayCanvas').Visibility = "Visible";

			this.display.findName('OverlayLogo').ImageSource = 

				this.configuration['logo'];

		}

		this.controlbar.findName("ControlbarBack").Fill = 

			"#FF"+this.configuration['backcolor'];

		this.assignButton('Play',this.controller.setPlay);

		this.assignButton('Stop',this.controller.setStop);

		this.configuration['sender'].findName('ElapsedText').Foreground = 

			"#FF"+this.configuration['frontcolor'];

		this.assignSlider('Time',this.changeTime);

		this.configuration['sender'].findName('DownloadProgress').Fill = 

			"#FF"+this.configuration['frontcolor'];

		this.configuration['sender'].findName('RemainingText').Foreground = 

			"#FF"+this.configuration['frontcolor'];

		this.assignButton('Link',this.controller.setLink);

		this.assignButton('Fullscreen',this.controller.setFullscreen);

		this.assignButton('Mute',this.controller.setMute);

		this.assignSlider('Volume',this.changeVolume);

	},



	assignButton: function(btn,act) {

		var el1 = this.configuration['sender'].findName(btn+'Button');

		el1.Cursor = "Hand";

		el1.addEventListener('MouseLeftButtonUp',

			Achilles12.utils.delegate(this.controller,act));

		el1.addEventListener('MouseEnter',

			Achilles12.utils.delegate(this,this.rollOver));

		el1.addEventListener('MouseLeave',

			Achilles12.utils.delegate(this,this.rollOut));

		this.configuration['sender'].findName(btn+'Symbol').Fill = 

			"#FF"+this.configuration['frontcolor'];

		try {

			this.configuration['sender'].findName(btn+'OffSymbol').Fill = 

				"#FF"+this.configuration['frontcolor'];

		} catch(e) {}

	},



	assignSlider: function(sld,act) {

		var el1 = this.configuration['sender'].findName(sld+'Button');

		el1.Cursor = "Hand";

		el1.addEventListener('MouseLeftButtonUp',

			Achilles12.utils.delegate(this,act));

		el1.addEventListener('MouseEnter',

			Achilles12.utils.delegate(this,this.rollOver));

		el1.addEventListener('MouseLeave',

			Achilles12.utils.delegate(this,this.rollOut));

		this.configuration['sender'].findName(sld+'Slider').Fill = 

			"#FF"+this.configuration['frontcolor'];

		this.configuration['sender'].findName(sld+'Highlight').Fill = 

			"#FF"+this.configuration['frontcolor'];

		this.configuration['sender'].findName(sld+'Symbol').Fill = 

			"#FF"+this.configuration['frontcolor'];

	},



	delegate: function(typ,arg) {

		for(var i=0; i<this.listeners.length; i++) {

			if(this.listeners[i]['type'].toUpperCase() == typ) {

				this.listeners[i]['func'].apply(null,arg);

			}

		}

	},



	rollOver: function(sdr) {

		var str = sdr.Name.substr(0,sdr.Name.length-6);

		this.configuration['sender'].findName(str+'Symbol').Fill = 

			"#FF"+this.configuration['lightcolor'];

		try {

			this.configuration['sender'].findName(str+'OffSymbol').Fill = 

				"#FF"+this.configuration['lightcolor'];

		} catch(e) {}

	},



	rollOut: function(sdr) {

		var str = sdr.Name.substr(0,sdr.Name.length-6);

		this.configuration['sender'].findName(str+'Symbol').Fill = 

			"#FF"+this.configuration['frontcolor'];

		try {

			this.configuration['sender'].findName(str+'OffSymbol').Fill = 

				"#FF"+this.configuration['frontcolor'];

		} catch(e) {}

	},



	changeTime: function(sdr,arg) {

		var tbt = sdr.findName('TimeSlider');

		var xps = arg.GetPosition(tbt).X;

		var sec = Math.floor(xps/tbt.Width*this.configuration['duration']);

		this.controller.setScrub(sec);

	},



	changeVolume: function(sdr,arg) {

		var vbt = sdr.findName('VolumeButton');

		var xps = arg.GetPosition(vbt).X;

		this.controller.setVolume(xps*5);

	},



	resizePlayer: function() {

		var wid = this.configuration['sender'].getHost().content.actualWidth;

		var hei = this.configuration['sender'].getHost().content.actualHeight;

		var fss = this.configuration['sender'].getHost().content.FullScreen;

		if(this.configuration['shownavigation'] == 'true') {

			if(fss == true) {

				this.resizeDisplay(wid,hei);

				this.controlbar['Canvas.Left'] = Math.round(wid/2-250);

				this.resizeControlbar(500,hei-this.controlbar.Height-16);

				this.controlbar.findName('ControlbarBack')['Opacity'] = 0.5;

			} else { 

				this.resizeDisplay(wid,hei-20);

				this.controlbar['Canvas.Left'] = 0;

				this.resizeControlbar(wid,hei-this.controlbar.Height);

				this.controlbar.findName('ControlbarBack')['Opacity'] = 1;

			}

		} else {

			this.resizeDisplay(wid,hei);

		}

	},



	resizeDisplay: function(wid,hei) {

		this.stretchElement('PlayerDisplay',wid,hei);

		this.stretchElement('VideoWindow',wid,hei);

		this.stretchElement('PlaceholderImage',wid,hei);

		this.centerElement('PlayIcon',wid,hei);

		this.centerElement('MuteIcon',wid,hei);

		this.centerElement('BufferIcon',wid,hei);

		this.centerElement('BufferText',wid,hei);

		this.display.findName('OverlayCanvas')['Canvas.Left'] = wid -

			this.display.findName('OverlayCanvas').Width - 10;

		this.display.Visibility = "Visible";

	},



	resizeControlbar: function(wid,yps,alp) {

		this.controlbar['Canvas.Top'] = yps;

		this.stretchElement('PlayerControls',wid);

		this.stretchElement('ControlbarBack',wid);

		this.placeElement('PlayButton',0);

		var lft = 17;

		this.placeElement('VolumeButton',wid-24);

		this.placeElement('MuteButton',wid-37);

		var rgt = 37;

		if(this.configuration['showstop'] == 'true') {

			this.placeElement('StopButton',lft);

			lft += 17;

		} else {

			this.controlbar.findName('StopButton').Visibility="Collapsed";

		}

		if(this.configuration['usefullscreen'] == 'true') {

			rgt += 18;

			this.placeElement('FullscreenButton',wid-rgt);

		} else {

			this.controlbar.findName('FullscreenButton').Visibility = 

				"Collapsed";

		}

		if(this.configuration['link'] != '') {

			rgt += 18;

			this.placeElement('LinkButton',wid-rgt);

		} else {

			this.controlbar.findName('LinkButton').Visibility="Collapsed";

		}

		if(this.configuration['showdigits'] == 'true' && wid-rgt-lft> 160) {

			rgt += 35;

			this.controlbar.findName('RemainingButton').Visibility="Visible";

			this.controlbar.findName('ElapsedButton').Visibility="Visible";

			this.placeElement('RemainingButton',wid-rgt);

			this.placeElement('ElapsedButton',lft);

			lft +=35;

		} else {

			this.controlbar.findName('RemainingButton').Visibility = 

				"Collapsed";

			this.controlbar.findName('ElapsedButton').Visibility="Collapsed";

		}

		this.placeElement('TimeButton',lft);

		this.stretchElement('TimeButton',wid-lft-rgt);

		this.stretchElement('TimeShadow',wid-lft-rgt);

		this.stretchElement('TimeStroke',wid-lft-rgt);

		this.stretchElement('TimeFill',wid-lft-rgt);

		this.stretchElement('TimeSlider',wid-lft-rgt-10);

		this.stretchElement('DownloadProgress',wid-lft-rgt-10);

		var tsb = this.configuration['sender'].findName('TimeSymbol');

		this.stretchElement('TimeHighlight',tsb['Canvas.Left']-5);

		this.controlbar.Visibility = "Visible";

	},



	centerElement: function(nam,wid,hei) {

		var elm = this.configuration['sender'].findName(nam);

		elm['Canvas.Left'] = Math.round(wid/2 - elm.Width/2);

		elm['Canvas.Top'] = Math.round(hei/2 - elm.Height/2);

	},



	stretchElement: function(nam,wid,hei) {

		var elm = this.configuration['sender'].findName(nam);

		elm.Width = wid;

		if (hei != undefined) { elm.Height = hei; }

	},



	placeElement: function(nam,xps,yps) {

		var elm = this.configuration['sender'].findName(nam);

		elm['Canvas.Left'] = xps;

		if(yps) { elm['Canvas.Top'] = yps; }

	}

}





















/****************************************************************************

* The model of the player MVC triad, which stores all playback logic.

****************************************************************************/

Achilles12.Model = function(cfg,ctr,vie) {

	this.configuration = cfg;

	this.controller = ctr;

	this.view = vie;

	this.video = this.configuration['sender'].findName("VideoWindow");

	this.preview = this.configuration['sender'].findName("PlaceholderImage");

	var str = {

		'true':'UniformToFill',

		'false':'Uniform',

		'fit':'Fill',

		'none':'None'

	}

	this.state = this.video.CurrentState;

	this.timeint;

	this.video.Stretch = str[this.configuration['overstretch']];

	this.preview.Stretch = str[this.configuration['overstretch']];

	this.video.BufferingTime = 

		Achilles12.utils.spanstring(this.configuration['bufferlength']);

	this.video.AutoPlay = true;

	this.video.AddEventListener("CurrentStateChanged",

		Achilles12.utils.delegate(this,this.stateChanged));

	this.video.AddEventListener("MediaEnded",

		Achilles12.utils.delegate(this,this.mediaEnded));

	this.video.AddEventListener("BufferingProgressChanged",

		Achilles12.utils.delegate(this,this.bufferChanged));

	this.video.AddEventListener("DownloadProgressChanged",

		Achilles12.utils.delegate(this,this.downloadChanged));

	if(this.configuration['image'] != '') {

		this.preview.Source = this.configuration['image'];

	}

}



Achilles12.Model.prototype = {

	goPause: function(sec) {

		this.video.pause();

		if(!isNaN(sec)) {

			this.video.Position = Achilles12.utils.spanstring(sec);

		}

		this.timeChanged();

	},



	goStart: function(sec) {

		this.video.Visibility = 'Visible';

		this.preview.Visibility = 'Collapsed';

		if(this.state == "Closed") {

			this.video.Source = this.configuration['file'];

		} else {

			this.video.play();

		}

		if(!isNaN(sec)) {

			this.video.Position = Achilles12.utils.spanstring(sec);

		}

	},



	goStop: function() {

		this.video.Visibility = 'Collapsed';

		this.preview.Visibility = 'Visible';

		this.goPause(0);

		this.video.Source = 'null';

		this.view.onBuffer(0);

		clearInterval(this.timeint);

	},



	goVolume: function(pct) {

		this.video.Volume = pct/100;

	},



	stateChanged: function() {

		var stt = this.video.CurrentState;

		if(stt != this.state) {

			this.controller.setState(this.state,stt);

			this.view.onState(this.state,stt);

			this.state = stt;

			this.configuration['duration'] = 

				Math.round(this.video.NaturalDuration.Seconds*10)/10;

			if(stt != "Playing" && stt != "Buffering" && stt != "Opening") {

				clearInterval(this.timeint);

			} else {

				this.timeint = setInterval(Achilles12.utils.delegate(

					this,this.timeChanged),100);

			}

		}

	},



	mediaEnded: function() {

		if(this.configuration['repeat'] == 'true') {

			this.goStart(0);

		} else {

			this.state = 'Completed';

			this.view.onState(this.state,'Completed');

			this.video.Visibility = 'Collapsed';

			this.preview.Visibility = 'Visible';

			this.goPause(0);

		}

	},



	bufferChanged: function() {

		var bfr = Math.round(this.video.BufferingProgress*100);

		this.view.onBuffer(bfr);

	},



	downloadChanged: function() {

		var dld = Math.round(this.video.DownloadProgress*100);

		this.view.onLoad(dld);

	},



	timeChanged: function() {

		var pos = Math.round(this.video.Position.Seconds*10)/10;

		this.view.onTime(pos,this.configuration['duration']);

	}

}





















/****************************************************************************

* Some utility functions.

****************************************************************************/

Achilles12.utils.delegate = function(obj,fcn) {

	return function() {

		return fcn.apply(obj,arguments);

	}

}

Achilles12.utils.timestring = function(stp) {

	var hrs = Math.floor(stp/3600);

	var min = Math.floor(stp%3600/60);

	var sec = Math.round(stp%60);

	var str = "";

	sec > 9 ? str += sec: str +='0'+sec;

	min > 9 ? str = min+":"+str: str='0'+min+":"+str;

	hrs > 0 ? str = hrs+":"+str: null;

	return str;

}

Achilles12.utils.spanstring = function(stp) {

	var hrs = Math.floor(stp/3600);

	var min = Math.floor(stp%3600/60);

	var sec = Math.round(stp%60*10)/10;

	var str = hrs+':'+min+':'+sec;

	return str;

}