var
	rightPane = 1,
	leftPane = 1,
	thumbSizes = [44, 80, 92, 111, 136],
	thumbSize = 3,
	thumbDim = 80,
	thumbWidth,
	dialogShowTimer,
	thumbScrollable,
	postScrollable,
	lastMo = '',
	lastSizeReported = '',
	lastSSP,
	draggingPU,
	displayT = ['none', 'block'],
	smallScreen = false,
	puZ = 100,
	selectMode = false,
// 	slideShowMode = false,
	fupload,
	ssInt;
	
function prepareForLoad () {
	if (postScrollable) postScrollable.dead = 1;
	if (thumbScrollable) thumbScrollable.dead = 1;
	hideThumbDialog();
	scrollLastPos = -1;
}

function handleResize() {
	var w = window.innerWidth;
	if (!w)
		w = document.body.offsetWidth;
		
	var h = window.innerHeight;
	if (!h)
		h = document.body.offsetHeight;
	
	var cw = w - 256 * leftPane - 110 * rightPane - 1;
	
	if (dgbi('content'))
		dgbi('content').style.width = cw+'px';
	
	if (dgbi('right')) {
		if (rightPane)
			show('right');
		else
			hide('right');
	}
	
	thumbWidth = (Math.floor(cw / Math.floor(cw / (thumbDim + 5 * Number(thumbSize) + Number(thumbSize) + 3))) - 1);
	
	rule = getRule('thumbbox')[0];
	rule.style.width = thumbWidth + 'px';
	rule.style.height = thumbWidth + 'px';
	
	rule = getRule('thumb')[0];
	rule.style.padding = (1 + Number(thumbSize)) + 'px';
	
	rule = getRule('w100')[0];
	rule.style.width = cw + 'px';
	
	sizestr = 'width='+w+'&contentWidth='+cw+'&height='+h;
	if (sizestr != lastSizeReported) {
		messageREWAD('/:/'+controller+'/resize', sizestr);
		lastSizeReported = sizestr;
	}
	
	scrollHandler();
	
}

function setThumbSize(n) {
	var i, c, o;

	thumbSize = n;
	thumbDim = thumbSizes[thumbSize];
	
	c = document.images.length;
	for (i = 0; i < c; i++) {
		o = document.images[i];
		if (o.className == 'thumb') {
			o.src = getdirname(o.src) + '/' + thumbDim + 'x' + thumbDim + '.jpg';
			o.width = thumbDim;
			o.height = thumbDim;
		}
		else if (o.className == 'folder') {
			o.src = getdirname(o.src) + '/' + thumbDim + 'x' + thumbDim + '.jpg';
		}
	}
	
	handleResize();
}

function thumbLoadElement(element) {
	if (element.thumbInfo[3] == -1) { //Not a folder
		element.innerHTML = '<input type="checkbox" class="thumbCheckbox" id="'+element.id+'_check" onChange="thumbSelect(\''+element.phid+'\', this.checked, \''+element.eventId+'\');" onClick="thumbSelect(\''+element.phid+'\', this.checked, \''+element.eventId+'\');"/><a href="'+element.thumbInfo[1]+'"><img class="thumb" src="'+element.thumbInfo[2]+'"></a>';
	}
	else {
		element.innerHTML = '<a href="'+element.thumbInfo[1]+'"><img src="'+element.thumbInfo[2]+'"></a><br>'+element.thumbInfo[3];
	}
}	

function thumbSelect(id, val, path) {
	messageREWAD('/:/'+path+'/thumbSelect', 'id='+id+'&state='+(val ? 1 : 0));
}

function genThumbs(id, path, items) {
	var i, c;
	var container = dgbi(id);
	var buf = '';
	var thumbs = new Array();
	
	c = items.length;
	for (i = 0; i < c; i++) {
		div = document.createElement('div');
		div.className = 'thumbbox';
		div.id = id+'_'+items[i][0];
		div.phid = items[i][0];
		div.eventId = path;
		div.onmouseover = thumbMouseOver;
		div.onmouseout = thumbMouseOut; //triggers also on dialog being shown, can't really use.
		div.thumbInfo = items[i];
		//div.onclick = thumbClick;
		container.appendChild(div);
		thumbs.push(div);
	}
	
	thumbScrollable = new scrollable(0, path, thumbs);
	thumbScrollable.onLoadElement = thumbLoadElement;
	
	scrollObjects.push(thumbScrollable);
	scrollDownload();
}

