//
// 2007 by bitart; Author: Alexander Graf
//
// Copyright by bitart - Furch & Graf GbR, Gartenstr. 5 56220 St. Sebastian,
// Germany. All rights reserved.
// Copyright in this software is owned by bitart, unless otherwise indicated.
//
// You are not allowed to distribute this software in any form or use it as
// part of another project without asking the owner for permission to use.
//

function showPicSel(fbe_id)
{
	return pop_ext('/app/picsel.php?fbe_id='+fbe_id,800,600,3);
}

var picsel_data   = null;
var picsel_words  = null;
var picsel_pages  = null;

var page_sel = null;
var desc_sel = null;
function initPicSel()
{
	picsel_pages = Array();

	// move "to top" button
	picsel_topdiv = document.getElementById('totop');
	if (picsel_topdiv){
		picsel_topdiv.style.position = 'absolute';
		picsel_topdiv.style.top = '0px';
		picsel_topdiv.style.left = '0px';
		picsel_topdiv.style.zIndex = 100;
		window.onscroll = picsel_scroll;
	}

	// init page-selector
	page_sel = document.getElementById('page_sel');
	if (page_sel){
		page_sel.value = '';
		page_sel.onkeyup  = picsel_key;
		page_sel.onchange = picsel_change;
	}

	// init desc-selector
	desc_sel = document.getElementById('desc_sel');
	if (desc_sel){
		desc_sel.firstChild.onclick = picsel_clear;
		picsel_closedesc();
		picsel_words = desc_sel.getElementsByTagName('i');
		for (var cnt=0, end=picsel_words.length; cnt<end; cnt++){
			picsel_words[cnt].onclick = picsel_toggle;
		}
	}

	// init popout for header
	var obj = document.getElementById('openup');
	obj.onmouseover = picsel_opendesc;
	obj.onmouseout  = picsel_closedesc;

	// remove close button if no opener is present
	if (!opener){
		var but = document.getElementById('closer');
		but.parentNode.removeChild(but);
	}

	// init resizer and get sizes
	window.onresize = picsel_resize;
	picsel_getsize(true);

	// create images
	picsel_create();
	delete(picsel_data['count']);
	delete(picsel_data['descs']);

	// set to top after filling page
	picsel_settop();
}

function picsel_create()
{

	var obj = picsel_topdiv;
	var body = obj.parentNode;

	var buttons = Array();

	for (var cnt=0,end=picsel_data['count']; cnt<end; cnt++){
		var pd = picsel_data['pic_'+cnt];

		var ta = document.createElement('table');
		ta.className = 'pic';
		ta.id = 'pic_'+cnt;
		ta.offcnt = 0;
		picsel_position(ta, cnt);

		var tb = document.createElement('tbody');

		var tr = document.createElement('tr');
		var td = document.createElement('td');
		td.className = 'pic';
		var im = document.createElement('img');
		im.alt     = '';
		im.title   = 'Bild vergrößern';
		im.width   = pd['tw'];
		im.height  = pd['th'];
		im.onclick = picsel_zoom;
		im.id      = 'img_'+cnt;
		im.src     = '/dbimages/'+pd['thumb'];
		td.appendChild(im);
		tr.appendChild(td);
		tb.appendChild(tr);

		var tr = document.createElement('tr');
		var td = document.createElement('td');
		td.className = 'but';
		if (pd['source']){
			var dv = document.createElement('div');
			dv.className = 'ZoomButton';
			dv.id = 'org_'+cnt;
			dv.title = 'Originalbild anzeigen';
			dv.onclick = picsel_orig;
			buttons[buttons.length] = dv;
			td.appendChild(dv);
		}
		var dv = document.createElement('div');
		dv.className = 'l';
		dv.appendChild(document.createTextNode((pd['ptext']?('Seite '+pd['ptext']+' '):'')+'(Bild '+(cnt+1)+')'));
		td.appendChild(dv);
		if (opener){
			var dv = document.createElement('div');
			dv.className = 'Button next';
			dv.id = pd['mark'];
			dv.onclick = picsel_mark;
			dv.title = 'Bild auf den Merkzettel setzen'
			dv.appendChild(document.createTextNode('merken'));
			buttons[buttons.length] = dv;
			td.appendChild(dv);
		}
		tr.appendChild(td);
		tb.appendChild(tr);

		if (picsel_data['descs']){
			var tr = document.createElement('tr');
			var td = document.createElement('td');
			td.className = 'desc';
			var dv = document.createElement('div');
			dv.appendChild(document.createTextNode(pd['dtext']));
			dv.onmouseover = picdesc_over;
			dv.onmouseout  = picdesc_out;
			td.appendChild(dv);
			tr.appendChild(td);
			tb.appendChild(tr);
		}

		ta.appendChild(tb);
		body.insertBefore(ta, obj);
		pd['pic'] = ta;
	}
	initButtonL(buttons);
}

