var Site = {
	start: function() {
		var galleries = $(document.body).getElements(".gallery");
		galleries.each(function(gallery) {
			new Carousel(gallery);
		});

		var calculator = $("calculator");
		if(calculator) {
			new Calculator(calculator);
		}
	}
};

var Calculator = new Class({
	initialize: function(element) {
		this.element = $(element);

		this.metersWhiteField = $("meters-white-field");
		this.metersColoredField = $("meters-colored-field");
		this.metersCoverFloorField = $("meters-cover-floor-field");
		this.coverSelfField = $("cover-self-field");
		this.latexField = $("latex-field");
		this.ageObjectField = $("age-object-field");

		this.subTotalElement = $("calculator-subtotal");
		this.taxPercentElement = $("calculator-tax-percentage");
		this.taxAmountElement = $("calculator-tax-amount");
		this.totalElement = $("calculator-total");

		this.fields = this.element.getElements("input, select, textarea");
		this.fields.each(function(field) {
			field.addEvent("change", this.calculate.bind(this));
			field.addEvent("keyup", this.calculate.bind(this));
		}.bind(this));

		this.calculate();
	} ,

	calculate: function() {
		var price = 0;
		var taxRate = 19;
		var metersTotal = 0;

		var metersWhite = this.metersWhiteField.get("value").toFloat();
		if(!isNaN(metersWhite)) {
			price += metersWhite * 3.25;
			metersTotal += metersWhite;
		} 

		var metersColored = this.metersColoredField.get("value").toFloat();
		if(!isNaN(metersColored)) {
			price += metersColored * 4;
			metersTotal += metersColored;
		}

		var metersCoverFloor = this.metersCoverFloorField.get("value").toFloat();
		if(!isNaN(metersCoverFloor)) {
			price += metersCoverFloor * 0.5;
		}

		var coverSelf = this.coverSelfField.get("value") == "true";
		price += coverSelf ? 0 : metersTotal * 1.25;

		var latex = this.latexField.get("value");
		switch(latex) {
			case "Afwasbaar":
				price += metersTotal * 1.25;
				break;
			case "Schrobvast":
				price += metersTotal * 2.50;
				break;
		}

		var ageObject = this.ageObjectField.get("value");
		switch(ageObject) {
			case "Ouder dan 2 jaar":
				taxRate = 6;
				break;
		}

		var tax = (price / 100) * taxRate;
		var total = price + tax;

		this.subTotalElement.set("text", this.formatMoney(price));
		this.taxPercentElement.set("text", taxRate);
		this.taxAmountElement.set("text", this.formatMoney(tax));
		this.totalElement.set("text", this.formatMoney(total));
	} ,

	formatMoney: function(number) {
		var number = number.round(2);
		var string = number.toString();

		var arParts = string.split(".");
		var intPart = arParts[0];
		var decPart = (arParts.length > 1 ? arParts[1] : '');
		decPart = (decPart + "00").substr(0, 2);

		return intPart + "," + decPart;
	}
});

/**
 * Carousel
 */
var Carousel = new Class({
	initialize: function(element) {
		this.element = $(element);

		this.wrap = this.element.getElement(".wrap");

		this.width = 160; // this.wrap.getCoordinates().width;
		this.position = this.wrap.getScroll();

		this.items = this.wrap.getElement("ul");
		this.activeItem = this.items.getFirst();

		this.scroll = new Fx.Scroll(this.wrap);

		var navigation = new Element("p", {"class": "navigation"}).inject(this.element);

		this.previousLink = new Element("a", {
			"href": "#",
			"class": "previous-link",
			"html": "<span>Vorige</span>",
			"events": {
				"click": this.previousClick.bindWithEvent(this)
			}
		}).inject(navigation);

		this.nextLink = new Element("a", {
			"href": "#",
			"class": "next-link",
			"html": "<span>Volgende</span>",
			"events": {
				"click": this.nextClick.bindWithEvent(this)
			}
		}).inject(navigation);

		this.updateNavigation();
    },

	next: function() {
		this.to(this.activeItem.getNext(), this.width, 0);
	},

	previous: function() {
		this.to(this.activeItem.getPrevious(), -this.width, 0);
	},

	to: function(item, deltaX, deltaY) {
		if(item) {
			this.activeItem = item;
			this.position.x += deltaX;
			this.position.y += deltaY;
			this.scroll.start(this.position.x, 0);
		}

		this.updateNavigation();
	},

	updateNavigation: function() {
		if(this.activeItem) {
			if(this.activeItem.getNext()) {
				this.nextLink.removeClass("disabled");
			} else {
				this.nextLink.addClass("disabled");
			}

			if(this.activeItem.getPrevious()) {
				this.previousLink.removeClass("disabled");
			} else {
				this.previousLink.addClass("disabled");
			}
		} else {
			this.nextLink.addClass("disabled");
			this.previousLink.addClass("disabled");
		}
	},

	nextClick: function(event) {
		event.preventDefault();

		this.next();
	},

	previousClick: function(event) {
		event.preventDefault();

		this.previous();
	}
});

window.addEvent("domready", function() {
	Site.start();
});
