/*
these var come from wikibits::
clientPC
is_gecko
is_safari
is_khtml
is_opera
is_opera_preseven
is_opera_seven
*/
// for xLib
var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xNN4,xUA = navigator.userAgent.toLowerCase();
if(window.opera){ var i=xUA.indexOf('opera'); if(i!=-1){var v=parseInt(xUA.charAt(i+6));xOp7Up=v>=7;xOp6Dn=v<7;	}
}else if(navigator.vendor!='KDE' && document.all && xUA.indexOf('msie')!=-1){xIE4Up=parseFloat(navigator.appVersion)>=4;xIE4=xUA.indexOf('msie 4')!=-1;xIE5=xUA.indexOf('msie 5')!=-1;
}else if(document.layers){ xNN4=true;}
xMac=xUA.indexOf('mac')!=-1;

//alert(xMac + ":::"+clientPC);
/////////////////////////////////////////////////////
// initial vars
/////////////////////////////////////////////////////
if(typeof(tHeight) == "undefined")
	var tHeight = 30;
if(typeof(tWidth) == "undefined")
var tWidth = 400;
var slideSpeed = 100;
var slideStep = 15;

//listen(window, "load", preparePage );
addLoadEvent(preparePage);

/////////////////////////////////////////////////////
// initial functions
/////////////////////////////////////////////////////


// convert the sibling link list with <a>[id]</a> into <a><img src='thumbid'></a>
/////////////////////////////////////////////////////
function getSiblings(obj, listPtr){
	var initScroll = 0;/*1 calculating initial offset */
	var offset = 0;
	var list = listPtr.childNodes;
	var url = listPtr.getAttribute("resize");
	//alert(list[0].getAttribute('thumb'));
	for(var i=0; i<list.length; i++){
		var pos = list[i].getAttribute('source');
		var thumbid = list[i].getAttribute('thumb');
		if(!thumbid) break; //-> something wrong ...
		var w = list[i].getAttribute('width');
		var h = list[i].getAttribute('height');
		var np = document.createElement('IMG');
		np.src=url+thumbid;
		np.style.height = tHeight+"px";
		var nW = parseInt(w*tHeight/h)
		np.style.width = nW + "px";
		if(list[i].className && list[i].className.indexOf("actual")>=0){
			initScroll = offset; /*1*/
		}
		offset += nW;/*1*/
		list[i].firstChild.innerHTML ="";
		list[i].firstChild.appendChild(np);
//alert(list[i].firstChild.href); //="hubsa";
list[i].firstChild.href = "javascript:;";

list[i].firstChild.asho = obj;
list[i].firstChild.athu = np.src;
listen(list[i].firstChild, "click", aShow)
		if(list[i].className.indexOf("album")>=0){
			var count = list[i].getAttribute("count");
			var cap = list[i].getAttribute("caption");
			np.src = g2pathes.images+"bigfolder.gif";
			np.title = "album :"+cap+" ["+count+"]";
		}
		list[i].firstChild.style.height = tHeight+"px"; //safari
		listen(list[i], 'mouseover', fade, false)

	}
	return [offset, initScroll ]; /*1*/
}

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
function aShow(e){
	var obj = this.asho;
	obj.src = this.athu;

	var ul =obj.previousSibling;
	ul.innerHTML ="";
	var url = "/gallery2/main.php?g2_view=core:DownloadItem&amp;g2_itemId=";
	var original = ""
	var str ="";

	var sizA = this.parentNode.getAttribute("resize");
	var original = this.parentNode.getAttribute("source");
	if(sizA){
		var p = sizA.split(";");
		p[p.length] = "o:"+original;
		for(var i=0; i<p.length;i++){
			var dd = p[i].split(":");
			str += renderOneResize(dd[0], dd[1], original, url);
		}
		ul.innerHTML = str;
	}
	renderSizer(obj, ul);

}
/////////////////////////////////////////////////////
// in aShow 
function renderOneResize(sizekey, sizeid, original, url){
	return '<li original="'+original+'" sizeid="'+sizeid+'" size="'+sizekey+'"><a title="'+original+'" target="_blank" href="'+url+sizeid+'">'+sizekey+'</a></li>';
}

