/**
 * @author mauro doglio
 */
/*inizio common*/
Element.implement({
		
	startWaiter: function() {
		size = this.getSize();		
		big = (size.y > 50 && size.x > 50);
		if(big){
			
			this.spin({
				'img' : {
					'class' : 'spinner-big'
				}
			});
		}else{
			this.spin({
				'img' : {
					'class' : 'spinner-small'
				}
			});
		}
		
	},
	
	stopWaiter: function() {
		this.unspin();		
	}
});

var ModernBrowserPanel = new Class({
    initialize: function($cont) {
		this.container = $('modern_browser');
		this.closeButton = $('modern_browser_button');
		this.closeButton.addEvent('click',this._close.bind(this));
		this.removeFx = new Fx.Reveal(this.container, {duration: 400, mode: 'vertical'});
	},
	
	_close: function() {
		alert("Ricordati di aggiornare il tuo browser: una navigazione piu' sicura, una maggiore facilita' d'uso e migliori prestazioni sono solo alcuni dei vantaggi.");
		this.removeFx.dissolve();
	}
});
// JavaScript Document
window.addEvent('domready', function() {
	if($chk($('modern_browser'))) {
		var mbHandler = new ModernBrowserPanel();
	}
});

textarea = new Object();
textarea.expand = function(input){
	input.style.height = 0;
	input.style.height = (input.scrollHeight) + 'px';
};

/*var last=false; 
function waiter(obj){

    last = new Waiter(obj);
    last.start();
}

function killwaiter(){
	if (last) {
		last.stop(); //hide after 2 sec
		last=false;
	}
}*/

/*
 * usata nelle add e remove di cazoo + e -
 */
function updateCart(qty, prod){ 
    var requestParams = {
        url: '/be/main.php?page=update_cart',       
        onRequest: function(){},
        onComplete: function(ret){
			if ($('quick_add')) {
				$('quick_add').set('value', '');
				$('costo_cont').set('html', '&euro; ' + ret.totPrezzo);
				$$('tr#row_' + ret.id_prodotto + ' td.costo').set('html', '&euro; ' + (ret.quantita * ret.prezzo) + ',00');
				killwaiter();
			}
            $$('.n_oggt strong')[0].set('html', ret.tot);
            $$('.costo strong')[0].set('html', ret.totPrezzo + ' &euro');
        }
    };
    var postVars = {
        id_prodotto: prod,
        qty: qty		
    };
    req = new Request.JSON(requestParams);
	req.post(postVars);
}


var CommentManager = new Class({
	Implements: [Options],
	options: {
		snippet: '',
		idutente: false,
		start : '-1',
		end : '-1'
	},
	initialize: function(url, container, iditem, tipoitem, options){
		this.snippet = '<div class="videt_commento" id="{ID}"><div class="videt_commento_img"><a href="{URLPROFILO}"><img src="{IDUNICO}" alt="avatar {NICKNAME}" /></a></div><div class="videt_commento_img_menu">{ELIMINA}</div><p class="p1"><a href="{URLPROFILO}">{NICKNAME}</a>, <span class="grigio9">{DATA}</span></p><p>{TESTO}</p></div>';
		this.url = url;
		this.container = document.id(container);
		this.iditem = iditem;
		this.tipoitem = tipoitem;
		this.setOptions(options);
		this.lastCommentId = false;
		this.firstCommentTimeStamp = false;
		this.newCommentFound = false;
		this.lastElements = [];
		this.notifyRequest = false;
		this.periodicalActive = false;
		this.oldMessageLink = false;
		this.container.startWaiter();
		this.notifyRequest  = new Request({
				'url': this.url,
				'onSuccess': this.notifyNewComments.bind(this),
				'initialDelay' : 60000,
				'delay' : 60000,
				'limit' : 120000		
		});
		this.loadComments();
		window.addEvent('mousewheel',function(e){
			if(!this.newCommentFound){
				this.activateTimer();
			}
		}.bind(this));
		
		
		
	},
	activateTimer : function(){
		if(this.periodicalActive === false && $defined(this.notifyRequest)){
			
			this.notifyRequest.startTimer({
				'page':'lookForCommentUpdates',
				'iditem': this.iditem,
				'tipoitem' :  this.tipoitem,
				'start' : this.firstCommentTimeStamp  
			});
			this.periodicalActive = true;
		}
	},
	
	
	notifyNewComments: function(resp){
		if (resp != 'N') {
			this.nuoviCommentiBtn = new Element('a',{
				'class' : 'nuoviCommenti',
				'text' : 'Visualizza nuovi commenti',
				'style' : 'font-weight : bold;'
			});
			this.newCommentFound = true;
			
			this.nuoviCommentiBtn.addEvent('click',function(e){
				e= new Event(e);
				e.preventDefault();
				this.nuoviCommentiBtn.startWaiter();
				this.loadComments();
				
			}.bind(this));
			this.container.grab(this.nuoviCommentiBtn,'top');
		}
		this.notifyRequest.stopTimer();
		this.periodicalActive = false;
	},
	
	
	notifyOldMessages : function(start){
		this.oldMessageLink = new Element('a',{
				'text' : 'Visualizza commenti precedenti',
				'style' : 'font-weight : bold'
		});
			
		
		this.container.grab(this.oldMessageLink,'bottom');
		this.oldMessageLink.setStyle('display','block');
		this.oldMessageLink.removeEvents();
		
		this.oldMessageLink.addEvent('click',function(e){
			e= new Event(e);
			e.preventDefault();
			this.oldMessageLink.setStyle('display','none');
			this.retrieveOldMessages(start);
			
		}.bind(this));
		
	},
	retrieveOldMessages : function(start){
		
		new Request.JSON({
			'url': this.url,
			'onSuccess': function(elencoCommenti){
				if (elencoCommenti.length > 0) {
					
					
					
					elencoCommenti.each(function(elem, index){
						if(index < (elencoCommenti.length-1) || elencoCommenti.length <= 10){
							el = new Element('div');
							if(elem.IDUNICO == ''){
								elem.IDUNICO = '/be/public/inc/img/avatar_man_small.jpg';
							}
							if(elem.NICKNAME == '-'){
								elem.NICKNAME = 'Utente Anonimo';
							}
							
							el.set('html', this.snippet.substitute(elem));
							this.oldMessageLink.grab(el, 'before');
						}
						
					}, this);
					if(elencoCommenti.length > 10){
						this.notifyOldMessages(elencoCommenti[(elencoCommenti.length - 1)].TIMESTAMP)
					}
					this.firstCommentTimeStamp = elencoCommenti[0].TIMESTAMP;
					
					$$('.elimina_' + this.options.idutente).each(function(el){
						el.removeEvents();
						el.addEvent('click', function(e){
							e = new Event(e);
							e.preventDefault();
							el = document.id(e.target)
							el.startWaiter();
							
							commento = el.getParent('div.videt_commento');
							
							
							new Request({
								url: this.url,
								method: 'post',
								onFailure: function(){
									
								},
								onSuccess: function(resp){
									
									el.stopWaiter();
									if (resp != '-1') {
										commento.nix(true);
									}
									
								}.bind(this)
							}).send('page=eliminaCommento&tipoitem=' + this.tipoitem + '&id=' + commento.get('id'));
						}.bind(this))
						
					}, this);
				};
				
				this.container.stopWaiter();
			}.bind(this),
			'onFailure' : function(){
				
			}
		}).send('page=getListCommenti&iditem=' + this.iditem + '&tipoitem=' + this.tipoitem + '&start=' + start);
		
		
		
		
		
		
		
	},
	
	loadComments: function(){
		
		new Request.JSON({
			'url': this.url,
			'onSuccess': function(elencoCommenti){
				this.container.stopWaiter();
				if (elencoCommenti.length > 0) {
					this.container.empty();
					
					
					elencoCommenti.each(function(elem, index){
						if(index<((elencoCommenti.length)-1)|| elencoCommenti.length <= 10){
							el = new Element('div');
							if(elem.IDUNICO == ''){
								elem.IDUNICO = '/be/public/inc/img/avatar_man_small.jpg';
							}
							if(elem.NICKNAME == '-'){
								elem.NICKNAME = 'Utente Anonimo';
							}
							el.set('html', this.snippet.substitute(elem));
							this.container.grab(el, 'bottom');
						}
						
					}, this);
					
					if(elencoCommenti.length > 10){
						this.notifyOldMessages(elencoCommenti[(elencoCommenti.length)-1].TIMESTAMP);
						
					}else{
						
					}
					
					//this.lastCommentId = last.ID;
					this.lastCommentId = elencoCommenti[(elencoCommenti.length)-1].ID
					this.firstCommentTimeStamp = elencoCommenti[0].TIMESTAMP;
					this.activateTimer();
					
					$$('.elimina_' + this.options.idutente).each(function(el){
					
						el.addEvent('click', function(e){
							e = new Event(e);
							e.preventDefault();
							el = document.id(e.target)
							el.startWaiter();
							
							commento = el.getParent('div.videt_commento');
							
							
							new Request({
								url: this.url,
								method: 'post',
								onFailure: function(){
									
								},
								onSuccess: function(resp){
									
									el.stopWaiter();
									if (resp != '-1') {
										commento.nix(true);
									}
									
								}.bind(this)
							}).send('page=eliminaCommento&tipoitem=' + this.tipoitem + '&id=' + commento.get('id'));
						}.bind(this))
						
					}, this);
				}
				
				
				
				
			}.bind(this),
			'onFailure' : function(){
				
			}.bind(this)
		}).send('page=getListCommenti&iditem=' + this.iditem + '&tipoitem=' + this.tipoitem );
	}
	
});


