
var DynamicHeader = new Class ({

	init:function(header) {
		this.header_container = header;
		this.currentHeader = 0;
		this.blendfx = null;

		this.parseOptions($('tx_naworkfadeheader_pi1_container').getProperty('nawork:info'));
		this.images = eval($('tx_naworkfadeheader_pi1_pic').getProperty('nawork:images'));

		if(this.headerCount > 1) {
			this.timer = this.nextHeader.bind(this).periodical(this.interval);
		}

		this.nextButton  = $('tx_naworkfadeheader_pi1_control_next');
		this.prevButton  = $('tx_naworkfadeheader_pi1_control_prev');
		this.playButton  = $('tx_naworkfadeheader_pi1_control_play');
		this.pauseButton = $('tx_naworkfadeheader_pi1_control_pause');

		if(this.nextButton) {
			this.nextButton.addEvent('click',this.nextHeaderClick.bindWithEvent(this));
		}

		if(this.prevButton) {
			this.prevButton.addEvent('click',this.lastHeaderClick.bindWithEvent(this));
		}

		if(this.playButton) {
			this.playButton.addEvent('click',this.playHeaderClick.bindWithEvent(this));
		}

		if(this.pauseButton) {
			this.pauseButton.addEvent('click',this.pauseHeaderClick.bindWithEvent(this));
		}
	},

	parseOptions:function(value) {
		var temp = eval(value)[0];

		this.headerCount = temp.numberOfHeader;
		this.interval = temp.interval;
		this.duration = temp.duration;
	},


	nextHeader:function() {
		var i = this.currentHeader;

		if ((this.currentHeader + 1) == this.headerCount) {
			this.currentHeader = 0;

		} else {
			this.currentHeader++;
		}

		var j = this.currentHeader;
		this.headerBlend(i,j);
	},


	lastHeader:function() {
		var i = this.currentHeader;

		if ((this.currentHeader) == 0) {
			this.currentHeader = this.headerCount - 1;

		} else {
			this.currentHeader--;
		}

		var j = this.currentHeader;
		this.headerBlend(i,j);
	},


	nextHeaderGroup:function() {
		var i = this.currentHeader;
		var guid_current = $("tx_naworkfadeheader_pi1_pic_"+i).getProperty("nawork:guid");
		var guid;

		for (k=this.currentHeader; k<this.headerCount; k++) {
			guid = $("tx_naworkfadeheader_pi1_pic_"+k).getProperty("nawork:guid");

			if (guid_current != guid) {
				this.currentHeader = k;
				break;
			}
		}

		if (this.currentHeader == i) {
			this.currentHeader = 0;
		}
		this.headerBlend(i,this.currentHeader);
	},


	lastHeaderGroup:function() {
		var i = this.currentHeader;
		var guid_current = $("tx_naworkfadeheader_pi1_pic_"+i).getProperty("nawork:guid");
		var guid;

			// find previous group
		for (k=this.currentHeader; k>=0; k--) {
			guid = $("tx_naworkfadeheader_pi1_pic_"+k).getProperty("nawork:guid");

			if (guid_current != guid) {
				this.currentHeader = k;
				break;
			}
		}

		if (this.currentHeader == i) {
			guid = $("tx_naworkfadeheader_pi1_pic_"+(this.headerCount - 1)).getProperty("nawork:guid");;
		}

			// find first occurrence of the group
		for (k=0; k<this.headerCount; k++) {

			if ($("tx_naworkfadeheader_pi1_pic_"+k).getProperty("nawork:guid") == guid) {
				this.currentHeader = k;
				break;
			}
		}
		this.headerBlend(i,this.currentHeader);
	},

	playHeaderClick:function(e) {
		e = new Event(e);
		e.stop();
		if(null == this.timer) {
			this.nextHeader();
			this.timer = this.nextHeader.bind(this).periodical(this.interval);
			this.playButton.setStyle("display", "none");
			this.pauseButton.setStyle("display", "");
		}
	},

	pauseHeaderClick:function(e) {
		e = new Event(e);
		e.stop();
		if (this.timer) {
			$clear(this.timer);
			this.timer = null;
			this.pauseButton.setStyle("display", "none");
			this.playButton.setStyle("display", "");
		}

	},

	nextHeaderClick:function(e) {
		e = new Event(e);
		e.stop();
		this.headerStop();
		$clear(this.timer);
		this.timer = null;
		// headerNext();
		this.nextHeaderGroup();
		this.timer = this.nextHeader.bind(this).periodical(this.interval);
		this.playButton.setStyle("display", "none");
		this.pauseButton.setStyle("display", "");
	},


	lastHeaderClick:function(e) {
		e = new Event(e);
		e.stop();
		this.headerStop();
		$clear(this.timer);
		this.timer = null;
		// headerPrev();
		this.lastHeaderGroup();
		this.timer = this.nextHeader.bind(this).periodical(this.interval);
		this.playButton.setStyle("display", "none");
		this.pauseButton.setStyle("display", "");
	},

	headerBlend:function(curHeader,newHeader) {


			// load missing images
		var container = $("tx_naworkfadeheader_pi1_pic_"+newHeader);
		if(container && container.getElement('img') == null){
				// create image
			var img = new Asset.image(
				this.images[newHeader].url,
				{
					'class': 'tx_naworkfadeheader_pi1_img',
					'alt': this.images[newHeader].title,
					'title': this.images[newHeader].title
				}
			);

				// link tag if needed
			if (this.images[newHeader].link){
				var link = new Element('a', {'href':this.images[newHeader].link, 'title':this.images[newHeader].title });
				img.injectInside(link);
				link.injectInside(container);
			} else {
				img.injectInside(container);
			}
		};

			// stop running animations
		this.headerStop();

		var old_header = $("tx_naworkfadeheader_pi1_pic_"+curHeader);
		var new_header = $("tx_naworkfadeheader_pi1_pic_"+newHeader);

			// fade out
		this.fx_fadeout = new Fx.Styles(old_header, {duration: this.duration, wait: true, fps:16 ,transition: Fx.Transitions.linear});
		old_header.setStyles({
			'z-index':199,
			'display':'inline',
			'opacity':1
		});

		this.fx_fadeout.start({"opacity":0}).chain(function(){
			old_header.setStyles({
				'visibility':'hidden',
				'display':'none'
			});
		});

			// fade in
		this.fx_fadein = new Fx.Styles(new_header, {duration: this.duration, wait: true, fps:16 ,transition: Fx.Transitions.linear});
		new_header.setStyles({
			"z-index": 200,
			"opacity": 0,
			"visibility": "hidden",
			'display':'inline'
		});
		this.fx_fadein.start({"opacity":1});


	},

	headerStop:function() {
		if(this.fx_fadein){
			this.fx_fadein.stop();
		}
		if(this.fx_fadeout){
			this.fx_fadeout.stop();
		}
	}
});

window.addEvent('load', function() {

	var header = $('tx_naworkfadeheader_pi1_container');
	header.dynamic_header = new DynamicHeader();
	header.dynamic_header.init.bind( header.dynamic_header, header ).delay(1000);
});
