/***
 * javascriptova knihovna objektu TSwitcher-browsing
 * VA-Admin
 */

/**
 * Dientifikace divu zalozek (ID)
 * V místě vytváření objektu se vypíše <div> s timto ID a následně bude
 * naplněn záložkami z volání metody addTab90
 */
//TSwitcher.prototype.tabsId;

/**
 * hodnotu shovani celeho obsahu
 */
//TSwitcher.prototype.hide = false;


/**
 * konstruktor objektu TSwitcher
 * @param string point Název proměnné objektu v globálním kontextu
 * @param string classShow Název css třídy aktivní záložky (obsahu)
 * @param string classHide Název css třídy neaktivní záložky (obsahu)
 *
 * @example
 * <script>
 *   // vytvoření objektu tabbed(u)
 *   var tabbed1 = new TSwitcher("tabbed1", "class-active", "class-inactive");
 *   // přidání jedné záložky s popiskem
 *   tabbed1.addTab("idTab1", "idBox1", "Záložka 1");
 *   // přidání druhé záložky s dznamickým popiskem z inputu
 *   tabbed1.addTab('idTab2", "idBox2", null, "textInput");
 *   // vynulování stavu záložek
 *   tabbed1.reset();
 * </script>
 */
TSwitcher = function(point, classShow, classHide){
	this.point = point;
	this.classShow = classShow;
	this.classHide = classHide;

	this.tabs = new Array();
	this.boxes = new Array();
	this.tabHistory = new Array();

	this.tabsId = Math.round(Math.random() * 1000) + 'tabs' + new Date().getTime();
	document.write('<div id="' + this.tabsId + '"></div>');
}

/**
 * Řetězec (název) proměnné objektu v globalním prostoru
 */
//TSwitcher.point;

/**
 * pole ID elementu zalozek
 */
//TSwitcher.tabs = new Array();
/**
 * pole ID elementu obsahu zalozek
 */
//TSwitcher.boxes = new Array();

/**
 * definice tridy pro zmenu stylu zalozky
 */
//TSwitcher.classShow;
//TSwitcher.classHide;


/**
 * Metoda objektu pro pridani dalsi zalozky do seznamu
 * @param string tabId ID zalozky v HTML
 * @param string boxId ID obsahu zalozky v HTML
 * @param string label Popisek nove vytvorene zalozky
 * @param string inputId ID inputu, ze ktereho se bude brat nazev zalozky
 * @return void
 */
TSwitcher.prototype.addTab = function(tabId, boxId, label, inputId, prefix){
	this.tabs[this.tabs.length] = tabId;
	this.boxes[this.boxes.length] = boxId;

	// vztvoření nové záložky
	if (label || inputId){
		tabBox = document.getElementById(this.tabsId);
		tab = document.createElement('a');
		tab.id = tabId;
		tab.href = '#';
		tab.className = this.classHide;

		var oldClick = (tab.onclick ? tab.onclick : function() {});
		eval('tab.onclick = function(){ ' + this.point + '.switchTab("' + tabId + '"); oldClick(); return false;}');

		if (label){
			tab.innerHTML = label;
		}else if (inputId){
			input = document.getElementById(inputId);
			tab.innerHTML = (prefix ? prefix : '') + input.value;
			eval('input.onfocus = function(){ ' + this.point + '.labelTab("' + tabId + '", this.value); }');
			eval('input.onblur = function(){ ' + this.point + '.labelTab("' + tabId + '", this.value); }');
			eval('input.onkeydown = function(){ ' + this.point + '.labelTab("' + tabId + '", this.value); }');
			eval('input.onkeyup = function(){ ' + this.point + '.labelTab("' + tabId + '", this.value); }');
		}

		document.getElementById(this.tabsId).appendChild(tab);
	}
}


/**
 * Metoda pro přidání další záložky do seznamu a vynulování stavu záložek
 */
TSwitcher.prototype.addTabReset = function(tabId, boxId, label, inputId, prefix){
	this.addTab(tabId, boxId, label, inputId, prefix);

	this.reset();
}


/**
 * Metoda objektu pro přidání další záložky do seznamu - bude aktivní
 */
TSwitcher.prototype.addTabSwitch = function(tabId, boxId, label, inputId, prefix){
	this.addTab(tabId, boxId, label, inputId, prefix);

	this.switchTab(tabId);
}


/**
 * Metoda objektu pro odebrání zalozky ze seznamu, aktivuje se poslední vybraná záložka
 */
TSwitcher.prototype.removeTab = function(tabId){
	document.getElementById(this.tabsId).removeChild(document.getElementById(tabId));

	this.optimizeHistory(tabId);
	this.switchLast();
}


/**
 * Metoda pro přejmenování záložky - změna popisku
 * Pro inputId
 */
TSwitcher.prototype.labelTab = function(tabId, label){
	document.getElementById(tabId).innerHTML = label;
}


/**
 * metoda vynuluje skupinu zalozek - aktivuje prvni zalozku v seznamu
 */
TSwitcher.prototype.reset = function(){
	
	
	this.switchTab(this.tabs[0]);		
	

	/* Novak - tento kod tu byl puvodne, ale pri pouziti knihovny Prototype nefunguval v IE 
	for (i in this.tabs){				
		this.switchTab(this.tabs[i]);		
		break;
	}*/
}


/**
 * Samotná procesní metoda pro přepínání záléžek
 */
TSwitcher.prototype.switchTab = function(tabId){
	this.lastTab = this.activeTab;

	for (i in this.tabs){
		if (this.tabs[i] == tabId){
			if (this.displayTab(this.boxes[i], true))
				document.getElementById(this.tabs[i]).className = this.classShow;
				this.addHistory(this.tabs[i]);

		} else {
			if (this.displayTab(this.boxes[i], false))
				document.getElementById(this.tabs[i]).className = this.classHide;
		}
	}
}


/**
 * Metoda pro přepnutí na poslední zvolenou záložku (historie)
 */
TSwitcher.prototype.switchLast = function(){
	// vybere poslední existující záložku
	tab = this.tabHistory[(this.tabHistory.length - 1)];
	this.switchTab(tab);
}


/**
 * Pročistí historii od neexistujících tabů
 */
TSwitcher.prototype.addHistory = function(tabId){
	if (this.tabHistory[this.tabHistory.length - 1] != tabId){
		this.tabHistory[this.tabHistory.length] = tabId;
	}
}


/**
 * Pročistí historii od neexistujících tabů
 */
TSwitcher.prototype.optimizeHistory = function(removedTab){
	tmpArr = new Array();
	var last = null;
	for (var i in this.tabHistory){
		if (this.tabHistory[i] != removedTab && this.tabHistory[i] != last){
			tmpArr[tmpArr.length] = this.tabHistory[i];
			last = this.tabHistory[i];
		}
	}

	this.tabHistory = tmpArr;
}


/**
 * Vynuluje seznam historie
 */
TSwitcher.prototype.resetHistory = function(){
	this.tabHistory = new Array();
}


/**
 * interni metoda switchTab pro zobrazeni jednotlivych zalozek
 */
TSwitcher.prototype.displayTab = function(divID, show){
	box = document.getElementById(divID);
	if (!box) return false;

	if (show == true || (typeof(show) == 'undefined' && (box.style.display || box.style.display == 'none'))) {
		box.style.visibility = 'visible';
		box.style.display = 'block';

	} else {
		box.style.visibility = 'hidden';
		box.style.display = 'none';
	}

	return true;
}

