$.fn.masthead = function(options) {
	options = $.extend({},{
		'selector':'a.mastheadelem_image',
		'transition_time':200,
		'live_time':5000,
		'transition_easing':'linear',
		'has_controls':true,
		'ctl_bg':"/art/masthead_scroller.png",
		'ctl_bg_start':'-80px 0px',
		'ctl_bg_finish':'-60px 0px',
		'ctl_bg_repeat':'repeat-y',
		'ctl_bg_color':'#e9e9e9',
		'has_pagetracker':false,
		'ctl_classes':'',
		'ctl_playpause_classes':''
	}, options);
	var opt_pagetracker = {};
	if(options.has_pagetracker) {
		opt_pagetracker = pageTracker;
	} else {
		var dummyTrackPageView = function (arg) {
		};
		opt_pagetracker._trackPageview = dummyTrackPageView;
	}
	var obj = $(this);
	var mastheads = obj.children(options.selector);
	var masthead_name = obj.attr('masthead_name');
	if(!masthead_name) {
		masthead_name = 'unknown_masthead';
	}

	var resume_object = null;

	var create_controls = function() {
		var el = $('<div/>');
		var jump_to_frame = function (event) {
			event.preventDefault();
			var controls = $('.masthead-controls');
			var index = controls.children('a.frame-ctl').index(this);
			var target = mastheads.eq(index);
			var target_name = target.attr('masthead_element_name');
			if(!target_name) {
				target_name = 'unknown_target';
			}
			opt_pagetracker._trackPageview('/masthead/'+masthead_name+'/'+target_name+'/navigate_to/');

			obj.children('a').css({zIndex:-9999});
			mastheads.eq(index).css({zIndex:1000});	
			mastheads.stop(true);
		
			controls.children('a.frame-ctl').stop(true).css({backgroundPosition:options.ctl_bg_finish});	
			$(this).css({backgroundPosition:options.ctl_bg_start});
			controls.children('.playPause').text('Play').addClass('paused');	

			resume_object = target;	
		};
		var num = mastheads.length;
		var opt_computed_background = 'url("'+options.ctl_bg+'") scroll '+options.ctl_bg_start+' '+options.ctl_bg_repeat+' '+options.ctl_bg_color;

		var el_css = {
			'display':'none'
		};
		var a_css = {
			'background':opt_computed_background
		};
		el.css(el_css);
		el.addClass('masthead-controls');
		for(var i = 0; i < num; ++i) {
			var a_el = $('<a href="#"><span>'+(i+1)+'</span></a>')
					.css(a_css)
					.addClass('frame-ctl')
					.addClass(options.ctl_classes);
			a_el.click(jump_to_frame);
			el.append(a_el);
		}

		var play_pause = $('<a href="#">Pause</a>')
					.addClass('playPause')
					.addClass(options.ctl_playpause_classes);
		el.prepend(play_pause);
		return el;
	};
	var controls = $('#DOESNOTEXIST');

	if(options.has_controls) {
		controls = create_controls();
		obj.after(controls);
	}

	/*apply css*/
	(function () {
		var obj_css = {
			'position':'relative',
			'width':'100%',
			'overflow':'hidden',
			'height':'163px',
			'cursor':'pointer'
		};

		var masthead_css = {
			'position':'absolute',
			'display':'block',
			'width':'100%',
			'height':'163px',
			'textIndent':'-9999px'
		};

		obj.css(obj_css);
		mastheads.css(masthead_css);
		mastheads.each(function (index) {
			$(this).css({'zIndex':index});
		});
	})();


	var start_loop = function () {
		var on_wait_end = function () {
			obj.show();
			controls.show();
			var next = $(this).next();
			if(next.length < 1) {
				controls.children('a.frame-ctl').css({backgroundPosition:options.ctl_bg_start});
				next = obj.children('a:first-child');
			}

			$(this).css({'zIndex':1000});
			next.css({'zIndex':999});
			var my_control = $('.mastheadelem_image').index(this) + 1;
			if(my_control == mastheads.length) {
				my_control = 0;
			}

			var target_wait = options.live_time;
			var element_wait = next.attr('delay_time');
			if(element_wait) {
				target_wait = +element_wait;
			}

			my_control = controls.children('a.frame-ctl').eq(my_control);	
			controls.children('a.frame-ctl').css({backgroundPosition:options.ctl_bg_finish});
			my_control.css({backgroundPosition:options.ctl_bg_start}); 
			my_control.animate({backgroundPosition:'('+options.ctl_bg_finish+')'}, target_wait, 'linear', function() {
				$(this).css({backgroundPosition:options.ctl_bg_finish});
			});

			$(this).animate({opacity:'0.0'}, options.transition_time, options.transition_easing, function () {
				$(this).css({'zIndex':-9999, 'opacity':'1.0'});
				next.css({'zIndex':1000});
			});
			next.animate({opacity:'1.0'}, target_wait, 'linear', on_wait_end);
			resume_object = next;
		};

		$(this).animate({'opacity':'1.0'},10, 'linear', on_wait_end);
	};

	/* add controls logic */
	if(options.has_controls) {
		var play_or_pause = function (event) {
			event.preventDefault();
			var action = null;
			if($(this).text() == 'Play') {
				action = 'play';	
				$(this).text('Pause').removeClass('paused');
				resume_object.start_loop = start_loop;
				resume_object.start_loop();
			} else {
				action = 'pause';
				$(this).text('Play').addClass('paused');
				obj.children(options.selector)
					.stop()
					.css({'opacity':1.0});

				var animated = controls.children('a.frame-ctl:animated');
				controls.children('a.frame-ctl').stop(true,true).css({backgroundPosition:options.ctl_bg_finish});
				animated.css({backgroundPosition:options.ctl_bg_start});
			}

			var target_name = resume_object.attr('masthead_element_name');
			if(!target_name) {
				target_name = 'unknown_target';
			}				
			opt_pagetracker._trackPageview('/masthead/'+masthead_name+'/'+target_name+'/'+action);
		};
		controls.children('.playPause').click(play_or_pause);
		controls.children('a.frame-ctl').eq(0).css({'backgroundPosition':options.ctl_bg_finish});
	}
	var start_obj = obj.children('a:last-child');
	start_obj.start_loop = start_loop;
	start_obj.start_loop();	
};
