

;

/*	*/function getInt(num, radix){	radix = radix || 10;	return parseInt( num * 1, radix );}function decimal(num){			if ( getInt( num ) < 10 ) { return "0" + num; }		return num;}/*	date stuff*/var monthNames = [	'januari',	'februari',	'maart',		'april',	'mei',	'juni',		'juli',	'augustus',	'september',		'oktober',	'november',	'december'];var dayNames = [	"zondag",	"maandag",	"dinsdag",	"woensdag",	"donderdag",	"vrijdag",	"zaterdag"];Date.prototype.format = function(f){	if ( !this.valueOf() ) { return ''; }		var d = this;		return f.replace(/(yyyy|yy|mmmm|mmm|mm|m|dddd|ddd|dd|d|id|hh|h|nn|ss|a\/p)/gi,				function( s )		{			switch( s.toLowerCase() )			{				case "yyyy" : 	return d.getFullYear();				case "yy" : 	return ( d.getFullYear() + "" ).substr( 2, 2 );				case "mmmm" : 	return monthNames[ d.getMonth() ];				case "mmm" : 	return monthNames[ d.getMonth() ].substr( 0, 3 ); 				case "mm" : 	return decimal( d.getMonth() + 1 );				case "m" :		return d.getMonth();				case "dddd" : 	return dayNames[d.getDay()];				case "ddd" : 	return dayNames[d.getDay()].substr( 0, 2 );				case "dd" :		return decimal( d.getDate() );				case "d" :		return d.getDay();				case "id" :		return d.getDate();				case "hh" : 	return decimal( ( h = d.getHours() % 12 ) ? h : 12 );				case "h" :		return decimal( d.getHours() );				case "nn" : 	return decimal( d.getMinutes() );				case "ss" : 	return decimal( d.getSeconds() );				case "a/p" : 	return d.getHours() < 12 ? 'a' : 'p';			}		}	);};Date.prototype.clone = function(){	return new Date(this.getTime());};/*	agenda*/var Agenda ={	_data : [],	_containerSelector : "#agenda",	_scrollerSelector : ".agenda-scroller",	_backButtonSelector : ".back",	_forwardButtonSelector : ".forward",	_backButton : false,	_forwardButton : false,		_paramFormat : "yyyy-mm-dd",		_baseUrl : "/xml_agenda",	_timeStamp : (new Date()).getTime(),	_toDay : new Date(),	_firstDate : new Date(),	_dateStep : 2,	_CACHE : {},		init: function( config )	{		if ( config )		{			this._baseUrl = config.baseUrl || this._baseUrl;						if ( config.timeStamp )			{							this._timeStamp = getInt( config.timeStamp ) * 1000;			}		}				this._toDay = new Date( this._timeStamp );				var d = this._toDay.clone();		d.setDate( d.getDate() - this._dateStep );				this._firstDate = d;				this.setUp();	},			setUp : function()	{		this.initPaging();				this.load();	},		initPaging : function()	{		var that = this;				this._backButton = $( this._containerSelector + " " + this._backButtonSelector );		this._forwardButton = $( this._containerSelector + " " + this._forwardButtonSelector );				this._backButton.click(			function(e)			{				var prev = that._firstDate.clone();				prev.setDate( prev.getDate() - that._dateStep );								that._firstDate = prev;											that.load( that.getParam( prev ) );								e.preventDefault();			}		);						this._forwardButton.click(			function(e)			{				var next = that._firstDate.clone();				next.setDate( next.getDate() + that._dateStep );								that._firstDate = next;							that.load( that.getParam( next ) );								e.preventDefault();			}		);	},		saveToCache : function(data)	{		var key = this._firstDate.format( this._paramFormat );				this._CACHE[ key ] = data;	},		setFirstDate : function( stamp )	{		this._firstDate = new Date( stamp );	},		getScroller : function()	{		return $( this._containerSelector + " " + this._scrollerSelector );			},		clearScroller : function()	{		this.getScroller().empty();	},		render : function()	{		this.clearScroller();				var first = this._firstDate.clone();				for( var i = 0; i < 5; i++ )		{			var next = first.clone();			next.setDate( next.getDate() + i );						var onair = this.getParam( next );			var found = false;						for ( var key in this._data )			{				if ( key == onair )				{					this.getScroller().append( this.getDayView( this._data[key], i ) );					found = true;					break;				}			}						if ( ! found )			{							this.getScroller().append( this.getEmptyDayView( next, i) );			}		}	},			setData : function( data )	{		this._data = data;			this.render();	},		getParam : function( date )	{		var param = "";		if ( date )		{					param = date.format( this._paramFormat );		}		return param;	},		getDataUrl : function( param )	{		var url = this._baseUrl;			if ( param )		{			url += "/" + param;		}						return url;	},		load : function( param )	{			var url = this.getDataUrl( param );				if ( this._CACHE[param] )		{			// console.log( 'from cache: ' + param );							this.setData( this._CACHE[param] );					} else {					var that = this;					$.ajax( 						{					type: 		"POST",					dataType: 	"xml",					url: 		url,										success: 	that.parseResults,					error: 		that.throwError				}			);				}	},		throwError : function( XMLHttpRequest, textStatus, errorThrown ) { },		/*	*/		getDayLabel : function( date, param )	{		var theDay = this._toDay.clone();				theDay.setDate( theDay.getDate() - 1 );				if ( theDay.format( this._paramFormat ) == param )		{			return "Gisteren";		}				theDay.setDate( theDay.getDate() + 1 );				if ( theDay.format( this._paramFormat ) == param )		{			return "Vandaag";		}					theDay.setDate( theDay.getDate() + 1 );				if ( theDay.format( this._paramFormat ) == param )		{			return "Morgen";		}				theDay.setDate( theDay.getDate() + 1 );				if ( theDay.format( this._paramFormat ) == param )		{			return "Overmorgen";		}				return date.format("dd mmmm");	},		initProgram : function( prog )	{		prog.mouseover(			function(e)			{				$(this).addClass('hilite');								e.preventDefault();					}	   );				prog.mouseout(			function(e)			{				$(this).removeClass('hilite');								e.preventDefault();			}	   );			   prog.click(			function(e)			{								e.preventDefault();			}	   );	},		getEmptyDateInfo : function( d )	{		var dayName 	= d.format("dddd");		var param 		= d.format( this._paramFormat );		var date		= this.getDayLabel( d, param );				var data = {};		data.name = dayName;		data.onair = param;		data.date = date;				return data;	},		getEmptyDayView : function( date, i)	{		var day 		= DIV().addClass("day");				var data = this.getEmptyDateInfo( date );				if ( data.date == "Vandaag" ) { day.addClass('today'); }				var h2 			= H2().html( data.name );				var programs 	= DIV().addClass('programs');						var h3 			= H3().html( data.date );				programs.append( h3 );				day.append( h2 ).append( programs );				return day;	},		getDayView : function( data, i )	{		var day 		= DIV().addClass("day");					if ( data.date == "Vandaag" ) { day.addClass('today'); }				var h2 			= H2().html( data.name );		var programs 	= DIV().addClass('programs');		var h3 			= H3().html( data.date );				programs.append( h3 );						for( var key in data.episodes )		{			programs.append( this.getItemView( data.episodes[key] ) );		}				for( var key in data.events )		{			programs.append( this.getItemView( data.events[key] ) );		}				for( var key in data.tv )		{			if ( data.date == 'Gisteren' || data.date == 'Vandaag' || data.date == 'Morgen' )			{				programs.append( this.getTvView( data.tv[key], data.date ) );			}		}				day.append( h2 ).append( programs );				return day;	},	getTvView : function( item, date )	{		var program 	= DIV().addClass('program');				this.initProgram( program );				var dl 			= DL();		var dt 			= DT().html( 'OVERBLIJF TV' );		var dd 			= DD().html( item.title );		var ddd 		= DD().html( item.onair );		var dddd		= DD().html( item.description );				var date = date.toLowerCase();		var href = '/overblijftv/' + date;				var a = A( href ).html("&gt; Bekijk de uitzending");				dl.click(				function(e)				{					window.open( href );										e.preventDefault();				}			);				var ddddd		= DD().append( a );				dl.append( dt ).append( dd ).append( ddd ).append( dddd ).append( ddddd );					program.append( dl );				return program;	},		getItemView : function( item )	{		var program 	= DIV().addClass('program');				this.initProgram( program );				var that = this;			if ( item.id_image > 0 )		{			if ( item.stream != '' )			{				var a = A( item.stream ).addClass("image").click(									function(e)					{						openStream( item.stream );						e.preventDefault();					}				);				var img = IMG( item.src_image, 150 );								a.append( img );			}			else			{				var a = DIV().addClass("image");				var img = IMG( item.src_image, 150 );				a.append( img );			}		}				var dl 			= DL();		var dt 			= DT().html( item.title );		var dd 			= DD().html( item.onair );		var ddd			= DD().html( item.description );				var watchA 		= "";				if ( item.stream != '') 		{			watchA = A( item.stream ).html("&gt; Bekijk de uitzending");									dl.click(				function(e)				{					openStream( item.stream );					e.preventDefault();				}			);		}			var dddd		= DD().append( watchA );				dl.append( dt ).append( dd ).append( ddd ).append( dddd );						if ( a ) program.append( a );				program.append( dl );				return program;	},		parseEpisodes : function( xmlEpisodes, onair )	{		var episodes = [];				xmlEpisodes.each(								 			function()			{				var id 				= getInt( $(this).find("id:eq(0)").text() );				var title 			= $(this).find("title").text();								var description 	= $(this).find("description").text();				var stream 			= $(this).find("stream").text();				var dateDiff		= $(this).find("datediff").text();				var image 			= $(this).find("image");				var id_image 		= 0;				var name_image		= "";				var src_image		= false;													id_image 		= getInt( image.find("id_image").text() );					name_image 		= image.find("name_image").text();					src_image 		= image.find("src").text();										// console.log( 'src_image: ' + src_image );								var episode = {};								episode.id 			= id;				episode.title 		= title;				episode.onair 		= onair;				episode.description = description;				episode.stream 		= stream;				episode.id_image 	= id_image;				episode.name_image 	= name_image;				episode.src_image 	= src_image;								episodes.push( episode );			}		);				return episodes;	},		parseEvents : function( xmlEvents )	{		var events = [];		xmlEvents.each(							   			function()			{				var id 				= getInt( $(this).find("id:eq(0)").text() );				var title 			= $(this).find("title").text();				var online			= $(this).find("online").text()				var description 	= $(this).find("description").text();												var image 			= $(this).find("image");				var id_image 		= 0;				var name_image		= "";				var src_image		= false;													id_image 		= getInt( image.find("id_image").text() );					name_image 		= image.find("name_image").text();					src_image 		= image.find("src").text();												var event = {};								event.id 			= id;				event.title 		= title;				event.online 		= online;				event.description 	= description;				event.id_image 		= id_image;				event.name_image 	= name_image;				event.src_image 	= src_image;								events.push( event );			}		);		return events;	},		parseTv : function( xmlTv )	{		var items = [];				xmlTv.each(							   			function()			{				var id 				= getInt( $(this).find("id:eq(0)").text() );				var title 			= $(this).find("title").text();				var stream 			= $(this).find("stream").text();				var youtube 		= $(this).find("youtube").text();				var online			= $(this).find("online").text()				var description 	= $(this).find("description").text();												var id_image 		= 0;				var name_image		= "";				var src_image		= false;																	var event = {};								event.id 			= id;				event.title 		= title;				event.online 		= online;				event.stream 		= stream;				event.youtube 		= youtube;				event.description 	= description;				event.id_image 		= id_image;				event.name_image 	= name_image;				event.src_image 	= src_image;								items.push( event );			}		);						return items;	},		parseResults : function( xml )	{				var xmlDays 	= $(xml).find("day");		var days 		= {};				xmlDays.each(					function(i)			{				var day = {};								var name = $(this).attr("name");				var date = $(this).attr("date");				var onair = $(this).attr("onair");				var stamp = getInt( $(this).attr("stamp") ) * 1000;								day.name = name;				day.stamp = stamp;				day.date = date;								var episodes 	= new Array();				var events 		= new Array();												var xmlEpisodes = $(this).find("episode");				var episodes = Agenda.parseEpisodes( xmlEpisodes, onair );												var xmlEvents = $(this).find("event");				var events = Agenda.parseEvents( xmlEvents );								var xmlTv = $(this).find("tvitem");				var tv = Agenda.parseTv( xmlTv );												day.episodes = episodes;				day.events = events;				day.tv = tv;												days[onair] = day;			}		);				Agenda.saveToCache( days );				Agenda.setData( days );	}	}
