(function() {
    var window = this, undefined, widget = window.jsx.widget;

    jsx.widget.ListView = function(element) {
		var self = this, buttons, div;
		element = $(element);
		this.element = element;
		this.scrollPanel = element.find("*.scroll-panel");
		this.scrollContent = element.find("*.scroll-content");
		this.items = element.find("*.list-item");
		this.items.each(
			function(i) {
				$(this).click(
					function(event) {
						var ev = event;
						ev.preventDefault();
						ev.source = this;
						ev.index = i;
						self.fireClickEvent(event);
					}
				);
			}
		);
		this.listeners = [];
		this.selectedItem = null;
		this.index = null;
		this.selectItem(1);
	};
	jsx.widget.ListView.prototype.size = function() {
		return this.items.size();
	}
	jsx.widget.ListView.prototype.selectItem = function(index) {
		var item, top;
		if (index !== this.index) {
			item = this.items.eq(index);
			
			if (this.selectedItem) {
				this.selectedItem.removeClass('selected');
				this.selectedItem.css('width', '');
				this.selectedItem.css('height', '');
			}
			item.addClass('selected');
			//item.width(item.width() - item.outerWidth() + item.innerWidth());
			//item.height(item.height() - item.outerHeight() + item.innerHeight());
			if (item.position() !== null) {
				top = - item.position().top + this.scrollPanel.height()/2 - item.height()/2;
				if (top < -this.scrollContent.height() + this.scrollPanel.height()) {
					top = -this.scrollContent.height() + this.scrollPanel.height();
				}
				if (top > 0) {
					top = 0;
				}
				this.scrollContent.animate({top:top});
			}
			
			this.selectedItem = item;
			this.index = index;
		}
	};
	jsx.widget.ListView.prototype.addListener = function(listener) {
		if ( $.inArray(listener, this.listeners) < 0 ) {
			this.listeners.push(listener);
		};
	};
	jsx.widget.ListView.prototype.removeListener = function(listener) {
		var i;
		if ( (i = $.inArray(listener, this.listeners)) > -1 ) {
			this.listeners.splice(i, 1);
		};
	};
	jsx.widget.ListView.prototype.fireClickEvent = function(event) {
		$.each(this.listeners, 
			function(i) {
				if (this.onClick) {
					this.onClick(event);
				}
			}
		);
	};
})();
