/*    --- blox.zakladki.js ---
	skrypt dodaje funkcjonalność dynamicznego zwijania/rozwijania zakladek na blogach blox.pl (po kliknięciu w folder)
	dodatkowo (opcjonalnie) może załadować sekcję zwijanych zakładek na stronie komentarzy (gdzie ich teraz nie ma)
	
	więcej szczegółów na http://sgk74exp.blox.pl/2007/12/blox-i-dynamicznie-zwijane-zakladki.html
	
	wersja: 1 (2007-12-21)
	autor: eskey (sgk,	http://sgk74exp.blox.pl)
	
	Gdy ktoś skorzysta to proszę zostawić komentarz pod wpisem. Proszę też o nieusuwanie stopki.
	Jeśli ktoś ma ochotę wspomnieć o tym u siebie na blogu, to byłoby mi miło :)
	Skrypt można przerabiać, ale z zachowaniem informacji o autorze.
*/

var W3CDOM = (document.createElement && document.getElementsByTagName);

/* funkcje pomocnicze */
function $(d){
	return document.getElementById(d);
}

function hasClass(obj,cName) {
	return new RegExp('\\b'+cName+'\\b').test(obj.className); 
} 

function hasClasses(obj,classes) { 
	for (f=0; f<classes.length; f++) if (!hasClass(obj,classes[i])) return false;
	return true; 
} 

function addClass(obj,cName) { 
    if (!hasClass(obj,cName)) obj.className+=obj.className?' '+cName:cName;
    return true; 
} 

function removeClass(obj,cName) { 
	if (!hasClass(obj,cName)) return false; 
	var rep=obj.className.match(' '+cName)?' '+cName:cName;
	obj.className=obj.className.replace(rep,'');
	return true; 
} 

function switchClass(obj,to,from) { 
	if (hasClass(obj,from)) removeClass(obj,from);
    addClass(obj,to); 
	return true; 
} 

function getElementsByClassName(parent, tagName, className) {
  var result = [];
  var rex = new RegExp("(^| )" + className + "( |$)");
  var elems = parent.getElementsByTagName(tagName);
  for(var i=0; i < elems.length; i++)
    if(rex.test(elems[i].className)) result.push(elems[i]);
  return result;
}

function stopka(div) {
	var ft = document.createElement('div');
	ft.innerHTML = '<p style="font:normal 9px \'Verdana\'!important;display:block!important;margin-top:5px!important;margin-bottom:5px!important;text-align:left!important;color:#aaa!important;">skrypt: <a href="http://sgk74exp.blox.pl" style="font-weight:normal!important;color:#69e!important">eskey</a></p>';
	div.appendChild(ft);
}

/* funkcje zasadnicze */
function bloxLadujZakladkiOPML(url, div, nrexp) {
	
	if (!W3CDOM) return;
	
	if (window.ActiveXObject) {
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.load(url);
		opml2bloxDOM(xmlDoc, div, nrexp);
	}	
	else if (document.implementation && document.implementation.createDocument) {
		xmlDoc=document.implementation.createDocument("","doc",null);
		xmlDoc.load(url);		
		xmlDoc.onload = function () { 
				opml2bloxDOM(xmlDoc, div, nrexp); 
			};
	}
	else {
		div.innerHTML = 'Nie załaduje pliku '+url;
	}
}

function opml2bloxDOM (xmlDoc, div, nrexp) {
	var bmarks = xmlDoc.getElementsByTagName("outline");
	var fid = 1;
	
	for (var i=0, max=bmarks.length; i<max; i++) {
		title   = bmarks[i].getAttribute("text");
		htmlurl = bmarks[i].getAttribute("link");
		if (htmlurl) {
			ze = document.createElement('div');
			ze.className = 'ZakladkaEtykieta';
			ze.innerHTML = '\n<a href="'+htmlurl+'">'+title+'</a>';
			pd.appendChild(ze);			
		}
		else {
			tfz = document.createElement('div');
			tfz.className = 'TytulFolderaZakladek';
			tfz.className += (fid == nrexp) ? ' on' : ' off';
			tfz.number = fid;
			tfz.onclick = bmarkShowHideGroup;
			div.appendChild(tfz);
			tfz.innerHTML += title+'\n';
			
			pd = document.createElement('div');
			pd.className = 'PoziomDrzewa';
			pd.number = fid;
			pd.style.display = (fid == nrexp) ? 'block' : 'none';
			div.appendChild(pd);
			fid++;
		}
	}
	stopka(div);
}

function bloxZwijanieZakladek(div, nrexp) {
	if (!W3CDOM) return;
	
	var nav = div.childNodes;
	var fid = 1;
	for (var i=0;i<nav.length;i++) {
		if (nav[i].className =='TytulFolderaZakladek') {
			nav[i].number = fid;		
			if ( fid == nrexp ) {
				addClass(nav[i],'on');
			}
			else {
				addClass(nav[i],'off');
			}			
			nav[i].onclick = bmarkShowHideGroup;
		}
		else if (nav[i].className =='PoziomDrzewa') {
			nav[i].number = fid;
			nav[i].style.display = (fid == nrexp) ? 'block' : 'none';
			fid += 1;
		}
	}
	stopka(div);
}

function bmarkShowHideGroup () {
	var pd = getElementsByClassName(this.parentNode, 'div', 'PoziomDrzewa');
	for (var i=0; i<pd.length;i++) {
		if (pd[i].number == this.number) {
			if (pd[this.number-1].style.display == 'block') {
				switchClass(this,'off','on');
				pd[this.number-1].style.display = 'none';
			}
			else {
				switchClass(this,'on','off');			
				pd[this.number-1].style.display = 'block';
			}
		}
	}
}

/* uruchamianie (celowo bez eventListenerów, żeby szybciej działało) */
if ($('BlogWazkaSzpalta')) { 
	bloxZwijanieZakladek($('ZakladkiItems'),1);
}
else {
	bloxLadujZakladkiOPML('/resource/bookmarks.xml',$('ZakladkiOPML'),1);
}