/////////////////////////////////////////////////////

/////////////////////////////////////////////////////
function preparePage(){
	var imgs = document.images;
	for(var i=0; i<imgs.length; i++){
		if(imgs[i].className == "image-view")
			prepareImage( imgs[i] );
	}
}
/////////////////////////////////////////////////////
function prepareImage(obj){  // obj is THE image
	//renderSizer(obj, obj.previousSibling);

	if(obj.nextSibling && obj.nextSibling.style){
		//obj.nextSibling.style.visibility = "hidden";
		var dim = getSiblings(obj, obj.nextSibling);
		var parents = getParents(obj.nextSibling.nextSibling);
		var allPicList = renderSlider(obj, dim[0], dim[1],  parents); // obj becomes allPicList
		//allPicList.style.visibility = "visible";
	}
}

/////////////////////////////////////////////////////
function getParents(parent){
	var parentA;
	if(parent && parent.className=='image-parent'){
		parentA = parent.cloneNode(true);
		parentA.firstChild.firstChild.innerHTML = "<img src='" + g2pathes.images + "bigfolder.gif'>";
	}else{
		parentA = document.createElement("SPAN");
		parentA.src = ""; //g2pathes.images+"bigfolder.jpg";
	}
	if(parent){
		parent.innerHTML =""; // delete orignal
	}
	return parentA;
}

/////////////////////////////////////////////////////
function renderSlider(obj, listSize, initScroll, parents){
	var pa = document.createElement("DIV"); 
	pa.innerHTML = 
	"<div class='sliderdiv'>" +
	"<div class='sliderparent' style='float:left; '>" + parents.innerHTML + "</div>" +
	"<div class='sliders' style='float:left; '>" +
	"<a href='javascript:;' onmouseover='scrollL()' onmouseout='stopSlide()' class='leftslide'>&lt;</a>" +
	"<a href='javascript:;' onmouseover='scrollR()' onmouseout='stopSlide()' class='rightslide'>&gt;</a></div>" +
	"<div id='sliding' class='sliderbox' style='height:"+tHeight+"px; width:"+tWidth+"px;'></div></div>";
	// href='javasccript:;' because of IEmac5
	var around = document.body.appendChild(pa);
	var ff = document.getElementById("sliding");
	ff.allPics = listSize;
	allPicList = ff.appendChild(obj.nextSibling);
	scrollListe(initScroll/2);
	return allPicList;
}

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
// event based function
/////////////////////////////////////////////////////
function startSlide(e){
	var mthis = _getSlide();
	var range = 50;
	var pp = _absLeft(mthis);
	var xpos = _getEx(e);
	var leftP = _absLeft(mthis);
	var rightP = leftP +mthis.offsetWidth;
	if(xpos>leftP && xpos<(leftP+range) ) /**/
		mthis.active = window.setInterval("scrollR()", slideSpeed);
	else if(xpos > (rightP-range) && xpos < rightP  ) /**/
		mthis.active = window.setInterval("scrollL()", slideSpeed);
	else
		stopSlide();
}
/////////////////////////////////////////////////////
function scrollL(){
	var mthis = _getSlide();
	mthis.active = window.setInterval("scrollListe((1)*"+slideStep+")", slideSpeed);
	//scrollListe((1)*slideStep);
	return false;
}
/////////////////////////////////////////////////////
function scrollR(){
	var mthis = _getSlide();
	mthis.active = window.setInterval("scrollListe((-1)*"+slideStep+")", slideSpeed);
	//scrollListe((-1)*slideStep);
	return false;
}
/////////////////////////////////////////////////////
function stopSlide(){
	var mthis = _getSlide();
	window.clearInterval(mthis.active);
	return false;
}
function _getSlide(){
	return document.getElementById("sliding");
}
/////////////////////////////////////////////////////
var interv=0;
function scrollListe(dir){ 
 //document.getElementsByTagName("H1")[0].innerHTML = dir +" :: "+ interv++;
	var obj = _getSlide();
	if(!obj.clipZone){
	//alert(obj.firstChild.offsetWidth);
		obj.clipZone = obj.allPics - obj.offsetWidth;
		//alert(obj.firstChild.tagName +" "+obj.allPics +" :: "+ obj.offsetWidth +" "+obj.clipZone);
		if(obj.clipZone <= 0)
			obj.clipZone = 0;
		obj.clipSize = 0;
		
	}
	obj.clipSize = (obj.clipSize + dir < 0) ? 0 : obj.clipSize + dir;
	obj.clipSize = (obj.clipSize >obj.clipZone) ? obj.clipZone : obj.clipSize;
	hideButtons(obj.clipSize, obj.clipZone);
	obj.firstChild.style.marginLeft = -obj.clipSize+"px";
//	obj.firstChild.style.position = "absolute";
// document.getElementsByTagName("H1")[0].innerHTML = obj.offsetWidth +":::"+obj.firstChild.offsetWidth + ":"+obj.clipSize+" "+" dir:"+ dir;
// document.getElementsByTagName("H1")[0].innerHTML = dir + "::" +obj.clipSize
}