function aggiornaCommenti(url,container, iditem,tipoitem,idutente,start,end){
		container = ($type(container) == 'element' ? container : document.id(container));
		
		commentiSnippet = '<div class="videt_commento" id="{ID}"><div class="videt_commento_img"><img src="{IDUNICO}" alt="immagine" /></div><div class="videt_commento_img_menu">{ELIMINA}</div><p class="p1">{NICKNAME}, <span class="grigio9">{DATA}</span></p><p>{TESTO}</p></div>';
		new Request.JSON({
			'url': url,
			'onSuccess' : function(elencoCommenti){
				if(elencoCommenti.length > 0){
					container.empty();
				}
				elencoCommenti.each(function(elem){
					
					el = new Element('div');
					
					el.set('html',commentiSnippet.substitute(elem));
					
					container.grab(el,'bottom');
					
				});
				$$('.elimina_'+idutente).each(function(el){
					el.addEvent('click',function(e){
						e = new Event(e);
						e.stop();
						document.id(e.target).startWaiter();
						commento = el.getParent('div.videt_commento');
						new Request({
							url : url,
							method : 'post',
							onSuccess : function(resp){
								document.id(e.target).stopWaiter();
								if(resp != '-1'){
									commento.nix(true);
								}
								
							}
						}).send('page=eliminaCommento&tipoitem='+tipoitem+'&id='+commento.get('id').replace('commento',''));	
					})
					
				});
			}
		}).send('page=getListCommenti&iditem='+iditem+'&tipoitem='+tipoitem+'&start='+start+'&end='+end);
		
}


function getListCommenti(url, container,iditem,tipoitem){
	container = ($type(container) == 'element' ? container : document.id(container));
	 commentiSnippet = '<div class="videt_commento" id="{ID}"><div class="videt_commento_img"><img src="{IDUNICO}" alt="immagine" /></div><div class="videt_commento_img_menu">{ELIMINA}</div><p class="p1">{NICKNAME}, <span class="grigio9">{DATA}</span></p><p>{TESTO}</p></div>';
	//commentiSnippet = '<div id="post_id_post_{ID}" class="wallkit_post" style=""><div class="wallkit_profilepic"><img src="{IDUNICO}" class="img"></div><div class="wallkit_postcontent"><h4>{NICKNAME}<span class="wall_time">{DATA}</span></h4><div>{TESTO}</div></div></div>';
	 new Request.JSON({
			'url': url,
			'onSuccess' : function(elencoCommenti){
				if(elencoCommenti.length > 0){
					container.empty();
				}
				elencoCommenti.each(function(elem){
					
					el = new Element('div');
					
					el.set('html',commentiSnippet.substitute(elem));
					
					container.grab(el,'bottom');
					
				});
			}
		}).send('page=getListCommenti&iditem='+iditem+'&tipoitem='+tipoitem);

}

function number_format (number, decimals, dec_point, thousands_sep) {
    
    var n = number, prec = decimals;

    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };

    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}

function inviteFbFriend(){
	dialog = new FB.UI.FBMLPopupDialog('Invita i tuoi amici su Scuolazoo!', '');
	fbml = 	"<fb:fbml>" +
	  		"<fb:request-form style=\"width:800px; height:650px;\" action=\"" + document.location.href + "\" method=\"POST\" invite=\"true\" type=\"ScuolaZoo\" " +
    		"content=\"Ciao, ti invito a unirti a ScuolaZoo! <fb:req-choice url='http://www.scuolazoo.com' label='Visita ScuolaZoo!' />\">" +
    		"<fb:multi-friend-selector showborder=\"false\" actiontext=\"Seleziona gli amici che vuoi invitare\" rows=\"5\" bypass=\"cancel\" />" +
    		"</fb:request-form>" +
    		"</fb:fbml>";
	dialog.setFBMLContent(fbml);
	dialog.setContentWidth(800);
	dialog.setContentHeight(650);
	dialog.show();
}

/*fine common*/