function genPosts(id, path, items, topic) {
	var i, c;
	var container = dgbi(id);
	var buf = '';
	
	c = items.length;
	for (i = 0; i < c; i++) {
		row = container.insertRow(-1);
		row.style.height = topic ? '120px' : '40px';
		row.id = id+'_'+items[i];
		cell = row.insertCell(0);
		if (topic)
			cell.innerHTML = '<a name="/topic/'+topic+'#'+items[i]+'">';
	}
	
	
	postScrollable = new scrollable(1, path, container);
	scrollObjects.push(postScrollable);
	var url = ourPos();
	if (url && dgbi(id+'_'+url))
		scrollToObj(dgbi(id+'_'+url));
	scrollDownload();
	
}

function ourPos () {
	var url = window.top.document.location.href;
	url = url.substr(url.indexOf('://')+3);
	url = url.substr(url.indexOf('/'));
	url = url.substr(url.indexOf('#/')+1);
	if (url.indexOf('#') >= 0) {
		url = url.substr(url.indexOf('#') + 1);
		return url;
	}
}

function thumbMouseOver(eventeg) {
	if (selectMode)
		return false;
		
	if (eventeg) ev = eventeg;
	else ev = event;
	
	thumb = ev.target ? ev.target : ev.srcElement;
	
	while (thumb.className.indexOf('thumbbox') < 0)
		thumb = thumb.parentNode;
	
	//dlg.innerHTML = loadIndicator;
	
	lastMo = thumb.id;
	
	dialogShowTimer = setTimeout("messageREWAD('/:/"+(thumb.eventId ? thumb.eventId : controller)+"/dialog', 'id="+thumb.id+"');", 300);
}

function thumbMouseOut(eventeg) {
	if (eventeg) ev = eventeg;
	else ev = event;
	
	thumb = ev.target ? ev.target : ev.srcElement;
	while (thumb.className.indexOf('thumbbox') < 0)
		thumb = thumb.parentNode;
	
	lastMo = -1;
	
	clearTimeout(dialogShowTimer);
}

function thumbClick(id1, id2, id3) {
	if (!selectMode)
		return true;
		
	cb = dgbi(id1+'_'+id2+'_'+id3+'_check');
	cb.checked = (cb.checked) ? false : true;

	messageREWAD('/:/'+id1+'/'+id2+'/check', 'id='+id3+'&state='+((cb.checked) ? 1 : 0));
		
	return false;
}

function hideThumbDialog() {
	hide('thumbdlg');
}

function getRealX(el) {
	c = 0;
	while (el != document.body) {
		c += el.offsetLeft - el.offsetParent.scrollLeft;
		el = el.offsetParent;
	}
	return c;
}

function getRealY(el) {
	c = 0;
	while (el != document.body) {
		showdbg(el.offsetTop + ' ' + el.offsetParent.scrollTop + ' ' + el.tagName + ' ' + el.id);
		c += el.offsetTop - el.offsetParent.scrollTop;
		el = el.offsetParent;
	}
	return c;
}

function showThumbDialog(id, content) {
	if (id != lastMo) return;

	thumb = dgbi(id);
	if (!thumb) return;
	
	dlg = dgbi('thumbdlg');
	
	dlg.thumb = thumb.id;
	
	dlg.innerHTML = content;
	
	dlg.style.left = Math.floor(getRealX(thumb) - 99 + thumbWidth / 2) + 'px';
	dlg.style.top = ((getRealY(thumb) - 30) + document.body.scrollTop) + 'px';
	
	setTimeout('show("'+dlg.id+'");', 100);
}

