// MN Viewer 
var Mn_Viewer = new Class( {
	options: {
		containerID:'mioEmbeder',
		effect:'fader',
		pause:3000,
		enablecmds:false,
		autoscroll:false,
		contenttag:'ul'		
	},
	live : {
		container:null,
		main_content:null,
		item_contentLi:null,		
		item_contentD:null,
		commands:null,
		currentIndex:0,
		prevIndex:null,
		messagesL:null,
		timer : null,
		width : 0,
		height: 0,
		effetto : null
	},
	
	initialize: function(options) {
		if(!options.containerID) { alert('errore generale: no containerID'); return;}
		if(!options.effect) { alert('errore generale: no effect'); return;}
		if(!options.contenttag) { alert('errore generale: no contenttag'); return;}
		
		this.options.containerID = options.containerID;		
		this.options.effect = options.effect;
		this.options.pause = options.pause;		
		this.options.enablecmds = options.enablecmds;
		this.options.autoscroll = options.autoscroll;
		this.options.contenttag = options.contenttag;		

		this.live.container = $(this.options.containerID);
		if(!this.live.container) {alert('Errore - non trovo la sorgente.'); return; }
		if(this.options.enablecmds) {
			this.live.commands = this.live.container.getElement('.jscmd');
		}
		//trova item contenitore:
		var istanza = this;
		var elementi = this.live.container.getElements(this.options.contenttag);
		
		
		elementi.each(function(el) {
							  if(el.get('class')!='jscmd') {
							  	istanza.live.main_content = el;
								return;
							  }
	    });
		
		if(!this.live.main_content) { alert('errore - non trovo contenitore elementi.'); return; }
		elementi = null;
		
		
		
		if(this.options.contenttag=='ul') {
			this.initLI();
		} else {
			this.initDL();
			this.initLI();
		}
		
		


	},
	
	initLI : function () {
		var istanza = this;
//		alert('vengo chiamato...');
		this.live.item_contentLi = this.live.main_content.getElements('li');
//		alert('ho contenuti?' +  this.live.item_contentLi + ' . numer:' + this.live.item_contentLi.length);
		this.live.currentIndex = 0;
		this.live.prevIndex = null;
		this.live.messagesL = this.live.item_contentLi.length;			
		if(this.live.item_contentLi!=null ) {
			if(this.live.item_contentLi.length>0)
				this.startAnims();
		}
	},
	initDL : function () {
			var istanza = this;
			this.live.item_contentD = new Array();
			this.live.item_contentD = new Array();
			var elementi = this.live.main_content.getElements('[id^=item_]');
			var currentID = "";
			var currentElement = new Array();
			elementi.each( function (el ) {
				if(!el.get('id')) return;
				var itemid = el.get('id').toString();
				itemid = itemid.substring(itemid.lastIndexOf('_')+1);
				if(currentID!=itemid) {
					if(currentElement.length>0)
						istanza.live.item_contentD.push( currentElement );
					currentElement = new Array();
					currentID = itemid;
				}
				currentElement.push(el);	
				
			});
			
			if(currentElement.length>0) {
				this.live.item_contentD.push( currentElement );
				currentElement=null;
			}
			// ho tutti gli elementi...
			var ulReplacer = new Element('ul') ;
			for(var i=0; i<this.live.item_contentD.length; i ++) {
				var liReplacer = new Element('li');
				liReplacer.setStyles( { 'display':'block', 'list-style':'none', 'clear':'both' } ) ;
				for(var j=0; j<this.live.item_contentD[i].length;j++) {
					var span = new Element('span');
					span.set('id', this.live.item_contentD[i][j].get('id'));
					span.addClass(this.live.item_contentD[i][j].get('class'));
					span.set('html',this.live.item_contentD[i][j].get('html') );
					span.setStyles(this.live.item_contentD[i][j].getStyles) ;
					liReplacer.adopt(span);
				}
				ulReplacer.adopt(liReplacer);
			}
			ulReplacer.set('id', this.live.main_content.get('id') ) ;
			ulReplacer.addClass(this.live.main_content.get('class') ) ;	
			ulReplacer.addClass('mnviewerTrasform');			
			ulReplacer.setStyles(this.live.main_content.getStyles) ;					
			this.live.main_content = ulReplacer.replaces(this.live.main_content);
			//inizializzato l'array degli elementi nascondo tutto.
			/*
			this.live.currentIndex = 0;
			this.live.prevIndex = null;
			this.live.messagesL = this.live.item_contentD.length;			
			this.startAnims();
			*/
	},
	
	
	startAnims : function () {
		switch(this.options.effect) {
			case 'fader':
				//if(this.contenttag=='ul') {
				this.live.main_content.setStyle('overflow','hidden');
					this.live.item_contentLi.each(function (el,index) { 
												 el.setStyle('opacity',0);
												 el.setStyle('display','none'); 
									});					
				this.startFader(this.options.autoscroll, this.options.pause);
				break;
			case 'oriscroll':
				this.startOScroll(this.options.autoscroll, this.options.pause);
				break;

			case 'vertscroll':
				this.startVScroll(this.options.autoscroll, this.options.pause);
				break;
				
		}
	},
		
		
	startFader : function (auto, time ) {
		if(auto) {
			var istanza = this;
			this.live.timer = this.fadeAuto.periodical(time,istanza);	
		} else {
			this.fadeIn_Item(0,'asc');
			if(this.live.commands==null) return;
			var prev = this.live.commands.getElement('li.prev');
			var next = this.live.commands.getElement('li.next');	
			var istanza = this;
			next.addEvent('click', function(e) {
							istanza.live.currentIndex++;
							istanza.fadeIn_Item(istanza.live.currentIndex,'asc');
											
						});
			prev.addEvent('click', function(e) {
							istanza.live.currentIndex--;
							istanza.fadeIn_Item(istanza.live.currentIndex,'desc');							
						});
		}
		
		
	},
  
	startVScroll : function (auto, time ) {
		//impostazioni globali:  container
		var size = this.live.container.getSize();

		var w = 0;
		var h = 0;
		var top = 0;

// verticale
		h = this.live.main_content.getCoordinates().height;
		top = this.live.main_content.getPosition();
		var contenitoreULS = new Element('div');
		var offseto = this.live.main_content.getPosition(this.live.container);
		var startID = this.live.main_content.get('id') ;
		this.live.main_content.set('id', startID + '_original') ;
		contenitoreULS.set('id', startID);
		contenitoreULS.set('class', this.live.main_content.get('class'));
		contenitoreULS.setStyles(this.live.main_content.getStyles) ;					
		contenitoreULS.injectBefore( this.live.main_content ) ;
		contenitoreULS.setStyles( { 'margin':'0', 'padding':'0',
								    'position':'relative',
									'overflow':'hidden',
									'display':'block'  } );
		this.live.main_content.setStyles( { 'margin':'0', 'padding':'0'} );

		
		contenitoreULS.adopt(this.live.main_content);
		this.live.item_contentLi.each(function(li,index) {
//verticale											   
				li.setStyles( {'margin':0,'padding':0,'list-style':'none', 'display':'block','clear':'both' } );
// verticale
				w += li.getCoordinates().width;
		});
		//get start offset.
		this.live.main_content.setStyles({
				position: 'absolute',
				top:offseto.y,
				left: offseto.x,
				width: w,
				height: h
		});	
		this.live.main_content.setStyles({
				left:0,
				top:0
		});

		this.live.effetto = new Fx.Morph(this.live.main_content,
		{duration:this.options.pause,onComplete:function() {
								var i = (this.live.currentIndex==0)?this.live.item_contentLi.length:this.live.currentIndex;
								this.live.item_contentLi[i-1].injectInside(this.live.main_content);
								this.live.main_content.setStyles({
										left:0,
										top:0
								});
		}.bind(this)});
		this.live.currentIndex = 0;
		this.scrollNext();		

/*
		if(auto) {
			alert('non implementato...');
			return;
		} 
		//manuale:
		alert('dovrei avviare il discorso..');
*/		
	},	
	startOScroll : function (auto, time ) {
		//impostazioni globali:  container
		var size = this.live.container.getSize();

		/*this.live.container.setStyles ( {
									   'width':size.x,
									   'height':size.y,
									   'display':'block',
									   'position':'relative',
									   'overflow':'hidden'
									   });
		
		*/
		var w = 0;
		var h = 0;
		var top = 0;

// verticale
		h = this.live.main_content.getCoordinates().height;
//orizzontale
//		w = this.live.main_content.getCoordinates().width;
		top = this.live.main_content.getPosition();
		var contenitoreULS = new Element('div');
		var offseto = this.live.main_content.getPosition(this.live.container);
		var startID = this.live.main_content.get('id') ;
		this.live.main_content.set('id', startID + '_original') ;
		contenitoreULS.set('id', startID);
		contenitoreULS.set('class', this.live.main_content.get('class'));
		contenitoreULS.setStyles(this.live.main_content.getStyles) ;					
		contenitoreULS.injectBefore( this.live.main_content ) ;
		contenitoreULS.setStyles( { 'margin':'0', 'padding':'0',
								    'position':'relative',
									'overflow':'hidden',
									'display':'block'  } );
		this.live.main_content.setStyles( { 'margin':'0', 'padding':'0' } );

		
		contenitoreULS.adopt(this.live.main_content);
		this.live.item_contentLi.each(function(li,index) {
//verticale											   
				li.setStyles( {'margin':0,'padding':0,'list-style':'none', 'display':'block','clear':'both' } );
//orizzonatale				
//				li.setStyles( {'margin':0,'padding':0,'list-style':'none', 'display':'block','float':'left' } );				
// verticale
				w += li.getCoordinates().width;
//orizzontale
//				h += li.getCoordinates().height;				
		});
		//get start offset.
		this.live.main_content.setStyles({
				position: 'absolute',
				top:offseto.y,
				left: offseto.x,
				width: w,
				height: h
		});	
		this.live.main_content.setStyles({
				left:0,
				top:0
		});

		this.live.effetto = new Fx.Morph(this.live.main_content,
		{duration:this.options.pause,onComplete:function() {
								var i = (this.live.currentIndex==0)?this.live.item_contentLi.length:this.live.currentIndex;
								if(!this.live.item_contentLi[i-1]) return;
								this.live.item_contentLi[i-1].injectInside(this.live.main_content);
								this.live.main_content.setStyles({
										left:0,
										top:0
								});
		}.bind(this)});
		this.live.currentIndex = 0;
		this.scrollNext();		

		if(auto) {
			alert('non implementato...');
			return;
		} 
		//manuale:
		alert('dovrei avviare il discorso..');
	},	
	scrollNext: function() {
			this.live.currentIndex++;
			if (this.live.currentIndex >= this.live.item_contentLi.length) this.live.currentIndex = 0;
			var pos = this.live.item_contentLi[this.live.currentIndex];
			//alert('pos: ' + pos.offsetTop + ',' + pos.offsetLeft);
			this.live.effetto.start({
					top: -pos.offsetTop,
					left: -pos.offsetLeft
			});
			this.scrollNext.bind(this).delay(this.options.pause+500);
	},	
	
	fadeAuto : function () {
		this.live.currentIndex++;
		this.fadeIn_Item(this.live.currentIndex,'asc');
	},
	
	fadeIn_Item : function (index,order) {
		if(order=='asc') {
			if(index>=this.live.messagesL)
				index = 0;
			if(( index-1) >=0) {
				this.fadeOut_Item(index-1);	
			} else {
				this.fadeOut_Item(this.live.messagesL-1);	
			}
		} else {
			if(index<0) 
				index = this.live.messagesL-1 ;
			if(( index+1) >=this.live.messagesL) {
				this.fadeOut_Item(0);	
			} else {
				this.fadeOut_Item(index+1);	
			}
		}		
		
		/*if(this.options.contenttag=='dl') {
			for(var j=0; j<this.live.item_contentD[index].length; j++) {
				var tw = new Fx.Tween( this.live.item_contentD[index][j], {link:'chain'} );
				tw.start('opacity',1).chain( function() {this.set('display','block') } ) ;
				this.live.item_contentD[index][j].tween('opacity',1);
				this.live.item_contentD[index][j].setStyle('display','block');
			}
			this.live.currentIndex=index;
		} else {*/
			if(!this.live.item_contentLi[index]) return;
			var tw = new Fx.Tween( this.live.item_contentLi[index], {link:'chain'} );
			tw.start('opacity',1).chain( function() {this.set('display','block') } ) ;
			if(!this.live.item_contentLi[index]) return;
			this.live.item_contentLi[index].tween('opacity',1);
			this.live.item_contentLi[index].setStyle('display','block');
			this.live.currentIndex=index;			
		//}
	},
	fadeOut_Item : function (index) {
		/*if(this.options.contenttag=='dl') {
			for(var j=0; j<this.live.item_contentD[index].length; j++) {
				this.live.item_contentD[index][j].tween('opacity',0);
				this.live.item_contentD[index][j].setStyle('display','none');
			}
		} else {*/
			if(!this.live.item_contentLi[index]) return;
			this.live.item_contentLi[index].tween('opacity',0);
			this.live.item_contentLi[index].setStyle('display','none');
		//}
	}
   });
Mn_Viewer.implement(new Options, new Events);			

