
// =========================================================================================================
// ========================    POBIERANIE OBIEKTOW    ======================================================
// =========================================================================================================

// @function $
// @descr Cross-Browser do pobieranie elementow
// @input
//		* e - ID elementu(-ów) do pobrania
// @output
//		* obiekt(-y)
// @example
//		c: $ ('id_elementu');

function $ () {
	var elements = [],
		e, i, imax;
	for (i=0, imax=arguments.length; i<imax; i++) {
		e = arguments[i];
		if (typeof e == 'string')
			e = document.getElementById(e);
		if (imax == 1)
      		return e;
		elements.push(e);
	}
	return elements;
}





// @function getElementsByClassName
// @descr Zwraca liste elementow wystepujacych na stronie, zawierajacych okreslona klase
// @input
//		* node - wezel od ktorego ma byc rozpoczete przeszukiwanie - uchwyt obiektu
//		* clName - nazwa poszukiwanej klasy
// @output tablica pasujacych elementow
// @example
// c: getElementsByClassName ($('main'), 'moja_klasa')

function getElementsByClassName (node, clName) {
	try {
	    var classElements = [];
	    var reg = new RegExp('(^| )'+clName+'( |$)');
	    var nodeElements = node.getElementsByTagName("*");
	    for (var i=0; i<nodeElements.length; i++)
	        if (reg.test(nodeElements[i].className))
				classElements.push(nodeElements[i]);
	    return classElements;
    }
    catch (e) {
    	exceptionAlert ('Exception in getElementsByClassName function.', e);
		return false;
    }
}

// @function hasClassName
// @descr Czy elementowi zostala nadana wymieniona klasa
// @input
//		* node - wezel na ktorym bedzie dokonywane sprawdzanie
//		* className - nazwa poszukiwanej klasy
// @output bool
// @example
// c: hasClassName (this, 'jakas_klasa')

function hasClassName (node, className) {
	if (!(node = $(node))) return;
	var cn = node.className; 
	return (cn.length && (cn == className || cn.match (new RegExp("(^|\\s)" + className + "(\\s|$)"))));
}

// @function addClassName
// @descr Dodawanie klasy
// @input
//		* node - wezel na ktorym bedzie przeprowadzana operacja
//		* className - nazwa klasy
// @output bool
// @example
// c: addClassName (this, 'jakas_klasa')

function addClassName (node, className) {
	if (!(node = $(node)) || hasClassName(node, className)) return;
	node.className += (node.className ? ' ' : '') + className;
}

// @function removeClassName
// @descr Usuwanie klasy
// @input
//		* node - wezel na ktorym bedzie przeprowadzana operacja
//		* className - nazwa klasy
// @output bool
// @example
// c: removeClassName (this, 'jakas_klasa')

function removeClassName (node, className) {
	if (!(node = $(node))) return;
	node.className = node.className.replace (new RegExp("(^|\\s+)"+className+"(\\s+|$)"), ' ');
}

// @function toggleClassName
// @descr Naprzemienne usuwanie/dodawanie klasy
// @input
//		* node - wezel na ktorym bedzie przeprowadzana operacja
//		* className - nazwa klasy
// @output bool
// @example
// c: toggleClassName (this, 'jakas_klasa')

function toggleClassName (node, className) {
	if (!(node = $(node))) return;
	if (hasClassName(node, className)) {
		removeClassName (node, className);
	} else {
		addClassName (node, className);
	}
}

// inicjalizacja listy dla obiektow
var buttons = new Array();

// inicjalizacja zmienych konfiguracyjnych
var FIRST_ELEMENT, TIME_DELAY;


function random_val() {
    // modulo przez ilosc elementow w tablicy adress
    return Math.round(Math.round(Math.random()*10)) % 7;
}

adress = new Array();
adress["#witamy"]           = 0;
adress["#domeny"]           = 1;
adress["#serwery"]          = 2;
adress["#poczta"]           = 3;
adress["#e-commerce"]       = 4;
adress["#e-marketing"]      = 5;
adress["#bezpieczenstwo"]   = 6;