function showPopup(id, content, title) {
	pu = dgbi(id);
	
	if (!pu) {
		pu = document.createElement('div');
		pu.className = 'popup';
		pu.id = id;
		if (window.ActiveXObject) {
			ifr = document.createElement('iframe');
			ifr.className = 'popupIfr';
			ifr.frameBorder = 'no';
			pu.appendChild(ifr);
		}
		tit = document.createElement('div');
		tit.className = 'title popupt';
		tit.innerHTML = title;
		tit.onmousedown = popupDrag;
		tit.onmousemove = popupMove;
		tit.onmouseup = popupDrop;
		pu.appendChild(tit);
		cc = document.createElement('div');
		cc.className = 'popupc';
		pu.cc = cc;
		pu.appendChild(cc);
		document.body.appendChild(pu);
	}
	
	pu.cc.innerHTML = content;
	pu.style.zIndex = ++puZ;
	
	//IE hasLayout bugs
	if (pu.cc.offsetWidth) {
		pu.cc.style.width = pu.cc.offsetWidth+'px';
		pu.cc.style.height = pu.cc.offsetHeight+'px';
	}

	pu.cc.abg = [0xBC, 0xD4, 0xEC];
	popupAnimate(id);
	pu.cc.innerHTML = content; //More IE bugs
	pu.animator = setInterval('popupAnimate("'+id+'");', 50);
	
	return pu;
}

function popupDrag(eventeg) {
	if (eventeg) ev = eventeg;
	else ev = event;
	
	pu = ev.target ? ev.target : ev.srcElement;
	while (pu.className != 'popup') pu = pu.parentNode;
	
	pu.dragging = 1;
	draggingPU = pu;
	pu.dragX = ev.clientX - pu.offsetLeft;
	pu.dragY = ev.clientY - pu.offsetTop;
	pu.dragScroll = document.body.scrollTop;
	pu.style.cursor = 'move';
	
	//Something for aligned popups
	pu.style.width = pu.offsetWidth + 'px';
	pu.style.left = pu.offsetLeft + 'px';
	pu.style.right = 'auto';
	
	pu.style.zIndex = ++puZ;
}

function popupMove(eventeg) {
	if (eventeg) ev = eventeg;
	else ev = event;
	
	pu = ev.target ? ev.target : ev.srcElement;
	while (pu.className != 'popup') pu = pu.parentNode;
	
	if (!pu.dragging) return;
	
	pu.style.left = ev.clientX - pu.dragX;
	pu.style.top = ev.clientY - pu.dragY - (pu.dragScroll - document.body.scrollTop);
}

function popupDrop(eventeg) {
	if (eventeg) ev = eventeg;
	else ev = event;
	
	pu = ev.target ? ev.target : ev.srcElement;
	while (pu.className != 'popup') pu = pu.parentNode;
	
	pu.dragging = 0;
	pu.style.cursor = 'auto';
}

function popupAnimate(id) {

	pu = dgbi(id);
	if (!pu) return;
	
	pu.cc.style.background = 'rgb('+pu.cc.abg[0]+', '+pu.cc.abg[1]+', '+pu.cc.abg[2]+')';
	//showdbg(pu.cc.style.background);
	
	if ((pu.cc.abg[0] >= 255) && (pu.cc.abg[1] >= 255) && (pu.cc.abg[2] >= 255)) {
		clearInterval(pu.animator);
		if (pu.cc.offsetWidth) {
			pu.cc.style.width = pu.cc.offsetWidth+'px';
			pu.cc.style.height = pu.cc.offsetHeight+'px';
			pu.cc.innerHTML = pu.cc.innerHTML;
		}
	}
	
	pu.cc.abg[0] += 10;
	pu.cc.abg[1] += 7;
	pu.cc.abg[2] += 5;
		
}

function checkDrag(eventeg) {
	if (!draggingPU || !draggingPU.dragging) return;
	
	if (eventeg) ev = eventeg;
	else ev = event;
	
	pu = draggingPU;
	
	pu.style.left = ev.clientX - pu.dragX;
	pu.style.top = ev.clientY - pu.dragY - (pu.dragScroll - document.body.scrollTop);
}

function checkPopup(pu) {
	/*var h = window.innerHeight;
	if (!h)*/
		h = document.body.scrollHeight;
		
	if (pu.offsetTop + pu.offsetHeight > h)
		pu.style.top = (h - pu.offsetHeight) + 'px';
}