// image positioning
var picsel_modulo = 4;
var picsel_top    = 150;
var picsel_left   = 20;
var picsel_width  = 231;
var picsel_height = 327;
function picsel_position(obj, pos)
{
	var x = (picsel_left+(pos%picsel_modulo)*picsel_width)+'px';
	var y = (picsel_top+parseInt(pos/picsel_modulo)*picsel_height)+'px';
	if (x != obj.style.left) obj.style.left=x;
	if (y != obj.style.top) obj.style.top=y;
}
function picsel_reposition(first)
{
	picsel_modulo = Math.max(3, Math.floor(picsel_wwidth/picsel_width));
	picsel_top = document.getElementById('openup').offsetHeight+10;
	picsel_left = Math.floor((picsel_wwidth - picsel_modulo*picsel_width)/2);
	picsel_opendesc(true);
	if (!first){
		var cnt=0;
		for (var picid in picsel_data){
			var pic = picsel_data[picid]['pic'];
			if (!pic.offcnt){
				picsel_position(pic, cnt++);
			}
		}
	}
}

// image buttons
function picsel_zoom()
{
	var pd=picsel_data['pic_'+this.id.substr(4)];
	if (pd) return pop_ext('/app/dbimage.php?path='+escape(pd['full']),pd['fw'],pd['fh']);
}
function picsel_orig()
{
	var pd=picsel_data['pic_'+this.id.substr(4)];
	if (pd) return pop_ext('/app/dbimage.php?path='+escape(pd['source']),800,600,3);
}
function picsel_mark()
{
	return markButton(this.id);
}

// page-selector
var picsel_timer = null;
function picsel_key(e)
{
	if (((typeof e=='undefined')?window.event.keyCode:e.keyCode) == 13){
		picsel_change();
	}else{
		if (picsel_timer) picsel_timer = window.clearTimeout(picsel_timer);
		picsel_timer = window.setTimeout('picsel_change(true)', 2000);
	}
}
function picsel_change(e)
{
	if (picsel_timer) picsel_timer = window.clearTimeout(picsel_timer);
	if (page_sel.value.match(/^\s*([0-9]+(\s*-\s*[0-9]+)?(\s*,\s*[0-9]+(\s*-\s*[0-9]+)?)*\s*)?$/)){
		picsel_pages = Array();
		var chunks = page_sel.value.split(',');
		for (var ccnt=0; ccnt<chunks.length; ccnt++){
			var frto = chunks[ccnt].split('-');
			if (frto.length==1){
				var fr = parseInt(frto[0]);
				var to = fr;
			}else{
				var fr = parseInt(frto[0]);
				var to = parseInt(frto[1]);
				if (fr > to){
					var tmp = to;
					to = fr;
					fr = tmp;
				}
			}
			if (!isNaN(fr)){
				picsel_pages[picsel_pages.length] = Array(fr,to);
			}
		}
		picsel_toggle(true);
	}else if (e !== true){
		alert('Bitte geben Sie einen korrekten Seitenfilter an.');
		page_sel.select();
		page_sel.focus();
	}else{
		page_sel.focus();
	}
}
function picsel_outside(pnr)
{
	if (!picsel_pages.length) return false;
	for (var cnt=0; cnt<picsel_pages.length; cnt++){
		if (pnr >= picsel_pages[cnt][0] && pnr <= picsel_pages[cnt][1]){
			return false;
		}
	}
	return true;
}

// desc-selector
var desc_open = false;
var desc_lock = false;
function picsel_opendesc(mode)
{
	if (mode === true){
		desc_lock = false;
		if (!desc_open) return;
	}
	if (!desc_lock){
		desc_sel.style.height = '';
		desc_sel.style.borderBottom = '1px solid #999999';
	}
}
function picsel_closedesc(mode)
{
	if (mode === true){
		desc_open = !desc_sel.style.height;
		desc_lock = true;
	}
	if (!desc_sel.style.height){
		desc_sel.style.height = '5em';
		desc_sel.style.borderBottom = '';
	}
}