function menu_on_main() {
    var nr, item, tmp_tag;
    var main_obj        = $("tabsMenu");
    var main_obj_length = $("tabsMenu").getElementsByTagName("li").length;
    
    // dla kazdego elementu li w glownym elemencie ul
    for (item = 0; item < main_obj_length ; ++ item) {
        // jezeli element li posiada link, a link ten w koncu id ma numer odpowiadajacy jakiemus elementowi 'contentXX'
        if ( $("tabsMenu").getElementsByTagName("li")[item].getElementsByTagName("a").length ) {
                tmp_tag = $("tabsMenu").getElementsByTagName("li")[item].getElementsByTagName("a")[0];
                nr      = tmp_tag.id.match(/[\d]+$/);

                if ($("content" + nr)) {
                    // tworzenie instancji obiektu odpowiadajacej linkowi w menu
                    buttons[parseInt(nr)] = new menu_btn(nr, tmp_tag.id);
                }
        }
    }


    // ustawienie zmiennej konfiguracyjnej wg hasha w adresie
    if (location.hash && ! isNaN(adress[location.hash])) {
        FIRST_ELEMENT = adress[location.hash];
    }

// validacja zmiennych konfiguracyjnych
    // jezeli nie istnieje
    if (! FIRST_ELEMENT && isNaN(FIRST_ELEMENT)) {
        buttons[0].activation();
    }
    // jezeli jest liczba
    else if (! isNaN(FIRST_ELEMENT) && buttons[FIRST_ELEMENT] instanceof menu_btn) {
        buttons[FIRST_ELEMENT].activation();
    }
    // jezeli jest liczba w postaci stringu
    else if (/^[\d]+$/.test(FIRST_ELEMENT) && buttons[parseInt(FIRST_ELEMENT)] instanceof menu_btn) {
        buttons[parseInt(FIRST_ELEMENT)].activation();
    }
    // jezeli nie jest liczba (bo dopuszczamy wpisanie id palucha, albo warstwy z contentem)
    else if(isNaN(FIRST_ELEMENT) && buttons[parseInt(FIRST_ELEMENT.match(/[\d]+$/))] instanceof menu_btn) {
        buttons[parseInt(FIRST_ELEMENT.match(/[\d]+$/))].activation();
    }
    // jezeli nie zalapalo sie do zadnego z powyzszych
    else {
        buttons[0].activation();
    }

    // jezeli jest liczba zapisana w postaci stringu
    if (isNaN (TIME_DELAY) && /^[\d]+$/.test(TIME_DELAY)) {
        TIME_DELAY = parseInt(TIME_DELAY);
    }
    // jezeli zmienna jest mniejsza niz 0, albo wieksza niz 5 sekund
    else if(TIME_DELAY < 0 || TIME_DELAY > 5000) {
        TIME_DELAY = 400;
    }
    // jezeli zmienna bedzie pusta
    else if (! TIME_DELAY && isNaN (TIME_DELAY) ) {
        TIME_DELAY = 400;
    }

}
// glowna funkcja do tworzenia obiektow dla lewego menu
function menu_btn (nr, id) {
    this.nr               = nr;
    this.btn              = $(id);
    this.id               = id;
    this.content_box      = $("content" + this.nr);
    // aktywuje przycisk/link i odpowiednie pole z trescia strony,
    // wywoluje deaktywacje wszystkich do tej chwili aktywnych przyciskow/linkow oraz pol z trescia
    this.activation       = function () {
        var item;
        var nr             = parseInt(this.id.match(/[\d]+$/));
        var buttons_length = buttons.length;
        var act_btn        = buttons[nr].btn;

        for (item = 0; item < buttons_length; ++item ) {
            buttons[item].deactivation();
        }

        addClassName (buttons[nr].content_box, "active");

        if (hasClassName (act_btn, "tabTopMenuParent")) {
            removeClassName (act_btn, "tabTopMenuParent");
            addClassName (act_btn, "tabTopMenuActive");
        }
        else if (hasClassName (act_btn, "tab")) {
            removeClassName (act_btn, "tab");
            addClassName (act_btn, "tabActive");
        }
    }
    // aktywuje przycisk/link i odpowiednie pole z trescia strony
    this.deactivation     = function () {
        var nr      = parseInt(this.id.match(/[\d]+$/));
        var act_btn = buttons[nr].btn;

        removeClassName (buttons[nr].content_box, "active");

        if (hasClassName (act_btn, "tabTopMenuActive")) {
            removeClassName (act_btn, "tabTopMenuActive");
            addClassName (act_btn, "tabTopMenuParent");
        }
        else if (hasClassName (act_btn, "tabActive")) {
            removeClassName (act_btn, "tabActive");
            addClassName (act_btn, "tab");
        }
    }
    // dziala po najechaniu kursorem na link/przycisk
    // wywoluje funkcje aktywujaca
    // wlacza Timer - dziala z opoznieniem czasowym zgodnym z konfiguracja
    this.btn.onmouseover = function () {
        var nr = parseInt(this.id.match(/[\d]+$/));
        Timer  = setTimeout("buttons[" + nr + "].activation()", TIME_DELAY);
    }
    // dziala po opuszczaniu kursora linku/przycisku
    // deaktywuje odliczanie Timera
    this.btn.onmouseout   = function () {
        clearInterval(Timer);
    }
}