function popupAutoSize(id) {
	dgbi(id).cc.style.width = 'auto';
	dgbi(id).cc.style.height = 'auto';
	setTimeout('popupAutoSizeEnd("'+id+'");', 500);
}

function popupAutoSizeEnd(id) {
	dgbi(id).cc.style.width = dgbi(id).cc.offsetWidth+'px';
	dgbi(id).cc.style.height = dgbi(id).cc.offsetHeight+'px';
}

function handleScroll() {
	//dgbi('right').innerHTML = document.body.scrollTop;
	ny = 89 - document.body.scrollTop;
	if (ny < 0) ny = 0;
	dgbi('left').style.top = ny+'px';
}

function handleLoad() {
	if (scrollParent = document.body) {
		if (scrollParent.focus)
			scrollParent.focus();
	}
	else
		scrollParent = document.body;
	loadIndicator = '<div align=center><img src="/foto1/images/icons/loading.gif"></div>';
	scrollBuffer =  400;
	handleResize();
	scrollWatcher();
	scrollHandler();
}

function selectEnable() {
	selectMode = true;
	
	ins = document.getElementsByTagName('input');
	for (i = 0; i < ins.length; i++)
		if (ins[i].className == 'thumbCheckbox')
			ins[i].style.display = 'block';
}

function selectDisable() {
	selectMode = false;
	
	ins = document.getElementsByTagName('input');
	for (i = 0; i < ins.length; i++)
		if (ins[i].className == 'thumbCheckbox')
			ins[i].style.display = 'none';
}

//Stolen. TODO rewrite
function getRule(ruleName){

	var styleSheet=null;
	var Rules=new Array();
	var styleCount=0;
	
	for (var ssIndex=0;
			ssIndex < document.styleSheets.length;
			ssIndex++){
		styleSheet=document.styleSheets[ssIndex];
		
		if (window.ActiveXObject && (styleSheet.href.indexOf("/") != 0))
			 continue;

		rules = styleSheet.rules;
		if (!rules)
			rules = styleSheet.cssRules;
			
		for (var rIndex=0;
				rIndex < rules.length;
				rIndex++){
				
			rule=rules[rIndex]
			
			if ((rule.selectorText=="."+ruleName)||(rule.selectorText==ruleName)){
				Rules[styleCount]=rule
				styleCount++;
				}								
			}
		}
		
	return Rules;
}

function slideShowEnable(content) {
	dgbi('slideShow').innerHTML = content;
	show('slideShow');
	keyboardCatch();
	slideShowMode = true;
	document.body.scrollTop = 0;
}

function slideShowDisable() {
	hide('slideShow');
	keyboardRelease();
	slideShowMode = false;
	slideShowStop();
}

function slideShowCreate(id, url, w, h, vis) {
	eid = 'ssimg_'+id;
	if (dgbi(eid)) {
		if (dgbi(eid).width == w)
			return false;
		else {
			dgbi('slideShowBox').removeChild(dgbi(eid));
		}
	}
	img = document.createElement('img');
	img.id = eid;
	img.src = url;
	img.width = w;
	img.height = h;
	img.style.display = displayT[vis];
	dgbi('slideShowBox').appendChild(img);
	dgbi('slideShowKC').focus();
}

function slideShowSwitch(from, to) {
	dgbi('ssimg_'+from).style.display = 'none';
	dgbi('ssimg_'+to).style.display = 'block';
}

function slideShowSetColors(bg, txt) {
	
	dgbi('slideShow').style.backgroundColor = bg;
	
	if (rule = getRule('.slideShowCp, .slideShowCp a')[0]) {
		rule.style.color = txt;
	}
	else {
		rule = getRule('.slideShowCp A')[0].style.color = txt;	
		rule = getRule('.slideShowCp')[0].style.color = txt;
	}
	
}

function slideShowPlay(scid, int) {

	slideShowStop();
	
	ssInt = setInterval("messageREWAD('/:/"+controller+"/"+scid+"/ssswitch', 'mod=1');", int);
	//messageREWAD('/:/'+controller+"/"+scid+'/ssswitch', 'mod=1');

}

function slideShowStop() {

	if (ssInt) {
		clearInterval(ssInt);
		ssInt = 0;
	}

}
