var Page = {
    "nav": "nav",
    "cnt_t": "content_title",
    "cnt": "content",
    "ntc": "notice_space",
    "load_error": "Unknown cache error!",
    "rank": "rank_",
    "timeout": 600,
    "date_format": "dd. MM. yyyy"
};
var list = new Array();
var folding = true;
var content;
var areaSelected = false;
var xmlHttp;
/* CALENDAR */
var calendars = new Array();
function GetXmlHttpObject() {
	var xmlHttp = null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	}
	catch (e) {
		// Internet Explorer
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}
function feedList() {
	var i = 1;
	var item;
	while((item = document.getElementById('list_'+i)) != null) {
		if (item.className != 'unfold') {
			item.className = 'fold';
		}
		list[i] = item;
		i++;
	}
	content = document.getElementById(Page.cnt);
}
function fold(listId) {
	if (list.length <=0) {
		feedList();
	}
	list[listId].className = (list[listId].className == 'fold') ? 'unfold' : 'fold';
	content.style.display = 'none';
	content.style.display = 'block';
}
function foldAll(folderId, unfoldText, foldText) {
	if (list.length <=0) {
		feedList();
	}
	for(i=1; i<list.length; i++){
		list[i].className = (!folding) ? 'fold' : 'unfold';
	}
	document.getElementById(folderId).innerHTML = (!folding) ? unfoldText : foldText; 
	folding = !folding;
	content.style.display = 'none';
	content.style.display = 'block';
}
function reloadImg(imgId, url) {
	document.getElementById(imgId).src = url;
}
function selectOnce(texta) {
	if (!areaSelected) {
		var textarea = document.getElementById(texta);
		textarea.focus();
		textarea.select()
		areaSelected = true;
	}
}
function changeRank(rank, login, formID) {
	var input = document.getElementById(formID);
	input.value = login;
	var radio = document.getElementById(Page.rank+rank);
	radio.checked = true;
}
function rollNotice() {
	var notice;
	if ((notice = document.getElementById(Page.ntc)) != null) {
	    for(i=0;i<=notice.scrollHeight;i++){
	        setTimeout("document.getElementById(Page.ntc).style.height = "+i+"+'px'",i*10);
		}
	}
}
function unRollNotice() {
	var notice;
	if ((notice = document.getElementById(Page.ntc)) != null) {
	    var height = parseInt(notice.style.height);//parseInt(notice.style.height.substring(0, -2));
        for(i=height;i>=0;i--){
	        setTimeout("document.getElementById(Page.ntc).style.height = "+i+"+'px'",(height-i)*10);
		}
	   setTimeout("document.getElementById(Page.ntc).style.height = '0px'", (height)*11);
	   setTimeout("document.getElementById(Page.ntc).parentNode.removeChild(document.getElementById(Page.ntc))", (height)*12);
	}
}
function hideNotice() {
    var notica;
    if((notica = document.getElementById(Page.ntc)) != null) {
        notica.style.height = 0;
    }   
}

/* page tabs caching */
var pageCache = new Array();
var activeTab = null;
var tabLinks = new Array();
var tabIdLinks = new Array();
var tabClicked = false;
var tabLinksShort = new Array();

// XML request
function loadTabPage(id, url) {
	new Request({
		url: url,
		method: 'get',
		onComplete: function (text, xml) { xmlResponse(id, xml) }
	}).send();
}

// XML response
function xmlResponse(id, responseXML) {
	var xmlDoc = responseXML.documentElement;
    var title = xmlDoc.getElementsByTagName('title')[0].childNodes[0].nodeValue;
    var nav = xmlDoc.getElementsByTagName('nav_title')[0].childNodes[0].nodeValue;
    var cnt_t = xmlDoc.getElementsByTagName('content_title')[0].childNodes[0].nodeValue;
    var cnt = xmlDoc.getElementsByTagName('content')[0].childNodes[0].nodeValue;
    fillTabPage(id, title, nav, cnt_t, cnt);
}

// user click on tab
function switchTab(id, url) {
    if (activeTab == id) {
        // repeated click does nothing
        // window.location = tabIdLinks[id];
        return true;
    }
    if (activeTab != null) {
        // cache this page 
        cacheActivePage(activeTab);
    }
    activeTab = id;
    if (pageCache[id] != null) {
        // load dta from cache
        fillTabPage(id, pageCache[id]['title'], pageCache[id]['nav'], pageCache[id]['cnt_t'], pageCache[id]['cnt']);
    } else {
        unRollNotice();
        // loaddata from xml
        loadTabPage(id, url);
    }
    tabClicked = true;
}

