﻿var sBasketEmpty = 'пуста';
var aBasketTicketForms = ['билет', 'билета', 'билетов'];
var aBasketCurrencyForms = ['рубль', 'рубля', 'рублей'];

function BasketItem(ePosition) {
	this.iQty = parseInt(ePosition.getAttribute('quantity'));

	return this;
}

function Basket() {
	this.eBasket = document.getElementById('basketValue');
	this.eBasketLink = document.getElementById('linkToBasket');
	this.iTickets = 0;
	this.fPrice = 0;

	this.aTickets = new Array();

	return this;
}

Basket.prototype.updateValuesFromXML = function(sResponseXML) {
	if (this && this.eBasket && sResponseXML && sResponseXML.documentElement) {
		/* price */
		var eCalculated = sResponseXML.documentElement.getElementsByTagName('CALCULATEDBASKET')[0];
		if (eCalculated) {
			this.fPrice = parseFloat(eCalculated.getAttribute('totalprice'));
		}
		/* ticket quantity */
		var eBasketItems = sResponseXML.documentElement.getElementsByTagName('BASKETITEMS')[0];
		if (eBasketItems) {
			this.iTickets = 0;
			for (var i = 0; (ePosition = eBasketItems.getElementsByTagName('POSITION')[i]); i++) {
				if (ePosition.getAttribute('quantity')) {
					var iQty = parseInt(ePosition.getAttribute('quantity'));
					this.aTickets[ePosition.getAttribute('idproductRefID')] = iQty;
					this.iTickets += iQty;
				}
			}
		}
		
		this.displayValue();
	}
}

Basket.prototype.displayValue = function() {
	if (this && this.eBasket) {
		if (this.iTickets == 0 && this.fPrice == 0) {
			this.eBasket.className = 'contents empty';
			this.eBasket.innerHTML = sBasketEmpty;
			if (this.eBasketLink) this.eBasketLink.className = 'empty';
		} else {
			this.eBasket.className = 'contents';
			if (this.eBasketLink) this.eBasketLink.className = '';
			/* tickets */
			var sBasketText = 'содержит ' + this.iTickets + ' ' + rightCase(this.iTickets, aBasketTicketForms) + '<br />';
			/* price */
			sBasketText += 'на сумму ' + this.fPrice + ' ' + rightCase(this.fPrice, aBasketCurrencyForms);
			this.eBasket.innerHTML = sBasketText;
		}
	}
}



/*--------------*/
/*     Init     */
/*--------------*/

var oBasket = null;
function initBasket(sResponseXML) {
	oBasket = new Basket();
	oBasket.updateValuesFromXML(sResponseXML);
}



/*------------------------------*/
/*     additional functions     */
/*------------------------------*/

function formatNumber(fNumber, bShowFloat) {
	var sFormattedNumber = '';
	var iNumber = Math.floor(fNumber);
	var sNumber = String(iNumber);
	if (iNumber < 10000) sFormattedNumber = sNumber;
	else {
		while (sNumber.length > 3) {
			if (sFormattedNumber != '') sFormattedNumber = ' ' + sFormattedNumber;
			sFormattedNumber = sNumber.substr(sNumber.length - 3) + sFormattedNumber;
			sNumber = sNumber.substr(0, sNumber.length - 3);
		}
		sFormattedNumber = sNumber + ' ' + sFormattedNumber;
	}
	if (bShowFloat) {
		var sFloat = String(Math.round(fNumber % 1 * 100));
		if (sFloat.length < 2) sFloat += '0';
		sFormattedNumber += ',' + sFloat;
	}
	return sFormattedNumber;
}

function rightCase(fNumber, aNames) {
	var sNumber = new String(fNumber);
	if (sNumber.indexOf('.') >= 0) return aNames[1];
	if (sNumber.length > 1 && sNumber.substr(sNumber.length - 2, 1) == '1') return aNames[2];
	if (sNumber.substr(sNumber.length - 1) == '1') return aNames[0];
	if (sNumber.substr(sNumber.length - 1) > '1' && sNumber.substr(sNumber.length - 1) < '5') return aNames[1];
	return aNames[2];
}