﻿var PressQuotes = Class.create();
PressQuotes.prototype = {
	container: null,
	parentDimensions: null,
	quoteTemplate1: null,
	quoteTemplate2: null,
	activeTemplate: 1,
	quotes: [],
	cQIndex: 0,
	
	initialize: function() {
		if ( arguments[0] ) this.container = p$(arguments[0]);
		if ( arguments[1] ) this.quotes = arguments[1];
		else return;
		
		this.quoteTemplate1 = document.getElementsByClassName('quoteCont', this.container)[0];
		Element.setStyle(this.quoteTemplate1, {display: 'none'});
		this.prentDimensions = Element.getDimensions(this.quoteTemplate1.parentNode);
		
		Event.observe(window, 'load', function() {
			this.loadQuoteToTemplate(this.quoteTemplate1, this.getNextQuote(), true);
		
			if ( this.quotes.length > 1 ) {
				this.duplicateTemplate(this.quoteTemplate1);
				this.loadQuoteToTemplate(this.quoteTemplate2, this.getNextQuote(), false);
				setTimeout(this.toggleQuote.bind(this), 6000);
			}
		}.bind(this));
	},
	
	duplicateTemplate: function(node) {
		var parentNode = node.parentNode;
		this.quoteTemplate2 = node.cloneNode(true);
		Element.setStyle(this.quoteTemplate2, {display: 'none'});
		parentNode.appendChild(this.quoteTemplate2);
	},
	
	updateTemplate: function(obj) {
		if ( this.quotes.length>2 )
			this.loadQuoteToTemplate( (this.activeTemplate==1)?this.quoteTemplate2:this.quoteTemplate1, this.getNextQuote(), false);
	},
	
	toggleQuote: function() {
		if ( this.activeTemplate==1 ) {
			this.activeTemplate=2;
			Effect.Fade(this.quoteTemplate1, { duration: 0.5, transition: Effect.Transitions.linear, afterFinish: this.updateTemplate.bind(this) });
			Effect.Appear(this.quoteTemplate2, {delay: 0.7});
		} else {
			this.activeTemplate=1;
			Effect.Fade(this.quoteTemplate2, { duration: 0.5, transition: Effect.Transitions.linear, afterFinish: this.updateTemplate.bind(this) });
			Effect.Appear(this.quoteTemplate1, {delay: 0.7});			
		}
		
		setTimeout(this.toggleQuote.bind(this), 6000);
	},
	
	loadQuoteToTemplate: function(template, quoteobj, firstquote) {
		var numrank = document.getElementsByClassName('numrank',template)[0];
		var iconrank = document.getElementsByClassName('iconrank',template)[0];
		var quote = document.getElementsByClassName('quote',template)[0];
		var quotelogo = document.getElementsByClassName('quotelogo',template)[0];
		
		if ( quoteobj.ranktype==0 ) {
			if ( quoteobj.textrank.length>0 )
				numrank.innerHTML = quoteobj.textrank;
		} else {
			while (iconrank.childNodes[0]) iconrank.removeChild(iconrank.childNodes[0]);
			if ( quoteobj.iconext.length > 0 && quoteobj.iconrank > 0 ) {
				var iImg = null;
				for ( i=1; i<=quoteobj.iconrank; i++ ) {
					iImg = document.createElement('img');
					iImg.src = '/images/images/pr/icons/'+quoteobj.id+'.'+quoteobj.iconext;
					iconrank.appendChild(iImg);
				}
			}
		}
		
		quote.innerHTML = quoteobj.quote;
		
		if ( quoteobj.logoext.length>0 ) 
			quotelogo.src = '/images/images/pr/logo/'+quoteobj.id+'.'+quoteobj.logoext;
		
		Element.setStyle(numrank, {display: (quoteobj.ranktype==0 && quoteobj.textrank.length>0)?'block':'none'});
		Element.setStyle(iconrank, {display: (quoteobj.ranktype==1 && (quoteobj.iconext.length>0 && quoteobj.iconrank>0))?'block':'none'});		
		Element.setStyle(quote, {display: (quoteobj.quote.length>0)?'block':'none'});
		Element.setStyle(quotelogo, {display: (quoteobj.logoext.length>0)?'block':'none'});
		
		setTimeout(this.verticalAlignQuote.bind(this, template, firstquote), 300);
	},
	
	getNextQuote: function() {
		if ( this.cQIndex > (this.quotes.length-1) ) this.cQIndex = 0;
		return this.quotes[this.cQIndex++];
	},
	
	verticalAlignQuote: function(elm, firstquote) {
		if ( !elm ) return;
		var objDim = Element.getDimensions(elm);
		
		var topOffset = parseInt((this.prentDimensions.height-objDim.height)/2);
		var leftOffset = parseInt((this.prentDimensions.width-objDim.width)/2);
		Element.setStyle(elm, {top: topOffset+'px'});
		Element.setStyle(elm, {left: leftOffset+'px'});
		
		if ( firstquote )
			Element.setStyle(this.quoteTemplate1, {display: 'block'});
	}
}