// MODIFIED 2/06/09
// zvents-mini-custom.js
// $Revision: 38431 $ - $Date: 2008-08-25 13:48:13 -0700 (Mon, 25 Aug 2008) $

// This file implements custom event list widgets.
// Include it after zvents-mini-base.js, or concatenate the two files.

(function( Z ) {
	
	// website base UR and partner id - edit these for your site
	// We can define these outside in the display code so we don't have
	// to change them for every partner.
  if (typeof zventsPartnerId == "undefined") {
 	    if (typeof partner_id != "undefined")
 	    {
 	      zventsPartnerId = partner_id;
 	    }
 	    else
 	    {	  
 	      zventsPartnerId = null;
 	    }

     }
  
  if (typeof zventsBaseUrl == "undefined") {
	    if (typeof base_url != "undefined")
	    {
	      zventsBaseUrl = base_url;
	    }
	    else
	    {	  
	      zventsBaseUrl = 'http://www.zvents.com';
	    }

    }
  Z.partner = zventsPartnerId;
	Z.site = zventsBaseUrl;
	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 ) {
			return [
				'<div class="ZventsEvent">',
					this.images ? this.image( event ) : '',
					'<a class="ZventsEventName" href="',  event.zurl, '">',
						Z.String.truncate( event.name, this.maxTitle || 40 ),
					'</a><br>',
					'<span class="ZventsEventDetails">',
					Z.Date(event.startTime).format(event.date < today + Z.Date.oneDay*7 ? '{Sunday} at {hmm}' :'{M}/{DD} at {hmm}'),
					'<br><a class="ZventsEventVenue" href="', Z.site, event.venue.zurl, '">',
                    event.venue.name, '</a></span><br>',
				'</div>'
			].join('');
		},
//                    event.url ? '<a class="ZventsInfo" href="' + event.url + '">Purchase tickets</a></span> &middot; ' : '',
//                    '<a class="ZventsInfo" href="', Z.site, event.venue.zurl, '">Venue info</a>',
		
		// 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" border="0" ',
						'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 class="ZventsTT"> Loading&#8230;</span>',
				'</div>'
			].join('');
		},
		
		// Render the event time as Noon, Midnight, 2 pm, or 2:30 pm
		// return '' if showTime is false
		time: function( event ) {
		  if( this.showTime === false ) return '';
			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;
	};

  Z.widget.venueList = 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.VenueList, {
        yields: function( venues ) {
          var div = document.getElementById( args.id );
          div.innerHTML = widget.venues( venues );
        }
      }, args );
    }

    return args.id;
  };
})( ZventsMini );
