/*	JavaScript fuer Bestellungen von BVK-Publikationen */

/* Debug modes: content, alert, none */
var DEBUG_MODE = "content";

var ORDER = null;
var ORDER_COOKIE_NAME = "bvk_bestellzettel";
var ORDER_COOKIE_VALUE = "order";

var ORDER_ITEM_ID_PREFIX = "order_item_";
var ORDER_ITEM_QUANTITY_ID_PREFIX = ORDER_ITEM_ID_PREFIX + "quantity_";
var ORDER_ITEM_NOTATION_ID_PREFIX = ORDER_ITEM_ID_PREFIX + "notation_";

/*
 *	Klasse OrderItem
 */

function OrderItem() {
	this.id = -1;
	this.notation = null;
	this.quantity = 0;
}

OrderItem.prototype.getId = function() {
	if (this.id < 0) {
		orderError("OrderItem.id nicht gesetzt");
	}
	return this.id;
}

OrderItem.prototype.getNotation = function() {
	if (this.notation == null  ||  this.notation.length == 0) {
		orderError("OrderItem.notation nicht gesetzt");
	}
	return this.notation;
}

OrderItem.prototype.getQuantity = function() {
	return this.quantity;
}

OrderItem.prototype.isVisible = function() {
	return this.getQuantity() > 0;
}

OrderItem.prototype.set = function(id, notation) {
	this.id = id;
	this.notation = notation;
}

OrderItem.prototype.setFromString = function(id, s) {
	var data = s.split("\t", 2);
	if (data.length != 2) {
		orderError("Trennzeichen '\\t' fehlt in '" + s);
	}
	var notation = data[0];
	var quantity = eval(data[1]);
	this.set(id, notation);
	this.update(quantity);
}

OrderItem.prototype.toString = function() {
	return this.getNotation() + "\t" + this.getQuantity();
}

OrderItem.prototype.display = function() {
	var itemDiv = document.getElementById(ORDER_ITEM_ID_PREFIX + this.id);
	if (!this.isVisible()) {
		if (itemDiv != null) {
			itemDiv.style.display = "none";
		}
	}
	else {
		var quantityInput;
		if (itemDiv != null) {
			itemDiv.style.display = "block";
			quantityInput = document.getElementById(ORDER_ITEM_QUANTITY_ID_PREFIX + this.id);
		}
		else {
			quantityInput = document.createElement("input");
			quantityInput.id = ORDER_ITEM_QUANTITY_ID_PREFIX + this.id;
			quantityInput.className = "order_item_quantity";
			quantityInput.type = "text";

			var notationText = document.createTextNode(this.getNotation());

			var notationP = document.createElement("p");
			notationP.className = "order_item_notation";
			notationP.appendChild(notationText);

			var itemDiv = document.createElement("div");
			itemDiv.id = ORDER_ITEM_ID_PREFIX + this.id;
			itemDiv.className = "order_item";
			itemDiv.appendChild(quantityInput);
			itemDiv.appendChild(notationP);

			var orderDiv = document.getElementById("order_items");
			orderDiv.appendChild(itemDiv);
		}
		quantityInput.value = this.getQuantity();
		quantityInput.onchange = updateOrder;
	}
}

OrderItem.prototype.update = function(quantity) {
	this.quantity = quantity;
	this.display();
}

/*
 *	Klasse Order
 */

function Order() {
	this.items = new Array();
	var cookie = new Cookie(ORDER_COOKIE_NAME);
	var lines  = cookie.getValue(ORDER_COOKIE_VALUE);
	if (lines != null) {
		var ss = lines.split("\n");
		for (var id = 0; id < ss.length; ++id) {
			var s = ss[id];
			var item = new OrderItem();
			item.setFromString(id, s);
			this.items[id] = item;
		}
	}
}

Order.prototype.isVisible = function() {
	for (var i = 0; i < this.items.length; ++i) {
		var item = this.items[i];
		if (item.isVisible()) {
			return true;
		}
	}
	return false;
}

Order.prototype.save = function() {
	var value = "";
	for (var i = 0; i < this.items.length; ++i) {
		var item = this.items[i];
		if (!item.isVisible()) {
			continue;
		}
		if (i > 0) {
			value += "\n";
		}
		value += item.toString();
	}
	var cookie = new Cookie(ORDER_COOKIE_NAME);
	cookie.setValue(ORDER_COOKIE_VALUE, value);
	cookie.send();
}