/*confirm registration window*/
var ConfirmRegistrationWindow = new Class({
    Implements: Options,
    
    options: {
        anchors: false,
        className: 'modal_shadow',
        onShow: $empty,
        onRegistrationSuccess: $empty
    },
    
    url: false,
    
    initialize: function(url, options){
        this.setOptions(options);
        this.url = url;		
		this.modal = new StickyWin.Modal({
			relativeTo: $('menu2'),
			showNow: true,
			className: this.options.className,
            closeClassName : 'chiudi_lightbox',			
			destroyOnClose: true,
			modalOptions: {
                modalStyle: {			
                    'background-color': '#000',
                    'opacity': 0.3
                },
				hideOnClick: false,
				closeOnClickOut : false		
            },
			onClose: function() {
				try {
					$$('object').each(function(el){
						el.setStyle("visibility","");	
					});
				} catch(e) {}
			}
		});
				
		this.request = new Request.HTML( { url: this.url, onSuccess: this.onRequestSuccess.bind(this) });
		this.request.send();		
    },
	
	onRequestSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {		
		this.modal.setContent(responseHTML);
		this.modal.pin();
		this.show();
	},
	
	adjustLayout: function() {		
		var shadowCont = document.getElement(".modal_login_border"); 
		var modalCont = $("modal_login_container");
		var modalContHeight = modalCont.getSize().y + 28;		
		shadowCont.setStyle("height", modalContHeight);
		window.fireEvent("resize", window);
		document.getElement(".modal_shadow").setStyle("top", "100px");
	},
	
    show: function(){	
		try {
			$$('object').each(function(el){
				el.setStyle("visibility","hidden");	
			});
		} catch(e) {}						
		this.modal.show();
		this.addValidators();			
		this.adjustLayout();			                			
    },
    
    addValidators: function(){	
        this.validator = new EasyForm('loginForm', { onFormValidation: this.onValidation.bind(this) });				
		this.validator.form.getElement('.loginFormSubmit').addEvent("click", this.validator.validate);				
    },
	
	
	onValidation: function($response) {
		if($response.isValid) {
			this.validator.form.set('send', {
	            onRequest: this.onRequest.bind(this),
	            onSuccess: this.onSuccess.bind(this)
	        });
	        this.validator.form.send();
			this.hideErrors();			
		}
		else {
			this.showErrors($response.invalidFields);
		}
	},
	
	showErrors: function($fields) {
		document.getElement(".loginErrors").empty();
		document.getElement(".loginErrors").removeClass("hidden");		
		$fields.each(function($el){
			if ($defined($el.get("invalidMessage"))) {
				var p = new Element('p');
				p.set("text", $el.get("invalidMessage"));
				p.inject(document.getElement(".loginErrors"), 'bottom');
			}
		});
		this.adjustLayout();
	},
	
	hideErrors: function() {
		document.getElement(".loginErrors").addClass("hidden");
		this.adjustLayout();
	},
	
	spinnerOn: function() {
		this.validator.form.getElement(".spinner").setStyle("display","block");
	},
	
	spinnerOff: function() {
		this.validator.form.getElement(".spinner").setStyle("display","none");
	},
	
	onRequest: function() {
		this.spinnerOn();
		this.hideErrors();
	},
	
	onSuccess: function($response) {
		this.spinnerOff();
		var response = JSON.decode($response);
		
		if(response.codice == 'ok' && response.goTo){			
			window.location = response.goTo;		
		} 
		
		else if(response.codice == 'not_equals'){
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Password e conferma password non uguali");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
		}
		
		else if(response.codice == 'already_registered') {
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Hai già confermato la tua iscrizione.");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
		} 
		
		else if(response.codice == 'already_registered') {
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Hai già confermato la tua iscrizione.");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
		} 
		
		else if(response.codice == 'auth_code_error') {
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Errore di sistema.");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
		} 
		
		else {
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Password e conferma password non corretti.");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
		}
		
		this.adjustLayout();		
	}
	
});
/*fine confirm registration window*/
/*easy carousel*/
var EasyCarousel = new Class({
	
	Implements: [Options, Events],
	
	options: {
		nextBtn: null,		
		prevBtn: null,
		hideBtnClass: null,
		useFadeOnButtons: true
	},
	
	initialize: function($el, $options) {
		
		this.el = $el;
		this.el.setStyle('overflow','hidden');
		
		this.setOptions($options);
		this.id = this.el.get("id");
		this.indice = 0;
		carousel_list = $$('.EasyCarousel');
		for(i = 0 ; i < carousel_list.length ; i++){
		  if(carousel_list[i] == this.el){
		    this.indice = i;
		  }
		}
		//this.serviceUrl = this.el.get("serviceUrl");
		//this.preloaderCont = this.el.getElement(".scrollone_preloader_cont");		
		this.prevBtn = $$('.prevBtn')[this.indice] 
		this.nextBtn = $$('.nextBtn')[this.indice] 		
		this.scrollContent = this.el.getElement(".EasyCarousel_cont");
		this.scrollContent.setStyle('width', '5000px');		
		this.scrollContent.set("tween", { onComplete: this.enableButtons.bind(this) });				
		//this.itemSize = parseInt(this.elements[0].getStyle("width")) + parseInt(this.elements[0].getStyle("margin-left")) + parseInt(this.elements[0].getStyle("margin-right"));
		//this.itemsPerPage = this.el.get("itemsPerPage").toInt();		
		this.index = this.getCurrIndex();		
		//this.request = new Request.HTML({ onSuccess: this.onLoadContentComplete.bind(this) });
		//this.empty = true;
		this.video_det2 = $$('.video_det2');
		this.video_det2.setStyle('display','inline-block');	
		this.contenitorehome = $$('.contenitorehome');
		this.contenitorehome.setStyle('display','block');
		this.divisore = $$('.divisore');
		this.divisore.setStyle('display','none');	

		this.init();	
		
		//console.log();
	},
	
	getCurrIndex: function() {
		if(!$defined(this.index)) return 0;
		else return this.index;
	},
	
	getScrolContentWidth: function() {
		return this.scrollContent.getElements(".EasyCarousel_page").length*this.pageWidth;
	},
	
	getItems: function() {
		return this.scrollContent.getElements(".EasyCarousel_page");
	},
	
	init: function() {
		this.ready();
	},
	
	refreshProperies: function() {		
		this.scrollContentItems = this.getItems();
		this.scrollContentItems.setStyle("display", "inline-block");
		this.scrollContentItemsPosistions = [];
		this.scrollContentItems.each(function(el,i){
			this.scrollContentItemsPosistions[i] = el.getPosition(this.scrollContent).x;			
		},this);					
		this.scrollContentItemsCount = this.scrollContentItems.length;			
		this.maxIndex = this.scrollContentItemsCount-1;	
	},
	
	ready: function() {
		this.el.setStyle("position","relative");
		this.scrollContent.setStyles({ position: "relative", top: "0", left:"0", bottom:"0"});
		this.refreshProperies();
		this.disableButtons();		
		this.enableButtons();
	},
	
	enableButtons: function() {
		
		if (this.index > 0) {
			this.prevBtn.addEvent("click", this.onPrev.bind(this));
			this.showButton(this.prevBtn);
		} else {
			this.prevBtn.removeEvents();
			this.hideButton(this.prevBtn);			
		}		
		if(this.index < this.maxIndex) {
			this.nextBtn.addEvent("click", this.onNext.bind(this));
			this.showButton(this.nextBtn);
		} else {
			this.nextBtn.removeEvents();
			this.hideButton(this.nextBtn);
		}		
	},
	
	disableButtonsEvents: function() {
		this.prevBtn.removeEvents();
		this.nextBtn.removeEvents();
		
	},
	
	disableButtons: function() {
		this.disableButtonsEvents();
		this.hideButton(this.prevBtn);			
		this.hideButton(this.nextBtn);
	},
	
	hideButton: function(button) {
		if(this.options.useFadeOnButtons)
			button.fade(0);
		else if(this.options.hideBtnClass) 
			button.addClass(this.options.hideBtnClass);
	},
	
	showButton: function(button) {
		if(this.options.useFadeOnButtons)
			button.fade(1);
		else if(this.options.hideBtnClass) 
			button.removeClass(this.options.hideBtnClass);
	},
	
	/*loadContent: function() {
		this.request.get("/be/main.php?page=" + this.serviceUrl + "&index=" + this.index);
	},*/
	
	/*onLoadContentComplete: function($r1, $r2, $r3, $r4) {
		this.preloaderCont.fade(0);		
		this.htmlContent.set("html", this.htmlContent.get("html") + $r3);
		this.el.tween("height", this.htmlContent.getSize().y);
		this.empty = false;
		this.enableButtons();
	},*/


	onNext: function() {
		this.disableButtonsEvents();		
		if(this.index < this.scrollContentItemsCount) {
			this.index += 1;
			this.goTo(this.index);
		}		
	},
	
	onPrev: function() {
		this.disableButtonsEvents();
		if(this.index > 0) {
			this.index -= 1;
			this.goTo(this.index);
		}
	},
	
	goTo: function($index) {
		var toX = this.scrollContentItemsPosistions[$index]		
		this.moveTo(toX);
	},
	
	moveTo: function($value) {			
		this.scrollContent.tween("left", -1 * $value);
	}
	
});


