window.jsTemplates = {};
var overtext=new Array();

var AdvancedFormValidator = new Class({
	Extends: FormValidator,

	makeAdvice: function(className, field, error, warn){
		var advice = this.parent(className, field, error, warn);

		if (["text", "password"].contains(field.get("type")) || field.get("tag") == "select") {
			advice.reveal = null;
			advice.addClass("validation-overfield");
			advice.setStyle("width", field.getSize().x-2);
		}

		advice.addEvent("click", function() {
			this.resetField(field);
			field.focus();
		}.bind(this));

		return advice;
	},

	insertAdvice: function(advice, field){
		if (field.hasClass("datePicker")) {
			advice.inject( field.getNext(), 'after' );
		} else {
			this.parent(advice, field);
		}
	}
});

var HomeVerticalCarousel = new Class({
	Implements: Options,

	options: {
		delay: 5000,
		fxOptions: {
			transition: 'sine:in:out'
		}
	},

	initialize: function(element, options) {
		this.setOptions(options);
		this.element = document.id(element);
		if (this.options.container)
			this.container = this.element.getElement(this.options.container);
		else
			this.container = this.element;
		if (this.options.slideSize)
			this.slideSize = this.options.slideSize;
		else
			this.slideSize = this.container.getElements('.slide')[0].getSize().y;
		this.slidesList = this.container.getElement('ul');

		var h = 0;
		this.slidesList.getChildren().each(function(slide) { h += slide.getSize().y });
		this.slidesList.setStyle('height', h);
		this.current = 0;

		this.navigationTitle = this.element.getElements('.carouselNavigation strong');
		this.navigationTitle.set('html', this.slidesList.getFirst().getElement('img').get('alt'));

		if (this.slidesList.getChildren().length>1) {
			var navLinks = this.element.getElements('.carouselNavigation a');
			if (navLinks.length == 2) {
				navLinks[0].addEvent('click', this.previous.bind(this));
				navLinks[1].addEvent('click', this.next.bind(this));
			}

			this.slideTimer = this.next.delay(this.options.delay, this);
			this.fx = new Fx.Tween(this.slidesList, $merge(this.options.fxOptions, {
				property: 'margin-top'
			}));
		} else {
			this.element.getElements('.carouselNavigation a').each(function(a){ a.hide(); });
		}
	},

	slide: function() {
		$clear(this.slideTimer);
		this.fx.cancel();
		this.fx.start(-this.slideSize*this.current);
		if ($defined(this.slidesList.getChildren()[this.current].getElement('img')))
			this.navigationTitle.set('html', this.slidesList.getChildren()[this.current].getElement('img').get('alt'));
		this.slideTimer = this.next.delay(this.options.delay, this);
	},

	next: function() {
		this.current++;
		if (this.current >= this.slidesList.getChildren().length) {
			this.slidesList.getLast().dispose().inject(this.slidesList.getFirst(), 'before');
			this.slidesList.setStyle('margin-top', 0);
			this.current = 1;
		}
		this.slide();
	},

	previous: function() {
		this.current--;
		if (this.current < 0) {
			this.slidesList.getFirst().dispose().inject(this.slidesList);
			this.slidesList.setStyle('margin-top', -this.slidesList.getSize().y+this.slideSize);
			this.current = this.slidesList.getChildren().length-2;
		}
		this.slide();
	}
});

var CountDown = new Class({
	initialize: function(element) {
		this.element = $(element);
		var t = new Date();
		if ($defined(this.element.get('data-countdown'))) {
			this.time = this.element.get('data-countdown').toInt() - Math.round(t.getTime()/1000);
			this.update();
		}
	},

	update: function() {
		this.time--;
		if (this.time >= 0) {
			var t = this.time;
			var gg = Math.floor(t / 86400);
			t %= 86400;
			var h = Math.floor(t / 3600);
			t %= 3600;
			var m = Math.floor(t / 60);
			var s = t % 60;
			this.element.set('html', gg+'gg '+h+'h '+m+'m '+s+'s')
			this.update.delay(1000, this);
		}
	}
});