/////////////////////////////////////////////////////
function hideButtons(offset, limit){
	var bb = document.getElementById("sliding").parentNode;
	var buttons = bb.getElementsByTagName("A");
	for(var i=0; i<buttons.length; i++){
		if(buttons[i].className=="rightslide"){ 
			buttons[i].style.visibility = (offset == 0) ? "hidden" : "visible";
		}
		if(buttons[i].className=="leftslide"){
			buttons[i].style.visibility = (offset == limit) ? "hidden" : "visible";
		}
	}
}

/////////////////////////////////////////////////////
function fade(event){
	var mthis = this;
	if(window.event){ // what a hack, i hope, that someone can clean this up !!!!!
		mthis = window.event.srcElement.parentNode.parentNode;
	}
	//alert(mthis.offsetHeight);
	if( ! (mthis.getAttribute('oldClass') && mthis.getAttribute('oldClass') != '' )){
		listen(mthis, 'mouseout', fadeBack, false);
		mthis.setAttribute('oldClass', mthis.className);
	}
	if(mthis.className.indexOf("album") >= 0)
		mthis.className = 'actual album';
	else
		mthis.className = 'actual';

}
/////////////////////////////////////////////////////
function fadeBack(event){
	var mthis = this;
	if(window.event){ // what a hack, i hope, that someone can clean this up !!!!!
		mthis = window.event.srcElement.parentNode.parentNode;
	}
	mthis.className = mthis.getAttribute('oldClass');
}

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
function listen(obj, eve, func){
	xAddEventListener(obj,eve,func,false)
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
function _absLeft(obj) {
	return (obj.offsetParent)? obj.offsetLeft+_absLeft(obj.offsetParent) : obj.offsetLeft;
}

/////////////////////////////////////////////////////
function _absTop(obj) {
	return (obj.offsetParent)? obj.offsetTop+_absTop(obj.offsetParent) : obj.offsetTop;
}
/////////////////////////////////////////////////////
function _getEx(e){ //without pagescroll
	return (!e) ? (window.event.clientX + document.documentElement.scrollLeft) : e.pageX;
}
/////////////////////////////////////////////////////
function _getEy(e){ //without pagescroll
	return (!e) ? (window.event.clientY + document.documentElement.scrollTop) : e.pageY;
}



/////////////////////////////////////////////////////
// onload patch for macIE5 from Simon Willison ::: http://simon.incutio.com/archive/2004/05/26/ 
/////////////////////////////////////////////////////
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