window.addEvent("domready", function() {
	$$(".EasyCarousel").each(function($el){
		/* console.log('ec') */
		new EasyCarousel($el);
	});
	/*$$(".EasyCarousel2").each(function($el){
		new EasyCarousel($el);
	});*/
});
/*fine easy carousel */
/*easy form */

var EasyLogger = new Class({
	
	easyLoggerEnabled: true,
	
	enableEasyLogger: function() {
		this.easyLoggerEnabled = true;
	},
	
	disableEasyLogger: function() {
		this.easyLoggerEnabled = false;
	},
	
	info: function($var){
		return;
		if(this.easyLoggerEnabled) 
		try {
			console.info($var);
		} catch(e) {}
	},
	
	log: function($var){
		if(this.easyLoggerEnabled) 
		try {
			console.log($var);
		} catch(e) {}
	},
	
	dir: function($var){
		if(this.easyLoggerEnabled) 
		try {
			console.dir($var);
		} catch(e) {}
	}
	
});

var EasyForm = new Class({
	
	Implements:[Options, Events, EasyLogger],
	
	Binds: ['reset','validate','isValid'],
	
	options: {
		onFormValidation: $empty(),
		onFieldValidation: $empty(),			
		fieldSelectors: 'input[type="text"], input[type="password"], select, textarea',
		validateFieldsOnBlur: true,
		validateFieldsOnChange: true,
		validateFieldsOnKeyUp: true,
		validFieldClassName: '',
		invalidFieldClassName: ''
	},

	initialize: function($form, $options){
		this.info("EasyForm.initialize");
		this.form = document.id($form);				
		this.setOptions($options);		
		this.$init();		
	},
	
	$init: function(){		
		this.form.store('EasyForm', this);
		this.info("EasyForm.$init");
		if(this.form.get("validFieldClassName")) this.options.validFieldClassName = this.form.get("validFieldClassName");
		if(this.form.get("invalidFieldClassName")) this.options.invalidFieldClassName = this.form.get("invalidFieldClassName");
		this.elements = this.$getEasyFormField();		
		this.$addEventListeners();		
	},
	
	$addEventListeners: function() {
		this.info("EasyForm.$addEventListeners");
		this.form.addEvent('submit', this.$onFormSubmit.bind(this));
	},

	$getEasyFormField: function(){
		this.info("EasyForm.$getEasyFormField");
		var fields = this.form.getElements(this.options.fieldSelectors);
		var easyformfields = [];
		fields.each(function($el){
			if($el.match("input[type='hidden']")) return;
			if($el.get("domain") || $el.get("minLength") || $el.get("maxLength") || $el.match("input[required='true']") || $el.get("required")) {			
				easyformfields.push(
					new EasyFormField($el, { 
						onValidate: 			this.options.onFieldValidation, 
						validateOnBlur: 		this.options.validateFieldsOnBlur, 
						validateOnChange: 		this.options.validateFieldsOnChange,
						validateOnKeyUp: 		this.options.validateFieldsOnKeyUp,
						validClassName: 		this.options.validFieldClassName,
						invalidClassName: 		this.options.invalidFieldClassName,
						validClassName: 		this.options.validFieldClassName
					})
				);	
			}			
		},this);
		return easyformfields;
	},
	
	$onFormSubmit: function($event){
		this.info("EasyForm.$onFormSubmit");
		var e = new Event($event);
		e.stop();
		this.validate();
	},

	reset: function(){
		this.info("EasyForm.reset");
		this.elements.each(function($el) {
			$el.reset();
		});
		return this;
	},
	
	validate: function(){
		this.info("EasyForm.validate");		
		this.fireEvent('formValidation', [this.isValid()]);
	},

	isValid: function(){
		this.info("EasyForm.isValid");
		var out = {
			validFields: [],
			invalidFields: []			
		}
		this.elements.each(function($eff){
			if($eff.isValid()) out.validFields.push($eff.element);
			else out.invalidFields.push($eff.element);
		});
		out.isValid = out.validFields.length == this.elements.length;
		return out;		
	}	

});

EasyForm.testDomain = function($domain, $value) {	
	
	switch($domain) {
		
		case 'notEmpty':	return $value.trim().length > 0; break;
							
		case 'integer':		return $value.test(/^(-?[1-9]\d*|0)$/); break;
							
		case 'float':		return $value.test(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/); break;						
							
		case 'email':		return $value.test(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i); break;
		
		case 'password':	return EasyForm.testDomain('alphanum', $value) && ($value.length >= 6); break;
		
		case 'alphanum':	return $value.test(/^[a-zA-Z0-9]+$/); break;
		
		case 'nickname':	return $value.test(/^[a-zA-Z0-9_\.\-]+$/) && ($value.length >= 6); break;
		
		case 'alpha' : 		return $value.test(/^[a-zA-Z]+$/); break;
		
		case 'cap' : 		return $value.toInt()>0 && $value.test(/^[0-9]{5}$/); break;
		
		case 'phone' : 		return $value.test(/^[0-9]+$/) && ($value.length >= 5); break;
		
		case 'date' : 	    
		  var tokens = $value.split('-');

		  var date= Date.parse(tokens[2]+'-'+tokens[1]+'-'+tokens[0]);
		  if(date.isValid() && date.get('fullyear') == tokens[2] && date.get('Date') == tokens[0] && date.get('month')+1 == tokens[1])
		      return true;   
		  else
		      return false;
        break;
	}
	
}

EasyForm.testField = function(element) {	
	
	$value = String(element.match('select') ? element.getSelected().get("value") : element.get('value'));
	$props = element.getProperties('value','minLength','maxLength','domain','required');	
			
	if($props.required && EasyForm.testDomain('notEmpty', $value) !== true) return false; // fallisce se è required e non è vuoto
	if($props.domain) return EasyForm.testDomain($props.domain, $value); // fallisce se non rispetta il domain		
	if(($props.maxLength > 0 && $props.minLength > 0 && $props.maxLength >= $props.minLength) && ($value.length > $props.maxLength || $value.length < $props.minLength)) return false; // fallisce se non è compreso tra minLength e maxLength	
	else if($props.minLength > 0 && $value.length < $props.minLength) return false; // fallisce se è più corto di minLength e se minLength è maggiore di 0	
	else if($props.maxLength > 0 && $value.length > $props.maxLength) return false; // fallisce se è più lungo di maxLength e se maxLength è maggiore di 0	
	return true; // passa se finora non è ritornato false
}

EasyForm.testKeyDown = function(event, element){
	return false;
}