// cache currently visible page as id
function cacheActivePage(id) {
	var titleA = Page.load_error;
	var navA = Page.load_error;
	var cnt_tA = Page.load_error;
	var cntA = Page.load_error;
	
	var txt = null;
	if((txt = document.getElementsByTagName('title')[0]) != null) 
		titleA = txt.text;
		
	txt = null;
	if((txt = document.getElementById(Page.nav)) != null) 
		navA = txt.innerHTML;
		
	txt = null;
	if((txt = document.getElementById(Page.cnt_t)) != null) 
		cnt_tA = txt.innerHTML;
		
	txt = null;
	if((txt = document.getElementById(Page.cnt)) != null) 
		cntA = txt.cloneNode(true);

	// cache this page
	saveTabCache(id, titleA, navA, cnt_tA, cntA);
}

// store data to cache
function saveTabCache(id, title, nav, cnt_t, cnt) {
    pageCache[id] = new Array();
    pageCache[id]['title'] = title;
    pageCache[id]['nav'] = nav;
    pageCache[id]['cnt_t'] = cnt_t;
    pageCache[id]['cnt'] = cnt;
}

// draw the page with given data
function fillTabPage(id, title, nav, cnt_t, cnt) {
    var titleD;
    var navD;
    var cnt_tD;
    var cntD;
    if((titleD = document.getElementsByTagName('title')[0]) != null) {
    	titleD.text = title;
    }
    if((navD = document.getElementById(Page.nav)) != null) {
    	navD.innerHTML = nav;
    }
    if((cnt_tD = document.getElementById(Page.cnt_t)) != null) {
    	cnt_tD.innerHTML = cnt_t;
    }
    if((cntD = document.getElementById(Page.cnt)) != null) {
        if (typeof(cnt) == 'object') {
    	    var parental = cntD.parentNode;
    	    parental.replaceChild(cnt.cloneNode(true), cntD);
    	} else {
    	    cntD.innerHTML = cnt;
    	}
    	// CLEAN UP
    	list = new Array();
    	if (calendars.length > 0) {
            calendars.each( function(cal) {
                if (cal['obj'] != null) {
                   cal['obj'].divName = null;
                   cal['obj'] = null;
               }
               cal = null;
            });
        }
    	calendars = new Array();
    	CP_calendarObject = null;
    	CP_dateFormat = null;
        CP_targetInput = null;
        
        registerTabClicks();
        // evaluate javascript
        runScripts();
    }
    
    var i = 0;
	var tab;
	while((tab = $('tab_'+i)) != null) {
		tab.className = 'unselected';
		if ('tab_'+i == id) {
			tab.className = 'selected';
		}
		i++;
	}
}

// evaluate javascript 
function runScripts() {
    //var col = $$('script', 'content').each( function(old) {
    var col = $$('.javascript').each( function(old) {
		var intext = old.getText();
        eval(intext);
    });
}

// register all same tab links
function registerTabClicks() {
    tabLinksShort.each( function(tab) {
        var no = tab['no'];
        var jlink = tab['jlink'];
        var jtext = tab['text'];
		$$('a[href='+tab['link']+']').each( function(a) {
       		a.addEvent('click', function(e) {
				e = new Event(e).stop();
				switchTab(no, jlink);
				window.location = '#'+jtext;
			});
		});
	});
}

// redirect to correct page by #hashed url
function hashRedirect() {
    var regex = new RegExp("#([^&#]*)$");
    var results = regex.exec(window.location.href);
    var target = '';
    if (results == null) {
        return false; 
    } else if (results[1] == null) {
        return false;
    } else {
        target = results[1];
        if (tabLinks[target] != null && tabClicked == false) {
            document.write('');
            window.location = tabLinks[target];
        } else {
            return false; 
        }
    }
}

/* apply callback to object tree */
function array_map(f, a){
	var r;
    if($type(a) == 'array'){
        r = [];
        for(var j = 0; j < count(a); j++ ){
            r[count(r)] = array_map(f, a[j]);
        }
    } else if($type(a) == 'object'){
        r = {};
        for(k in a){
            r[k] = array_map(f, a[k]);
        }
    } else {
    	r = f(a);
    }
    return r;
}