function picsel_clear()
{
	for (var cnt=0, end=picsel_words.length; cnt<end; cnt++){
		picsel_words[cnt].className = '';
	}
	picsel_toggle(true, 0);
}
function picsel_toggle(e, forceval)
{
	var val  = 0;
	var word = null;
	if (e!==true){
		var sel = this.className.indexOf('selected')!=-1;
		var dis = this.className.indexOf('disabled')!=-1;
		if (!sel && dis) return;
		if (sel){
			this.className = dis?'disabled':'';
			val = -1;
		}else{
			this.className = 'selected';
			val = 1;
		}
		word = ' '+this.id.substr(5)+' ';
	}
	var words = '';
	var pos = 0;
	for (var picid in picsel_data){
		var pic = picsel_data[picid]['pic'];
		var pnr = picsel_data[picid]['page'];
		if (typeof forceval != 'undefined'){
			pic.offcnt = forceval;
		}else if (val && picsel_data[picid]['words'].indexOf(word)==-1){
			pic.offcnt += val;
		}
		if (pic.offcnt || picsel_outside(pnr)){
			pic.style.display = 'none';
		}else{
			pic.style.display = '';
			picsel_position(pic, pos++);
			words += picsel_data[picid]['words'];
		}
	}
	for (var cnt=0, end=picsel_words.length; cnt<end; cnt++){
		var word = picsel_words[cnt];
		var wdis = word.className.indexOf('disabled');
		if (!words || words.indexOf(' '+word.id.substr(5)+' ')==-1){
			if (wdis==-1){
				word.className += ' disabled';
			}
		}else if (wdis!=-1){
			word.className = word.className.split('disabled').join('');
		}
	}
}

// resize and scroll
var picsel_wwidth  = null;
var picsel_wheight = null;
var picsel_restime = null;
function picsel_resize()
{
	if (picsel_restime) window.clearTimeout(picsel_restime);
	picsel_restime = window.setTimeout('picsel_getsize()', 100);
}
function picsel_getsize(first)
{
	var w = document.documentElement.clientWidth || window.innerWidth || document.body.clientWidth || 0;
	var h = document.documentElement.clientHeight || window.innerHeight || document.body.clientHeight || 0;
	picsel_wheight = h;
	picsel_scrollbar();
	if (w!=picsel_wwidth){
		picsel_wwidth  = w;
		picsel_closedesc(true);
		window.setTimeout('picsel_reposition('+first+')', 100);
	}
	picsel_settop();
}

var picsel_opendiv = null;
function picsel_scrollbar()
{
	if (!picsel_opendiv){
		picsel_opendiv = document.createElement('div');
		picsel_opendiv.style.position = 'absolute';
		picsel_opendiv.style.top = '0px';
		picsel_opendiv.style.left = '0px';
		picsel_opendiv.style.width = '1px';
		picsel_opendiv.style.backgroundColor = 'white';
		picsel_topdiv.parentNode.appendChild(picsel_opendiv);
	}
	picsel_opendiv.style.height = (picsel_wheight+30)+'px';
}

var picsel_topdiv = null;
var picsel_toptime = null;
function picsel_scroll()
{
	picsel_topdiv.style.visibility = 'hidden';
	if (picsel_toptime) window.clearTimeout(picsel_toptime);
	picsel_toptime = window.setTimeout('picsel_settop()', 100);
}
function picsel_settop()
{
	if (picsel_topdiv){
		var y = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset || 0;
		var x = document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset || 0;
		if (picsel_wwidth && picsel_wheight){
			picsel_topdiv.style.top  = (y+picsel_wheight-30)+'px';
			picsel_topdiv.style.left = (x+picsel_wwidth-80)+'px';
			picsel_topdiv.style.visibility = 'visible';
		}
	}
}

// popout-descriptions
var picdesc_height = 45;
var picdesc_class  = null;
function initPicDesc()
{
	var descs = document.getElementsByTagName('td');
	for (var cnt=0; cnt<descs.length; cnt++){
		var obj = descs[cnt];
		if (obj.className == 'desc'){
			obj.firstChild.onmouseover = picdesc_over;
			obj.firstChild.onmouseout  = picdesc_out;
		}
	}
}
function picdesc_over(e)
{
	if (this.scrollHeight-4 > picdesc_height){
		picdesc_resize(this.scrollHeight-4);
		this.className = 'over';
	}
}
function picdesc_out(e)
{
	if (this.scrollHeight-4 > picdesc_height){
		this.className = '';
	}
}
function picdesc_resize(height)
{
	if (picdesc_class === false) return;
	if (!picdesc_class){
		var rules = new Array();
		if (document.styleSheets[0].cssRules){
			rules = document.styleSheets[0].cssRules;
		}else if (document.styleSheets[0].rules){
			rules = document.styleSheets[0].rules;
		}
		for (var i=0; i<rules.length; i++){
			if (rules[i].selectorText && rules[i].selectorText.toLowerCase() == 'body.entry table.pic td.desc div.over'){
				picdesc_class = rules[i];
				break;
			}
		}
		if (!picdesc_class) picdesc_class = false;
	}
	if (picdesc_class){
		var add = height-picdesc_height;
		picdesc_class.style.top = '-'+add+'px';
		picdesc_class.style.marginBottom = '-'+add+'px';
		picdesc_class.style.height = height+'px';
	}
}