var EasyFormField = new Class({

	Implements:[Options, Events, EasyLogger],
	
	Binds: ['reset','validate','isValid','setValidStyles','setInvalidStyles'],
	
	options: {
		onValidate: $empty(),
		fieldSelectors: 'input, select, textarea',
		validateOnChange: true,		
		validateOnBlur: true,		
		validateOnKeyUp: true,		
		validClassName: false,
		invalidClassName: '',
		debugMode: true
	},

	initialize: function($el, $options){	
		this.info("EasyFormField.initialize");
		this.setOptions($options);
		this.element = document.id($el);
		this.element.store('EasyFormField', this);
		this.options.validClassName = this.element.get("validClassName") ? this.element.get("validClassName") : this.options.validClassName;
		this.options.invalidClassName = this.element.get("invalidClassName") ? this.element.get("invalidClassName") : this.options.invalidClassName;
		this.$init();
	},
	
	$init: function(){
		this.info("EasyFormField.$init");
		this.originalValue = this.element.get("value");
		this.$addEventListeners();		
	},
	
	$addEventListeners: function() {
		this.info("EasyFormField.$addEventListeners");
		if(this.options.validateOnKeyUp) { 
			this.element.addEvent('keyup', this.$onKeyUp.bind(this)); 
		} else {			 
			if (this.options.validateOnBlur) this.element.addEvent('blur', this.$onBlur.bind(this));		
		}
		if (this.options.validateOnChange) this.element.addEvent('change', this.$onChange.bind(this));
		if(this.element.match('select')) this.element.addEvent('change', this.$onChange.bind(this));
		if(this.element.match('input')) this.element.addEvent('keydown', this.$onKeyDown.bind(this));			
	},
	
	$onChange: function() {
		this.info("EasyFormField.$onChange");
		this.validate();
	},
	
	$onBlur: function() {
		this.info("EasyFormField.$onBlur");
		this.validate();
	},
	
	$onKeyDown: function($event) {
		var e = new Event($event);
		if(EasyForm.testKeyDown($event, this.element))
			e.stop();
	},
	
	$onKeyUp: function($event) {		
		this.info("EasyFormField.$onKeyUp");		
		this.validate();
	},
	
	$setStyles: function($valid) {
		this.info("EasyFormField.$setStyles");
		if($valid) {
			this.setValidStyles();
		} else {
			this.setInvalidStyles();
		}		
	},
	
	setValidStyles: function() {
		if(this.options.validClassName) this.element.addClass(this.options.validClassName);
		if(this.options.invalidClassName) this.element.removeClass(this.options.invalidClassName);
	},
	
	setInvalidStyles: function() {
		if(this.options.invalidClassName) this.element.addClass(this.options.invalidClassName);
		if(this.options.validClassName) this.element.removeClass(this.options.validClassName);
	},

	reset: function(){
		this.info("EasyFormField.reset");
		this.element.set("value", this.originalValue);
		return this;
	},
	
	validate: function(){
		this.info("EasyFormField.validate");
		var valid = this.isValid();
		this.$setStyles(valid);
		this.fireEvent('validate', [valid]);
	},

	isValid: function() {
		this.info("EasyFormField.isValid");
				
		valid = EasyForm.testField(this.element);
		
		this.$setStyles(valid==true);
		return valid==true; 		
	}
});
/*fine easy form*/
/*login window*/
/**
 * @author mauro
 */
/**
 * @author mauro
 */
var LoginWindow = new Class({
    Implements: Options,
    
    options: {
        anchors: false,
        className: 'modal_shadow',
        defaultTabIndex: 0,
        onShow: $empty,
        onRegistrationSuccess: $empty,
		relativeTo : $empty
    },
    
    url: false,
    
    initialize: function(url, options){
        this.setOptions(options);
        this.url = url;	
		var modalStyle = {};
		if(!Browser.Engine.trident) {
			modalStyle = {
                'background-color': '#000',
                'opacity': .3
            }
		}
		this.modal = new StickyWin.Modal({
			relativeTo: $('menu2'),
			showNow: true,
			className: this.options.className,
            closeClassName : 'chiudi_lightbox',			
			destroyOnClose: true,
			modalOptions: {
                modalStyle: modalStyle,
				hideOnClick: false,
				closeOnClickOut : false		
            },
			onClose: function() {
				try {
					$$('object').each(function(el){
						el.setStyle("visibility","");	
					});
				} catch(e) {}
			}
		});
				
		this.request = new Request.HTML( { url: this.url, onSuccess: this.onRequestSuccess.bind(this) });
		this.request.send();		
    },
	
	onRequestSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {		
		this.modal.setContent(responseHTML);
		this.modal.pin();
		this.show();
	},
	
	adjustLayout: function() {				
		document.getElement(".modal_shadow").setStyle("top", "100px");
		var shadowCont = document.getElement(".modal_login_border"); 
		var modalCont = $("modal_login_container");
		var modalContHeight = modalCont.getSize().y + 28;		
		shadowCont.setStyle("height", modalContHeight);
		window.fireEvent("resize", window);		
	},
	
    show: function(){
		try {
			$$('object').each(function(el){
				el.setStyle("visibility", "hidden");
			});
		} catch(e) {}
				
		this.modal.show();
		this.tabSwapper = new TabSwapper({
		    selectedClass: 'selected',
		    deselectedClass: 'unselected',
		    mouseoverClass: 'over',
		    mouseoutClass: 'out',
		    tabs: $$('#modal_login_container .tabs li'),
		    clickers: $$('#modal_login_container .tabs li a'),
		    sections: $$('#modal_login_container .tabconts .tabcont'),
		    smooth: false,
		    cookieName: 'modal_login_tab'
		});
		this.tabSwapper.addEvent("onActive", this.adjustLayout.bind(this));		
		this.tabSwapper.show(this.options.defaultTabIndex);
		document.id('ricordalink').addEvent("click", this.onRicordaLinkClick.bind(this))
		this.addValidators();			
		this.adjustLayout();			                			
    },
	
	onRicordaLinkClick: function() {
		document.id('loginForm').addClass('hidden');
		document.id('ricordaPasswordForm').removeClass('hidden');
		this.adjustLayout();			
	},
    
    addValidators: function(){	
        this.loginValidator = new EasyForm('loginForm', { onFormValidation: this.onLoginValidation.bind(this) });				
		this.loginValidator.form.getElement('.loginFormSubmit').addEvent("click", this.loginValidator.validate);			
		
		this.registerValidator = new EasyForm('registrationForm', { onFormValidation: this.onRegisterValidation.bind(this) });				
		this.registerValidator.form.getElement('.registrationFormSubmit').addEvent("click", this.registerValidator.validate);					
		
		this.reminderValidator = new EasyForm('ricordaPasswordForm', { onFormValidation: this.onReminderValidation.bind(this) });				
		this.reminderValidator.form.getElement('.ricordaPasswordSubmit').addEvent("click", this.reminderValidator.validate);
    },
	
	/*
	 * 		reminder password
	 * */
	
	onReminderValidation: function($response) {
		if($response.isValid) {
			this.reminderValidator.form.set('send', {
	            onRequest: this.onReminderRequest.bind(this),
	            onSuccess: this.onReminderSuccess.bind(this),
				onComplete: this.reminderSpinnerOff.bind(this),
				method: 'post'
	        });
	        this.reminderValidator.form.send();
			this.hideReminderErrors();			
		}
		else {
			this.showReminderErrors($response.invalidFields);
		}
	},
	
	onReminderRequest: function() {
		this.reminderSpinnerOn();
		this.hideReminderErrors();
	},
	
	onReminderSuccess: function($response) {
		this.reminderSpinnerOff();
		var response = JSON.decode($response);
		if(response.cod == 'ok'){
			this.reminderValidator.form.destroy();			
			document.getElement(".reminderSuccess").removeClass("hidden");
			this.adjustLayout();
		} /*else {
			document.getElement(".reminderErrors").empty();
			var p = new Element('p');
			p.set("text", "Indirizzo mail non valido.");
			p.inject(document.getElement(".reminderErrors"));
			document.getElement(".reminderErrors").removeClass("hidden");
		}*/
	},
	
	reminderSpinnerOn: function() {
		this.reminderValidator.form.getElement(".spinner").setStyle("display","block");
	},
	
	reminderSpinnerOff: function() {
		this.reminderValidator.form.getElement(".spinner").setStyle("display","none");
	},
	
	hideReminderErrors: function() {
		document.getElement(".reminderErrors").addClass("hidden");
		this.adjustLayout();
	},
	
	showReminderErrors: function($fields) {
		document.getElement(".reminderErrors").empty();
		document.getElement(".reminderErrors").removeClass("hidden");		
		$fields.each(function($el){
			if ($defined($el.get("invalidMessage"))) {
				var p = new Element('p');
				p.set("text", $el.get("invalidMessage"));
				p.inject(document.getElement(".reminderErrors"), 'bottom');
			}
		});
		this.adjustLayout();
	},
	
	
	/*
	 *     login
	 * */
	
	onLoginValidation: function($response) {
		if($response.isValid) {
			this.loginValidator.form.set('send', {
	            onRequest: this.onLoginRequest.bind(this),
	            onSuccess: this.onLoginSuccess.bind(this)
	        });
	        this.loginValidator.form.send();
			this.hideLoginErrors();			
		}
		else {
			this.showLoginErrors($response.invalidFields);
		}
	},
	
	showLoginErrors: function($fields) {
		document.getElement(".loginErrors").empty();
		document.getElement(".loginErrors").removeClass("hidden");		
		$fields.each(function($el){
			if ($defined($el.get("invalidMessage"))) {
				var p = new Element('p');
				p.set("text", $el.get("invalidMessage"));
				p.inject(document.getElement(".loginErrors"), 'bottom');
			}
		});
		this.adjustLayout();
	},
	
	hideLoginErrors: function() {
		document.getElement(".loginErrors").addClass("hidden");
		this.adjustLayout();
	},
	
	loginSpinnerOn: function() {
		this.loginValidator.form.getElement(".spinner").setStyle("display","block");
	},
	
	loginSpinnerOff: function() {
		this.loginValidator.form.getElement(".spinner").setStyle("display","none");
	},
	
	onLoginRequest: function() {
		this.loginSpinnerOn();
		this.hideLoginErrors();
	},
	
	onLoginSuccess: function($response) {
		this.loginSpinnerOff();
		var response = JSON.decode($response);
		if(response.codice == 'ok'){			
			document.location = response.url;
		} else {
			document.getElement(".loginErrors").empty();
			var p = new Element('p');
			p.set("text", "Indirizzo mail o password non corretti.");
			p.inject(document.getElement(".loginErrors"));
			document.getElement(".loginErrors").removeClass("hidden");
			this.adjustLayout();	
		}
		
	},
	
	
	/*
	 *     registrazione
	 * */
	
	onRegisterValidation: function($response) {
		if($response.isValid) {
			this.registerValidator.form.set('send', {
	            onRequest: this.onRegisterRequest.bind(this),
	            onSuccess: this.onRegisterSuccess.bind(this)
	        });
	        this.registerValidator.form.send();
			this.hideRegisterErrors();			
		}
		else {
			this.showRegisterErrors($response.invalidFields);
		}
	},
	
	showRegisterErrors: function($fields) {
		document.getElement(".registrationErrors").empty();
		document.getElement(".registrationErrors").removeClass("hidden");		
		$fields.each(function($el){
			if ($defined($el.get("invalidMessage"))) {
				var p = new Element('p');
				p.set("text", $el.get("invalidMessage"));
				p.inject(document.getElement(".registrationErrors"), 'bottom');
			}
		});
		this.adjustLayout();
	},
	
	hideRegisterErrors: function() {
		document.getElement(".registrationErrors").addClass("hidden");
		this.adjustLayout();
	},
	
	registerSpinnerOn: function() {
		this.registerValidator.form.getElement(".spinner").setStyle("display","block");
	},
	
	registerSpinnerOff: function() {
		this.registerValidator.form.getElement(".spinner").setStyle("display","none");
	},
	
	onRegisterRequest: function() {
		this.registerSpinnerOn();
		this.hideRegisterErrors();
	},
	
	onRegisterSuccess: function($response) {
		this.registerSpinnerOff();
		var response = JSON.decode($response);		
		if(response.codice == "ok"){					
			document.id("usermail").set("text", this.registerValidator.form.getElement('input[name="email"]').get("value"));
			this.registerValidator.form.destroy();
			document.getElement(".entraLabel").destroy();			
			document.getElement(".registrationSuccess").removeClass("hidden");
			this.adjustLayout();
		} else {
			document.getElement(".registrationErrors").empty();
			var p = new Element('p');
			p.set("text", "Indirizzo mail o nickname già presenti in ScuolaZoo.");
			p.inject(document.getElement(".registrationErrors"));
			document.getElement(".registrationErrors").removeClass("hidden");
			this.adjustLayout();
		}
		
	}
	
	
});

