/*    --- blox.zakladki.2.js ---
	skrypt dodaje funkcjonalność dynamicznego zwijania/rozwijania zakladek na blogach blox.pl (po kliknięciu w folder)
	opcjonalnie może załadować sekcję zwijanych zakładek na stronie komentarzy (gdzie ich teraz nie ma)
	autor: eskey (http://sgk74exp.blox.pl)
	wersja: 2 (2008-03-07)
	
	więcej szczegółów na   http://sgk74exp.blox.pl/208/03/zwijane-zakladki-wersja-druga.html
	
	Gdy ktoś skorzysta to proszę zostawić komentarz pod wpisem. Proszę też o nieusuwanie stopki.
	Skrypt można przerabiać, ale z zachowaniem informacji o autorze.	
*/


/*parametry, którym można zmieniać wartości*/
var rozwinod = window.rozwinod || 1;			//od którego folderu zakładki mają pozostać ROZWINIĘTE
var rozwinile = window.rozwinile || 2;			//ile kolejnych folderów zakładek ma być ROZWINIĘTYCH
var kolstopka = window.kolstopka || '#997755';	//kolor linku eskey w stopce pod skryptem

var W3CDOM = (document.createElement && document.getElementsByTagName);

/* funkcje pomocnicze */
function $(d) { return document.getElementById(d);}
function zHasClass(obj,cName) { return new RegExp('\\b'+cName+'\\b').test(obj.className);} 
function zHasClasses(obj,classes) { 
	for (f=0; f<classes.length; f++) if (!zHasClass(obj,classes[i])) return false;
	return true; 
} 
function zAddClass(obj,cName) { 
    if (!zHasClass(obj,cName)) obj.className+=obj.className?' '+cName:cName;
    return true; 
} 
function zDelClass(obj,cName) { 
	if (!zHasClass(obj,cName)) return false; 
	var rep=obj.className.match(' '+cName)?' '+cName:cName;
	obj.className=obj.className.replace(rep,'');
	return true; 
} 
function zSwitchClass(obj,to,from) { 
	if (zHasClass(obj,from)) zDelClass(obj,from);
    zAddClass(obj,to); 
	return true; 
} 
function zGetElementsByClassName(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 zStopka(div) {
	var ft = document.createElement('div');
	ft.innerHTML = '<p style="font:normal 9px \'Verdana\'!important;display:block!important;margin:5px!important;text-align:left!important;color:#aaa!important;">skrypt: <a href="http://sgk74exp.blox.pl" style="font-weight:normal!important;color:'+kolstopka+'!important">eskey</a></p>';
	div.appendChild(ft);
}

/* funkcje zasadnicze */
function bloxLadujZakladkiOPML(url, div) {
	
	if (!W3CDOM) return;
	if (!div) return;
	
	if (window.ActiveXObject) {
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.load(url);
		opml2bloxDOM(xmlDoc, div);
	}	
	else if (document.implementation && document.implementation.createDocument) {
		xmlDoc=document.implementation.createDocument("","doc",null);
		xmlDoc.load(url);		
		xmlDoc.onload = function () { 
				opml2bloxDOM(xmlDoc, div); 
			};
	}
	else {
		div.innerHTML = 'Nie załaduje pliku '+url;
	}
}

function opml2bloxDOM (xmlDoc, div) {
	
	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 >= rozwinod && fid <= rozwinod+rozwinile-1) ? ' on' : ' off';
			tfz.style.cursor = 'pointer';
			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 >= rozwinod && fid <= rozwinod+rozwinile-1) ? 'block' : 'none';
			div.appendChild(pd);
			fid++;
		}
	}
	zStopka(div);
}

function bloxZwijanieZakladek(div) {

	if (!W3CDOM) return;
	if (!div) 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 >= rozwinod && fid <= rozwinod+rozwinile-1 ) {
				zAddClass(nav[i],'on');
			}
			else {
				zAddClass(nav[i],'off');
			}
			nav[i].style.cursor = 'pointer';			
			nav[i].onclick = bmarkShowHideGroup;
		}
		else if (nav[i].className =='PoziomDrzewa') {
			nav[i].number = fid;
			nav[i].style.display = ( fid >= rozwinod && fid <= rozwinod+rozwinile-1 ) ? 'block' : 'none';
			fid += 1;
		}
	}
	zStopka(div);
}

function bmarkShowHideGroup () {
	var pd = zGetElementsByClassName(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') {
				zSwitchClass(this,'off','on');
				pd[this.number-1].style.display = 'none';
			}
			else {
				zSwitchClass(this,'on','off');			
				pd[this.number-1].style.display = 'block';
			}
		}
	}
}


if ($('SkomentujWazkaSzpalta')) {
 var newel = document.createElement('div');
 newel.id = 'ZakladkiOPML';
 $('SkomentujWazkaSzpalta').appendChild(newel);
 bloxLadujZakladkiOPML('/resource/bookmarks.xml',$('ZakladkiOPML'));
}
else {
 bloxZwijanieZakladek($('ZakladkiItems'));
}