var BannersListCollage = new Class({
	Implements: Options,
	options: {
		selector: '.bannerCollage'
	},
	initialize: function(){
		this.collages = $$(this.options.selector);
		this.collages.each(function(element) { this.initCollage.bind(this,element)(); }, this);
	},

	initCollage: function(element){
		element.store('collage',new BannerCollage(element));
	}
});
var BannerCollage = new Class({
	Implements: Options,
	initialize: function(element){
		this.element = document.id(element);
		this.url = this.element.get('data-url');
		this.type = this.element.get('data-type');
		this.update.delay($random(5000,15000), this);
	},

	update: function() {
		this.elements = this.element.getElements('a');
		var ids = [];
		this.elements.each( function(element) {
			ids.push(element.get('data-id'));
		} );
		ids = ids.join(',');

		/*this.element.setStyles({
			width:this.element.getSize().x+'px',
			height:this.element.getSize().y+'px'
		});*/
		this.elements.each(function(element) {
			var img = element.getElement('img');
			if (!$defined(this.size))
				this.size = img.getSize();
			var size = this.size;
			img.setStyle('margin-bottom',size.y+'px');
			if (element.retrieve('loading')!=true) {
				element.store('loading',true);
				new Request.JSON({
					url: this.url,
					data: {ids: ids, type: this.type, w: size.x, y: size.y },
					onSuccess: function(response) {
						if (response != null && response.banner!='') {
							var newBanner = new Element('div',{ html: response.banner }).getFirst().inject(element,'after');
							linkAction(newBanner);
							newBanner.getElement('img').addEvent('load',function(){
								element.dispose();
							});
						}
					}.bind(this)
				}).send();
			}
		}, this);
		this.update.delay(20000, this);
	}
});

var ShopCollage = new Class({
	initialize: function(element) {
		this.element = document.id(element);
		this.url = this.element.get('data-url');
		this.elements = this.element.getElements('li');

		var size = this.element.getElement('img').getSize();
		this.overlay = new Element('IMG', {styles: {position: 'absolute', height: size.y, width: size.x}}).hide();
		this.overlay.inject(this.element, 'after');

		this.update();
	},

	update: function() {
		var ids = [];
		this.elements.each( function(element) {
			ids.push(element.get('data-id'));
		} );
		ids = ids.join(',');

		new Request.JSON({
			url: this.url,
			data: {ids: ids},
			onSuccess: function(response) {
				if (response != null) {
					var pick = (Math.random() * (this.elements.length-1)).round();
					var dest = this.elements[pick];
					dest.set('data-id', response.id);
					var a = dest.getElement('a');
					var url = a.get('href').substr(7).split('.');
					url[0] = response.slug;
					a.set('href', 'http://' + url.join('.'));
					var img = dest.getElement('img');
					img.set('alt', response.nome);
					url = img.get('src').split('/');
					url[url.length-5] = response.banner;

					this.overlay.set('src', img.get('src')).setStyle('opacity', 1).setPosition(img.getPosition()).show();
					img.set('src', url.join('/'));
					this.overlay.tween('opacity', 0);

					this.update.delay(20000, this);
				}
			}.bind(this)
		}).send();
	}
});

function linkAction(a){
	var href=a.get('href');
	if (( (href.indexOf('http://')==0 || href.indexOf('https://')==0) && href.indexOf('smilestore.ch')==-1) || a.get( "rel" ) == "external") {
		a.target = "_blank";
	}
}

window.addEvent('load', function(){
	// Link esterni, apre una nuova pagina
	$$('a').each(function(a){
		linkAction(a);
	});

	$$("input[type=text][title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );
	$$("textarea[title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );

	var el = document.id('shopcollage')
	if (el) new ShopCollage(el);

	new BannersListCollage();

	el = document.id('carouselUltimiArrivi');
	if (el) new HomeVerticalCarousel(el);

	el = document.id('carouselAcquistaVinci');
	if (el) new HomeVerticalCarousel(el);
});


window.addEvent('domready', function() {
	window.scroller = new Fx.Scroll(window);
	window.smoothScroll = new Fx.SmoothScroll();
	$$('.waiter').each(function(elemW){
		elemW.store("waiter", new Waiter(elemW));
	});
	$$("form").each(function(elem) {
		//Security token
		var secToken = elem.getElement(".security");
		if (secToken && secToken.get("tag")=="input")
			new Request({
				url: "/antibotkey.ajax",
				data: {name: secToken.get("name")},
				onSuccess: function(key) {
					secToken.set("value", key);
				}
			}).send();

		//Validator
		elem.store("validator", new AdvancedFormValidator(elem, {
			warningPrefix: "",
			errorPrefix: ""
		}));
		if (elem.hasClass("target-blank")) elem.target = "_blank";
		if (elem.hasClass("waiter")) elem.store("waiter", new Waiter(elem));
		elem.addEvent("submit", function(e) {
			e = new Event(e);
			if (this.retrieve("validator").validate()) {
				var waiter = this.retrieve("waiter");
				if (waiter) waiter.start();
				return true;
			} else {
				e.stop();
				return false;
			}
		}.bindWithEvent(elem));
	});

	$$('.menuElement').each(function(li){
		if ($defined(li.getElement('.submenu'))){
			var submenu = li.getElement('.submenu');
			var link = li.getChildren('a')[0];
			li.addEvent('mouseenter', function(){
				submenu.setStyle('display','block');
				link.addClass('over');
			});
			li.addEvent('mouseleave', function(){
				submenu.setStyle('display','none');
				link.removeClass('over');
			});
		}
	}, this);

	$$('.countdown').each( function(element) {
		new CountDown(element);
	} );
});