/*fine login window*/
/*mipiace btn*/
var MipiaceButton = new Class({
	
	Implements: [Options],
	
	options: {
		url: '',
		doIdontlikeClass: '',
		doIlikeClass: '',		
		entityName: '',
		entityId: '',
		objTitle:''
	},
	
	initialize: function($el, $options) {
		this.el = $el;
		this.roar = new Roar({position :'upperRight'});
		this.setOptions($options);		
		var props = this.el.getProperties("rel", "id");
		if ($defined(props.rel) && $defined(props.id)) {
			this.options.objTitle=this.el.get('lang');
			this.options.entityName = props.rel.split("|")[0];
			this.options.entityAction = String(props.rel.split("|")[1]).toInt() == 1 ? 'dolike' : 'dounlike';
			this.options.entityId = props.id.toInt();
			
			this.request = new Request.JSON({
				url: this.options.url,
				method: "post",
				onSuccess: this.onCallSuccess.bind(this),
				onFailure: this.onCallFailure.bind(this),
				onComplete: this.onCallComplete.bind(this)
			});
			this.initEnabled();
		} else {
			this.initDisabled();
		}
	},
	
	initEnabled: function() {
		this.el.addEvent("click", this.onClick.bind(this));		
	},
	
	initDisabled: function() {
		this.el.addEvent("click", this.loadLoginModal.bind(this));		
	},
	
	loadLoginModal: function() {
		window.fireEvent('openLoginWindow');
		//document.loginWindow = new LoginWindow('/be/main.php?page=login_modal', { defaultTabIndex: 1 });
	},
	
	onClick: function() {
		this.el.startWaiter();		
		this.el.removeEvents();
		this.callService();
	},
	
	callService: function() {
		var params = 'entity='+this.options.entityName+'&id='+this.options.entityId+'&action='+this.options.entityAction+'&objTitle='+this.options.objTitle;		
		this.request.send(params);
	},
	
	onCallComplete: function() {
		this.el.stopWaiter();		
	},
	
	onCallSuccess: function($response) {
		this.el.stopWaiter();
		
		if($response.cod == 'ilikeit') {
			this.el.removeClass("but_like");
			this.el.addClass("but_like-y");
			this.el.set("rel", this.options.entityName + '|0');
			this.options.entityAction = 'dounlike';
			this.el.set("text", "Non mi piace più!");
		} else {
			this.el.removeClass("but_like-y");
			this.el.addClass("but_like");
			this.el.set("rel", this.options.entityName + '|1');
			this.options.entityAction = 'dolike';
			this.el.set("text", "Mi piace!");
		}
	},
	
	onCallFailure: function() {
		
	}
	
	
	
});
/*fine mi piace btn*/
/*roar*/
var Roar = new Class({

	Implements: [Options, Events, Chain],

	options: {
		duration: 3000,
		position: 'upperLeft',
		container: null,
		bodyFx: null,
		itemFx: null,
		margin: {x: 10, y: 40},
		offset: 10,
		className: 'roar',
		onShow: $empty,
		onHide: $empty,
		onRender: $empty
	},

	initialize: function(options) {
		this.setOptions(options);
		this.items = [];
		this.container = $(this.options.container) || document;
	},

	alert: function(title, message, options) {
		var params = Array.link(arguments, {title: String.type, message: String.type, options: Object.type});
		var items = [new Element('h3', {'html': $pick(params.title, '')})];
		if (params.message) items.push(new Element('p', {'html': params.message}));
		return this.inject(items, params.options);
	},

	inject: function(elements, options) {
		if (!this.body) this.render();
		options = options || {};

		var offset = [-this.options.offset, 0];
		var last = this.items.getLast();
		if (last) {
			offset[0] = last.retrieve('roar:offset');
			offset[1] = offset[0] + last.offsetHeight + this.options.offset;
		}
		var to = {'opacity': 1};
		to[this.align.y] = offset;

		var item = new Element('div', {
			'class': this.options.className,
			'opacity': 0
		}).adopt(
			new Element('div', {
				'class': 'roar-bg',
				'opacity': 0.9
			}),
			elements
		);

		item.setStyle(this.align.x, 0).store('roar:offset', offset[1]).set('morph', $merge({
			unit: 'px',
			link: 'cancel',
			onStart: Chain.prototype.clearChain,
			transition: Fx.Transitions.Back.easeOut
		}, this.options.itemFx));

		var remove = this.remove.create({
			bind: this,
			arguments: [item],
			delay: 10
		});
		this.items.push(item.addEvent('click', remove));

		if (this.options.duration) {
			var over = false;
			var trigger = (function() {
				trigger = null;
				if (!over) remove();
			}).delay(this.options.duration);
			item.addEvents({
				mouseover: function() {
					over = true;
				},
				mouseout: function() {
					over = false;
					if (!trigger) remove();
				}
			});
		}
		item.inject(this.body).morph(to);
		return this.fireEvent('onShow', [item, this.items.length]);
	},

	remove: function(item) {
		var index = this.items.indexOf(item);
		if (index == -1) return this;
		this.items.splice(index, 1);
		item.removeEvents();
		var to = {opacity: 0};
		to[this.align.y] = item.getStyle(this.align.y).toInt() - item.offsetHeight - this.options.offset;
		item.morph(to).get('morph').chain(item.destroy.bind(item));
		return this.fireEvent('onHide', [item, this.items.length]).callChain(item);
	},

	empty: function() {
		while (this.items.length) this.remove(this.items[0]);
		return this;
	},

	render: function() {
		this.position = this.options.position;
		if ($type(this.position) == 'string') {
			var position = {x: 'center', y: 'center'};
			this.align = {x: 'left', y: 'top'};
			if ((/left|west/i).test(this.position)) position.x = 'left';
			else if ((/right|east/i).test(this.position)) this.align.x = position.x = 'right';
			if ((/upper|top|north/i).test(this.position)) position.y = 'top';
			else if ((/bottom|lower|south/i).test(this.position)) this.align.y = position.y = 'bottom';
			this.position = position;
		}
		this.body = new Element('div', {'class': 'roar-body'}).inject(document.body);
		if (Browser.Engine.trident4) this.body.addClass('roar-body-ugly');
		this.moveTo = this.body.setStyles.bind(this.body);
		this.reposition();
		if (this.options.bodyFx) {
			var morph = new Fx.Morph(this.body, $merge({
				unit: 'px',
				chain: 'cancel',
				transition: Fx.Transitions.Circ.easeOut
			}, this.options.bodyFx));
			this.moveTo = morph.start.bind(morph);
		}
		var repos = this.reposition.bind(this);
		window.addEvents({
			scroll: repos,
			resize: repos
		});
		this.fireEvent('onRender', this.body);
	},

	reposition: function() {
		var max = document.getCoordinates(), scroll = document.getScroll(), margin = this.options.margin;
		max.left += scroll.x;
		max.right += scroll.x;
		max.top += scroll.y;
		max.bottom += scroll.y;
		var rel = ($type(this.container) == 'element') ? this.container.getCoordinates() : max;
		this.moveTo({
			left: (this.position.x == 'right')
				? (Math.min(rel.right, max.right) - margin.x)
				: (Math.max(rel.left, max.left) + margin.x),
			top: (this.position.y == 'bottom')
				? (Math.min(rel.bottom, max.bottom) - margin.y)
				: (Math.max(rel.top, max.top) + margin.y)
		});
	}

});
/*fine roar*/
/*scrollone*/
//var EasyCarousel = new Class({
//	
//	Implements: [Options, Events],
//	
//	options: {
//		
//	},
//	
//	initialize: function($el, $options) {
//		this.el = $el;
//		this.setOptions($options);
//		this.id = this.el.get("id");
//		//this.serviceUrl = this.el.get("serviceUrl");
//		//this.preloaderCont = this.el.getElement(".scrollone_preloader_cont");		
//		this.prevBtn = document.id(this.id + '_prevBtn');
//		this.nextBtn = document.id(this.id + '_nextBtn');		
//		this.scrollContent = this.el.getElement(".EasyCarousel_cont");
//		this.scrollContent.set("tween", { onComplete: this.enableButtons.bind(this) });
//		//this.itemSize = parseInt(this.elements[0].getStyle("width")) + parseInt(this.elements[0].getStyle("margin-left")) + parseInt(this.elements[0].getStyle("margin-right"));
//		//this.itemsPerPage = this.el.get("itemsPerPage").toInt();		
//		this.index = this.getCurrIndex();		
//		//this.request = new Request.HTML({ onSuccess: this.onLoadContentComplete.bind(this) });
//		//this.empty = true;
//		this.init();		
//	},
//	
//	getCurrIndex: function() {
//		if(!$defined(this.index)) return 0;
//	},
//	
//	getScrolContentWidth: function() {
//		return this.scrollContent.getElements(".EasyCarousel_page").length*this.pageWidth;
//	},
//	
//	getItems: function() {
//		return this.scrollContent.getElements(".EasyCarousel_page");
//	},
//	
//	init: function() {
//		this.ready();
//	},
//	
//	refreshProperies: function() {		
//		this.scrollContentItems = this.getItems();
//		this.pageWidth = this.el.getSize().x;
//		this.pageHeight = this.el.getSize().y;			
//		this.scrollContentItemsCount = this.scrollContentItems.length;		
//		this.scrollContentWidth = this.scrollContentItemsCount*this.pageWidth;
//		this.maxIndex = (this.scrollContentWidth/this.pageWidth)-1;	
//	},
//	
//	ready: function() {
//		this.el.setStyle("position","relative");
//		this.scrollContent.setStyles({ position: "relative", top: "0", left:"0", bottom:"0"});
//		this.refreshProperies();
//		this.disableButtons();		
//		this.enableButtons();			
//	},
//	
//	enableButtons: function() {
//		if (this.index > 0) {
//			this.prevBtn.addEvent("click", this.onPrev.bind(this));
//			this.showButton(this.prevBtn);
//		} else {
//			this.prevBtn.removeEvents();
//			this.hideButton(this.prevBtn);			
//		}		
//		if(this.index < this.maxIndex) {
//			this.nextBtn.addEvent("click", this.onNext.bind(this));
//			this.showButton(this.nextBtn);
//		} else {
//			this.nextBtn.removeEvents();
//			this.hideButton(this.nextBtn);
//		}		
//	},
//	
//	disableButtonsEvents: function() {
//		this.prevBtn.removeEvents();
//		this.nextBtn.removeEvents();
//		
//	},
//	
//	disableButtons: function() {
//		this.disableButtonsEvents();
//		this.hideButton(this.prevBtn);			
//		this.hideButton(this.nextBtn);
//	},
//	
//	hideButton: function(button) {
//		button.fade(0);
//	},
//	
//	showButton: function(button) {
//		button.fade(1);
//	},
//	
//	
//	
//	onNext: function() {
//		this.disableButtonsEvents();		
//		if(this.index < this.scrollContentItemsCount) {
//			this.index += 1;
//			this.goTo(this.index);
//		}		
//	},
//	
//	onPrev: function() {
//		this.disableButtonsEvents();
//		if(this.index > 0) {
//			this.index -= 1;
//			this.goTo(this.index);
//		}
//	},
//	
//	goTo: function($index) {
//		var toX = this.index * this.pageWidth;
//		this.moveTo(toX);
//	},
//	
//	moveTo: function($value) {		
//		this.scrollContent.tween("left", - $value);
//	}
//	
//});
//
//
//window.addEvent("domready", function() {
//	$$(".EasyCarousel").each(function($el){
//		new EasyCarousel($el);
//	});
//});
///*fine scrollone*/
/*slots*/

