// zvents-mini-custom.js

// $Revision: 23149 $ - $Date: 2007-11-02 09:59:11 -0700 (Fri, 02 Nov 2007) $



// This file implements custom event list widgets.

// Include it after zvents-mini-base.js, or concatenate the two files.



(function( Z ) {

	

	// Partner ID and website base URL - edit these for your site

	Z.partner = 241;

	Z.site = 'http://calendar.goac.com';

	

	var today = Z.Date.today();

	

	// Default settings and render functions for all widgets

	var base = {

		// Render the event date as tomorrow, or Friday, or 1/31

		date: function( event ) {

			if( this.showDate === false ) return '';

			if( event.date == today ) return this.showDate === true ? 'today' : '';

			if( event.date == today + Z.Date.oneDay ) return 'tomorrow';

			return Z.Date(event.date).format(

				event.date < today + Z.Date.oneDay*7 ? '{Sunday}' :

				'{M}/{DD}' );

		},

		

		// Render the list of events

		events: function( events ) {

			return [

				'<div class="ZventsEventList">',

					events.map(this.event,this).join(''),

				'</div>'

			].join('');

		},

		

		// Render a single event

		event: function( event ) {

			var date = this.date( event );

			if( date ) {

				date = [

					'<span class="ZventsEventDate">',

						this.date( event ),

					'</span>',

					' '

				].join('');

			}

			

			return [

				'<div class="ZventsEvent">',

					this.images ? this.image( event ) : '',

					'<span class="ZventsEventTime">',

						this.time( event ),

					'</span>',

					' ',

					date,

					'<a class="ZventsEventName" href="',  event.zurl, '">',

						Z.String.truncate( event.name, this.maxTitle || 40 ),

					'</a>',

				'</div>'

			].join('');

		},

		

		// Render the image(s) for an event

		image: function( event ) {

			var image = event.images[0];

			return ! image ? '' : [

				'<a class="ZventsImageLink" href="', event.zurl, '">',

					'<img class="ZventsImage" alt="Image" style="color:#A3995E;" border="3" ',

						'src="', Z.imgThumb(image.url), '" ',

						//'width="', image.width, '" height="', image.height, '" ',

					'/>',

				'</a>'

			].join('');

		},

		

		// Render the "Loading" indicator

		loading: function() {

			return [

				'<div class="ZventsLoading">',

					'<img src="http://images.zvents.com/images/spinner16.gif" />',

					'<span> Loading events&#8230;</span>',

				'</div>'

			].join('');

		},

		

		// Render the event time as Noon, Midnight, 2 pm, or 2:30 pm

		time: function( event ) {

			var start = Z.Date(event.startTime), date = start.date;

			var hours = date.getUTCHours(), minutes = date.getUTCMinutes();

			return start.format(

				minutes ? '{h}:{mm} {am}' :

				{ 0:'Midnight', 12:'Noon' }[hours] || '{h} {am}'

			);

		}

	};

	

	function Widget( args ) {

		Z.Object.update( this, base, args /*(temp:*/, args.render/*:temp)*/ );

	}

	

	// The base event list widget - custom widgets extend this one

	var idNext = 1;

	Z.widget.eventList = function( args ) {

		// Combine the settings, write the container and spinner

		var widget = new Widget( args );

		if( ! args.id ) {

			args.id = 'ZventsWidget' + idNext++;

			document.write( [

				'<div id="', args.id, '">',

					widget.loading(),

				'</div>'

			].join('') );

		}

		

		if( args.load ) {

			// Call the core event list function with our partner ID

			Z.call( Z.EventList, {

				yields: function( events ) {

					// The event data is ready, sort it if requested

					if( widget.sort !== false )

						events.sort( 'starttime' );

					// Now render and display it

					var div = document.getElementById( args.id );

					div.innerHTML = widget.events( events );

				}

			}, args );

		}

		

		return args.id;

	};

	

	// A simple event list (the same as the base list in this demo)

	//Z.widget.customList1 = Z.extend( Z.widget.eventList, {

	//	// Any settings here would override the base Z.widget.eventList settings

	//});

	

	// Another way to code the same widget, allowing setup code before the base call

	//Z.widget.customList2 = function( args ) {

	//	Z.call( Z.widget.eventList, {

	//	}, args );

	//};

	

//-------------------------------------------------------------------------------------------------

// Simple tab clicker

//-------------------------------------------------------------------------------------------------

// <ul>

//     <li><a id="tabOne" onclick="tabber.click(this);">One</a></li>

//     <li><a id="tabTwo" onclick="tabber.click(this);">Two</a></li>

// </ul>

// <div id="divOne">

//     Tab One Content

// </div>

// <div id="divTwo">

//     Tab Two Content

// </div>

//-------------------------------------------------------------------------------------------------



tabber = {



	// Click a tab: give it the 'active' class and show its matching DIV

	click: function( clicked ) {

		var ul = clicked.parentNode.parentNode;  // A --> LI --> UL

		var tabs = ul.getElementsByTagName('a');

		

		for( i = 0;  i < tabs.length;  ++i ) {

			var a = tabs[i], on = ( a == clicked );

			a.className = ( on ? 'active' : '' );

			tabber.show( a.id.replace(/^tab/,'div'), on );

		}

	},

	

	// Special clicker for Zvents Today/Tomorrow/Search tabs:

	// hide or show footer, and load tomorrow's events on demand

	zclick: function( clicked, when ) {

		tabber.click( clicked );

		tabber.show( 'zventsFooter', when );

		

		if( ZventsTomorrowID && when == 'Tomorrow' ) {

			Z.widget.popular({

				id: ZventsTomorrowID,

				load: { when: when }

			});

			ZventsTomorrowID = null;

		}

	},

	

	// Show or hide a block level element

	show: function( id, show ) {

		document.getElementById(id).style.display =

			show ? 'block' : 'none';

	}

};



//-------------------------------------------------------------------------------------------------



})( ZventsMini );

