
/*
 * date: Sun Sep  6 23:18:55 EDT 2009
 * copyright (c) 2009, Anton Yudin
 */


function ItemManager() {
	this.loadedItem = null;
	this.currentCategoryIndex = 0;
	this.pageSize = 5;
	this.currentPageIndex = 0;
	this.currentItemIndex = 0;


	this.handle = function(content) {
		eval('var item = ' + content + ';');
		this.loadedItem = item;
	}

	this.setup = function(name) {
		this.load(name);
		this.renderCategories();
		this.renderItems();
		this.renderSelectedItem();
		this.renderPager();
	}

	this.load = function(name) {
		ajax_load(
			name,
			'',
			this,
			'handle',
			'text/plain',
			true,
			'GET',
			'text/plain'
		);
		return this.loadedItem;
	}

	this.renderCategories = function() {
		var element = document.getElementById("categories-container");
		var html = '';
		for (var i = 0; i < this.loadedItem.categories.length; i++) {
			html += '<td class="' + (i == this.currentCategoryIndex? 'selected': '') + '"><a href="#" onClick="return gallery.selectCategory(\'' + this.loadedItem.categories[i].name + '\');">' + this.loadedItem.categories[i].title + '</a></td>\n';
		}
		element.innerHTML = html;
	}

	this.removeClasses = function(classString, classes) {
		var c = classString.split(' ');
		var result = '';
		for (var i = 0; i < c.length; i++) {
			var found = false;
			for (var j = 0; j < classes.length; j++) {
				if (c[i] == classes[j]) {
					found = true;
					break;
				}
			}
			if (found)
				break;
			result += c[i] + ' ';
		}
		return result;
	}

	this.renderMedia = function(url, title, width, height) {
		if (url.match(/.*swf$/)) {
		return (
'<object type="application/x-shockwave-flash" data="images/1.swf" width="' + width + '" height="' + height + '"> ' +
'	<param name="movie" value="images/1.swf" /> ' +
'	<img src="noflash.gif" width="200" height="100" alt="" /> ' +
'</object>'
			);
		} else {
			return '<img src="' + url + '" alt="' + title + '"/>';
		}
	}

	this.renderItems = function() {
		var rendered = 0;
		for (var i = this.currentPageIndex * this.pageSize; i < this.loadedItem.categories[this.currentCategoryIndex].items.length; i++) {
			var item = this.loadedItem.categories[this.currentCategoryIndex].items[i];
			var element = document.getElementById('item-' + rendered + '-container');
			var classes = this.removeClasses(element.getAttribute('class'), ['notSelected', 'selected']);
			if (i == this.currentItemIndex)
				classes += ' selected';
			else
				classes += ' notSelected';
			element.setAttribute('class', classes);
			element = document.getElementById('item-' + rendered + '-image');
			var html = this.renderMedia(item.preview, item.title, 100, 75);
			element.innerHTML = html;
			element = document.getElementById('item-' + rendered + '-link');
			element.setAttribute('title', '[' + i + ']: ' + item.title);
			rendered++;
			if (rendered >= this.pageSize)
				break;
		}
		if (rendered < this.pageSize) {
			for (var i = rendered;; i++) {
				var element = document.getElementById('item-' + rendered + '-container');
				var classes = this.removeClasses(element.getAttribute('class'), ['notSelected', 'selected']);
				classes += ' notSelected';
				element.setAttribute('class', classes);
				element = document.getElementById('item-' + rendered + '-image');
				element.innerHTML = '';
				element = document.getElementById('item-' + rendered + '-link');
				element.setAttribute('title', '');
				rendered++;
				if (rendered >= this.pageSize)
					break;
			}
		}
	}

	this.renderSelectedItem = function() {
		var item = this.loadedItem.categories[this.currentCategoryIndex].items[this.currentItemIndex];
		var element = document.getElementById('item-selected-link');
		element.setAttribute('title', '[' + this.currentItemIndex + ']: ' + item.title);
		element = document.getElementById('item-selected-image');
		var html = this.renderMedia(item.image, null, 533, 400);
		element.innerHTML = html;
		element = document.getElementById('item-selected-information');
		var price = parseFloat(item.price);
		if (
			(item.price) &&
			(price >= 0.01) &&
			(price <= 2000.0)
		) { 
			element.innerHTML = item.information + 
				'<div><form action="https://www.paypal.com/cgi-bin/webscr" method="post">' +
					'<!-- Identify your business so that you can collect the payments. -->' +
					'<input type="hidden" name="business" value="arturos@ufl.edu"/>' +
					'<!-- Specify a Buy Now button. -->' +
					'<input type="hidden" name="cmd" value="_xclick"/>' +
					'<!-- Specify details about the item that buyers will purchase. -->' +
					'<input type="hidden" name="item_name" value="' + item.title + '"/>' +
					'<input type="hidden" name="amount" value="' + price + '"/>' +
					'<input type="hidden" name="currency_code" value="USD"/>' +
					'<!-- Display the payment button. -->' +
					'<table><tr><td class="left">' +
					'<span class="price">$' + price + ' USD' + '</span></td>' +
					'<td class="right"><input type="image" class="price" name="submit" border="0" src="https://www.paypal.com/en_US/i/btn/btn_buynow_SM.gif" alt="PayPal - The safer, easier way to pay online"/>' +
					'</td></tr></table>' +
					'<img alt="" border="0" width="1" height="1" src="https://www.paypal.com/en_US/i/scr/pixel.gif"/>' +
				'</form>' +
				'</div>';
			;
		} else {
			element.innerHTML = item.information + 'this item is not available right now';
		}

		// '<a href="#" onClick="cart.addItem(\'' + item.title + '\', ' + 1 + ', ' + item.price + '); cart.save(); cart.refreshLink(); return false;"> [ Add To The Cart ] </a>';
	}

	this.renderPager = function() {
		var pageCount = this.getPageCount();
		var html = '';
		for (var i = 0; i < pageCount; i++) {
			html += '<td class="' + (i == this.currentPageIndex? 'selected': '') + '"><a href="#" onClick="return gallery.selectPage(' + i + ');">' + i + '</a></td>';
		}
		document.getElementById('pager').innerHTML = html;
	}

	this.selectPage = function(index) {
		this.currentPageIndex = index;
		this.currentItemIndex = this.currentPageIndex * this.pageSize;
		this.renderItems();
		this.renderSelectedItem();
		this.renderPager();
		return false;
	}

	this.getPageCount = function() {
		var pageCount = this.loadedItem.categories[this.currentCategoryIndex].items.length / this.pageSize;
		if (pageCount == 0)
			pageCount = 1;
		return pageCount;
	}

	this.nextPage = function() {
		var pageCount = this.getPageCount();
		if ((this.currentPageIndex + 1) >= pageCount)
			return false;
		this.selectPage(this.currentPageIndex + 1);
		return false;
	}

	this.previousPage = function() {
		if (this.currentPageIndex > 0)
			this.selectPage(this.currentPageIndex - 1);
		return false;
	}

	this.selectItem = function(index) {
		if (((this.currentPageIndex * this.pageSize) + index) < this.loadedItem.categories[this.currentCategoryIndex].items.length) {
			this.currentItemIndex = (this.currentPageIndex * this.pageSize) + index;
			this.renderItems();
			this.renderSelectedItem();
		}
		return false;
	}

	this.selectCategory = function(name) {
		for (var i = 0; i < this.loadedItem.categories.length; i++) {
			if (this.loadedItem.categories[i].name == name) {
				this.currentCategoryIndex = i;
				this.renderCategories();
				this.currentItemIndex = 0;
				this.currentPageIndex = 0;
				this.renderItems();
				this.renderSelectedItem();
				this.renderPager();
				break;
			}
		}
		return false;
	}

	this.getElementByAttribute = function(node, attributeName, attributeValue) {
		for (var i in node.childNodes) {
			if ((node.childNodes[i].nodeType == 1) && (node.childNodes[i].getAttribute(attributeName) == attributeValue))
				return node.childNodes[i];
		}
		return null;
	}

}

var gallery = new ItemManager();