var Visore = new Class({
    Implements: Options,
    
    url: false,
    container: false,
    currentImage: false,
    options: {
        className: 'slot_shop',
        mainImageClass: 'slot_shop_img',
        thumbImageClass: 'slot_shop_thumb_item',
        thumbSelectedClass: 'slot_shop_thumb_item_qui'
		
    },
    
    initialize: function(url, container, options){
		this.setOptions(options);
        this.url = url;
        this.container = container;
		this.container.startWaiter();
        this.transferCompleted = 0;
        this.imageTitle = this.container.getElement('.slot_shop_tex');
		this.imageDate = this.container.getElement('.slot_shop_data');
		this.imageText = this.container.getElement('.slot_shop_p');
		if($defined(this.imageTitle))this.imageTitle.addClass('hidden');
		if($defined(this.imageDate))this.imageDate.addClass('hidden');
		if($defined(this.imageText))this.imageText.addClass('hidden');
		tmp = this.container.getElement('.'+this.options.mainImageClass);
		
		if(tmp.getFirst().get('tag') == 'a' ){
			this.mainLink = tmp.getFirst();
		}else{
			this.mainLink = null;
		}
		
		this.request = new Request.JSON({
			method : 'get',
            url: this.url,
            onSuccess: this.downloadData.bind(this)
        });
        this.request.send();
        
    },
    downloadData: function(resp){
        
		this.titles = resp.titles;
        this.dates = resp.dates;
		this.links = ($defined(resp.links) ? resp.links : []);
		this.texts = ($defined(resp.testi) ? resp.testi : []);
        this.thumbnails = new Asset.images(resp.thumbnails, {
            onComplete: this.checkTransferComplete.bind(this),
			onError : this.onError.bind(this),
			onTransferProgress : this.onTransferProgress.bind(this)
        });
        
        this.images = new Asset.images(resp.images, {
            onComplete: this.checkTransferComplete.bind(this),
			onError :  this.onError.bind(this),
			onTransferProgress : this.onTransferProgress.bind(this)
		});
        
        
        
    },
    onError: function(counter, index){
     	
    },
    onTransferProgress: function(counter, index){
    	
    },
    checkTransferComplete: function(){
	    this.transferCompleted++;
		
        if (this.transferCompleted == 2) {
            this.buildSlideShow();
        }
    },
    buildSlideShow: function(){
		this.container.stopWaiter();
        this.thumbnails.each(function(el){
       
        },this);
        this.images.each(function(el){
       
            el.addClass('hidden');
        },this);
		
        thumb_container = this.container.getElement('.slot_shop_thumb');
		image_container = this.mainLink//this.container.getElement('.slot_shop_img');
		this.thumbnails.each(function(el, i){
			if(i>=this.images.length) return;
			tmp = new Element('div');
			tmp.addClass(this.options.thumbImageClass);
			tmp.appendChild(el);
			el = tmp;
			el.inject(thumb_container, 'bottom');
			this.images[i].inject(image_container, 'top');
			el.addEvent('click', this.selectImage.bind(this, [i]));
		}, this);
		
		
		this.images[0].removeClass('hidden');
		this.currentImage = 0;
        this.selectImage(0);
		this.thumbnails[0].addClass(this.options.thumbSelectedClass);
		this.thumbnails[0].removeClass(this.options.thumbImageClass);
		
		if ($defined(this.mainLink)) {
			if(this.links.length > 0){
				 this.mainLink.set('href',this.links[0]);
			}
		}
		if (this.dates.length > 0) {
			this.imageDate.set('text',this.dates[0]);
			this.imageDate.removeClass('hidden');
		}
		if (this.texts.length > 0) {
			this.imageText.set('text',this.texts[0]);
			this.imageText.removeClass('hidden');
		}
		if (this.titles.length > 0) {
			this.imageTitle.set('text',this.titles[0]);
			this.imageTitle.removeClass('hidden');
		}
    },
    selectImage: function(index){
        
        if ($chk(index) && (index != this.currentImage)) {
            
			this.thumbnails[index].addClass(this.options.thumbSelectedClass);
            this.thumbnails[index].removeClass(this.options.thumbImageClass);
            this.images[this.currentImage].addClass('hidden');
            this.thumbnails[this.currentImage].removeClass(this.options.thumbSelectedClass);
			//this.thumbnails[this.currentImage].addClass(this.options.thumbImageClass);
			this.images[index].removeClass('hidden');
			this.imageTitle.set('text',this.titles[index]);
		    if(this.dates.length > index) this.imageDate.set('text',this.dates[index]);
			if(this.texts.length > index) this.imageText.set('text',this.texts[index]);
			if(this.links.length > index && $defined(this.mainLink)) this.mainLink.set('href',this.links[index]);
			if(this.titles.length > index) this.imageTitle.set('text',this.titles[index]);
			this.currentImage = index;
        }
    }
    
});
/*fine slots*/
/*video sz*/
/**
 * @author Federico
 */

