﻿// JScript File

Type.registerNamespace('Dice');

// Tabset view
Dice.Tabset = function(associatedElement) {
	Dice.Tabset.initializeBase(this, [associatedElement]);

	var _viewIndex = 0;
	var _selectedTabStyle = '';

	var _viewHeads = [];
	var _viewPanes = [];

	var _viewClickHandler;

	this.get_viewIndex = function() {
		return _viewIndex;
	}

	this.set_viewIndex = function(value) {
		if (_viewIndex != value) {
			_viewIndex = value;
			_ShowCurrentPane.call(this);
			this.raisePropertyChanged('viewIndex');
		}
	}

	this.get_selectedTabStyle = function() {
		return _selectedTabStyle;
	}

	this.set_selectedTabStyle = function(value) {
		_selectedTabStyle = value;
	}

	this.dispose = function() {
		if (_viewClickHandler) {
			for (var i = _viewHeads.length - 1; i >= 0; i--) {
				var head = _viewHeads[i];

				if (head) {
					head.detachEvent('onclick', _viewClickHandler);
				}
			}

			delete _viewClickHandler;
			delete _viewHeads;
			delete _viewPanes;
		}

		Dice.Tabset.callBaseMethod(this, 'dispose');
	}

	Dice.Tabset.registerBaseMethod(this, 'dispose');

	this.initialize = function() {
		Dice.Tabset.callBaseMethod(this, 'initialize');

		_viewClickHandler = Function.createDelegate(this, _onViewClick);
    
		// Get tabstrip first.
		var tabstrip;
		var panes;
		
		var children = this.element.childNodes;
		
		for (var i = 0; i < children.length; i++) {
			var child = children[i];
			
			if (child.nodeName == 'UL') {
					tabstrip = child.childNodes;
					break;
			}
		}
		
		for (var i = 0, p = 0; i < tabstrip.length; i++) {
			var child = tabstrip[i];
			
			if (child.nodeName == 'LI') {
					_viewHeads.add(child);
					child.viewIndex = p++;
					child.attachEvent('onclick', _viewClickHandler);
			}
		}
		
		for (var i = 0; i < children.length; i++) {
			var child = children[i];

			if (child.nodeName == 'DIV') {
					_viewPanes.add(child);
			}
		}

		_ShowCurrentPane.call(this);
	}

	Dice.Tabset.registerBaseMethod(this, 'initialize');

	function _onViewClick() {
		var pane = window.event.srcElement;
		while (pane && (typeof(pane.viewIndex) == 'undefined')) pane = pane.parentNode;
		this.set_viewIndex(pane.viewIndex);
		return false;
	}

	function _ShowCurrentPane() {
		for (var i = _viewPanes.length - 1; i >= 0; i--) {
			var selectedTab = _viewHeads[i];
			var pane = _viewPanes[i];
			
			if (i != _viewIndex) {
					selectedTab.className = '';
					pane.style.display = 'none';
			} else {
					selectedTab.className = _selectedTabStyle;
					pane.style.display = 'block';
			}
		}
	}

	this.getDescriptor = function() {
		var td = Dice.Tabset.callBaseMethod(this, 'getDescriptor');
    
		td.addProperty('viewIndex', Number);
		td.addProperty('selectedTabStyle', String);
		return td;
	}

	Dice.Tabset.registerBaseMethod(this, 'getDescriptor');
}

Dice.Tabset.registerClass('Dice.Tabset', Sys.UI.Control);
Sys.TypeDescriptor.addType('dice', 'tabset', Dice.Tabset);