Order.prototype.updateItem = function(notation, quantity) {
	var item = this.getItem(notation);
	item.update(quantity);
	this.display();
	this.save();
}

Order.prototype.getItem = function(notation) {
	for (var i = 0; i < this.items.length; ++i) {
		var item = this.items[i];
		if (item.getNotation() == notation) {
			return item;
		}
	}
	var item = new OrderItem();
	var id = this.items.length;
	item.set(id, notation);
	this.items[id] = item;
	return item;
}

Order.prototype.display = function() {
	/*	tmf 2010-01-26:
	 *	Im Januar 2010 Ã¤nderte sich die Kundenanforderung bzgl. der Anzeige des Merkzettels.
	 *	Der Merkzettel wird nur noch gezeigt, wenn Artikel bestellt sind; die "No-Order-
	 * 	Message" ist also obsolet. Sie bleibt aber bis auf weiteres erhalten.
	 *
	 *  Ralf Freit (resch media) letzte Änderung: 29.04.2010
	 *  Auf wunsch des Kunden wurde order_note sowie noOrderMesg
	 *  Default OFF gestellt
	 */
	var orderNote = document.getElementById("order_note");
	var noOrderMesg = document.getElementById("no_order_mesg");
	var orderPanel = document.getElementById("order_panel");
	if (this.isVisible()) {
		orderNote.style.display = "block";
		orderPanel.style.display = "block";
		noOrderMesg.style.display = "none";
	}
	else {
		orderNote.style.display = "none";
		orderPanel.style.display = "none";
		noOrderMesg.style.display = "none";
	}
}

Order.prototype.update = function() {
	for (var id = 0; id < this.items.length; ++id) {
		var item = this.items[id];
		if (!item.isVisible()) {
			continue;
		}
		quantityInputId = ORDER_ITEM_QUANTITY_ID_PREFIX + id;
		var quantityInput = document.getElementById(quantityInputId);
		if (quantityInput == null) {
			orderError("quantityInput ist null bei ID=" + id);
			return false;
		}
		var strQuantity = quantityInput.value;
		var quantity = Number(strQuantity);
		if (isNaN(quantity)) {
			orderError("Ungueltige Anzahl '" + strQuantity + "' bei Position '" + item.getNotation() + "' auf dem Bestellzettel");
			//quantityInput.focus();
			return false;
		}
		item.update(quantity);
	}
	this.display();
	this.save();
	return true;
}

Order.prototype.mail = function() {
	if (this.update()) {
		/*	Hilfe zur Anzeige von alert-Meldungen mit Umlauten:
		 *	http://www.salesianer.de/util/alert-umlaute.html
		 */
		var alertMesg = "Um Ihre Bestellung abzuschicken, wird jetzt Ihr E-Mail-Programm gestartet."
				+ " Bitte erg%E4nzen Sie die E-Mail um Ihre Lieferadresse!"
				+ "\n\nVielen Dank!"
			;
		alert(unescape(alertMesg));

		var to = "bestellung@kalk.de";
		var subject = "Bestellung von Publikationen";
		var mesg = "";
		for (var id = 0; id < this.items.length; ++id) {
			var item = this.items[id];
			if (!item.isVisible()) {
				continue;
			}
			mesg += "\n\n" + item.getQuantity() + " x " + item.getNotation();
		}
		var uri = "mailto:" + to + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(mesg);
		// alert(uri);
		location.href = uri;
	}
}

Order.prototype.clear = function() {
	for (var i = this.items.length; i > 0; --i) {
		var item = this.items[i - 1];
		item.update(0);
	}
	this.display();
	this.save();
}

/* Oeffentliche Funktionen */

function orderError(mesg) {
	alert(mesg);
}

function noteOrderItem(notation, quantity) {
	ORDER.updateItem(notation, quantity);
}

function displayOrder() {
	if (ORDER == null) {
		ORDER = new Order();
	}
	ORDER.display();
}

function updateOrder() {
	ORDER.update();
}

function mailOrder() {
	ORDER.mail();
}

function clearOrder() {
	ORDER.clear();
}

function debug(text) {
	if (DEBUG_MODE == "content") {
		var div = document.getElementById("col2_content");
		var textNode = document.createTextNode(text);
		div.appendChild(textNode);
		var br = document.createElement("br");
		div.appendChild(br);
	}
	else if (DEBUG_MODE == "alert") {
		alert(text);
	}
	else if (DEBUG_MODE != "none") {
		alert("UngÃ¼ltiger Debug-Modus '" + DEBUG_MODE + "'");
	}
}