var VideoSz = new Class({
	
	Implements: [Events, Options],
	
	element: $empty,
	
	initialize: function($el, $options) {
		if(!$defined($el)) return;		
		this.setOptions($options);
		this.element = $type($el) == 'string' ? $($el) : $el;
		if(!$defined(this.element.get("id"))) return;
		this.json = JSON.decode(this.element.get("id"));		
		this.init();		
	},
	
	init: function() {
		var flashvars = {}
		var src = '';
		
		if (parseInt(this.json.easyplayer) == 1) {
			flashvars.flv = this.json.url;
			flashvars.img = $defined(this.json.imgUrl) ? this.json.imgUrl : '';
			src = "/be/public/inc/swf/EasyPlayer.swf";
		} else {
			src = this.json.url;
		}
		
		if( src.substring(src.length-1) == '\\' )
			src = src.substring(0,src.length-1);
		
		this.swiff = new Swiff(src, {
			id: 'VideoSzEmbed_' + this.json.videoid,
			container: this.element,
			width: "100%",
			height: "100%",
			params: {
				wMode: 'opaque',					
				allowFullScreen: "true",
				bgcolor: '#000000'
			},
			vars: flashvars
		});
		this.element.setStyle("height", (this.element.getSize().x*9)/16);	
	}	
	
});
 
var VideoSzManager = new Class({
	
	Implements: [Events, Options],
	items: $empty,
	
	initialize: function($option) {
		this.setOptions($option);
		this.items = [];
		this.init();
	},
	
	init: function($options){
		$$('.videoszembed').each(function($el){
			this.items.push(new VideoSz($el));		
		},this);
	}
});

	
		


/*fine video sz*/


