//
// 2006 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.
//

var iemode = navigator.userAgent.indexOf('MSIE')>0;

var dateValue    = 'DD.MM.JJJJ';
var minLength    = 2;
var forceMode    = true; // true: normal search, false: quick search, null: no force
var searchMode   = false; // true: normal search, false: quick search
var dateFrom     = null;
var dateTo       = null;
var searchForm   = null;
var searchInput  = null;
var modeField    = null;
var extendedForm = null;

function initSearch()
{
	// fix for firefox error: XULElement.selectedIndex
	try{
		var inputs = document.getElementsByTagName('INPUT');
			for(var i=0; i<inputs.length; i++)
				inputs[i].setAttribute('autocomplete', 'off');
	}catch(e){}

	searchForm = document.getElementById('search');

	document.getElementById('submit').onclick = submitSearch;
	document.getElementById('reset').onclick = resetForm;

	searchInput  = document.getElementById('query');
	extendedForm = document.getElementById('extended');

	modeField  = document.getElementById('mode');
	dateFrom   = document.getElementById('runfrom');
	dateTo     = document.getElementById('runto');

	var es = document.getElementsByTagName('input');
	var ee = es.length;
	for (var ec=0; ec<ee; ec++)
		if (es[ec].type != 'text')
			es[ec].onclick=updateSearch;

	try{
		suggest_init(searchInput, submitSearch, 0, searchInput.offsetTop+searchInput.offsetHeight-1);
		suggest_focusfn = showSearchTip;
		suggest_blurfn  = hideSearchTip;
		suggest_openfn  = openSearch;
		suggest_closefn = closeSearch;
		searchForm.onmouseup = closeSuggest;
	}catch(e){
		suggest_typer = searchInput;
	}

	window.onresize = resizeSearch;
	resizeSearch();
	resetForm();

	window.setTimeout('modeField.focus()', 10);
}

function setSearch(query, append){
	suggest_cursor = null;
	searchInput.focus();
	if (append){
		if (searchInput.value == suggest_default) searchInput.value = '';
		if (searchInput.value && !searchInput.value.match(/^.*\s$/)) query = ' '+query;
		searchInput.value += query;
	}else{
		searchInput.value = query;
		submitSearch();
	}
}

function closeSuggest(e){
	try{
		var obj = (typeof e=='undefined')?window.event.srcElement:e.target
		if (obj && obj != searchInput){
			suggest_close(true);
		}
	}catch(e){}
}

function resizeSearch()
{
	window.scrollTo(0,0); // keep content at top
	var width = Math.max(0,document.body.clientWidth-220)+'px';
	searchInput.style.width = width;
	try {
		suggest_resize(width, searchForm.offsetHeight-suggest_popup.offsetTop-(iemode?0:6)) // !! padding !!
	} catch(e) {}
	try {
		var newcols = (searchForm.offsetHeight+20)+',14,*';
		if (newcols != top.sizes[1][1]){
			top.sizes[1][1]	= newcols;
			if (searchMode) top.sizer(1,-1);
		}
	} catch(e) {}
	suggest_dofocus();
}

function initDate(obj)
{
	obj.onfocus = dateFocus;
	obj.onblur  = dateBlur;
	dateBlur(null,obj);
}

function dateFocus()
{
	if (this.value == dateValue)
		this.value = '';
	else
		this.select();
}

var days = Array(31,0,31,30,31,30,31,31,30,31,30,31);
function dateBlur(e,obj)
{
	var ths=(typeof obj == 'undefined')?this:obj;
	var frommode = ths.id=='runfrom';
	if (!ths.value || !ths.value.replace(/\s/g,'')){
		ths.value = dateValue;
		(frommode?dateTo:dateFrom).value = dateValue;
	}else{
		var match = /^(((\d+)\.)?(\d+)\.)?(\d+)$/;
		match.exec(ths.value);
		var day   = RegExp.$3;
		var month = RegExp.$4;
		var year  = RegExp.$5;
		if (!year){
			ths.value = dateValue;
		}else{
			year = parseInt(year);
			if (year){
				if (year<10) year += 2000;
				if (year<100) year += 1900;
				var emonth = month?0:(frommode?12:1);
				month = month?Math.max(Math.min(month,12),1):(frommode?1:12);
				if (!emonth) emonth=month;
				var maxday = days[month-1];
				if (!maxday) maxday = ((year%4)&&(!(year%100))||(year%400))?28:29;
				var eday = day?0:(frommode?maxday:1);
				day = day?Math.max(Math.min(day,maxday),1):(frommode?1:maxday);
				if (!eday) eday=day;
				ths.value = form(day,2)+'.'+form(month,2)+'.'+year;
				var other = frommode?dateTo:dateFrom;
				if (other.value == dateValue)
					other.value = form(eday,2)+'.'+form(emonth,2)+'.'+year;
				if (frommode){
					if (parseInt(''+ths.value.substr(6)+ths.value.substr(3,2)+ths.value.substr(0,2))>parseInt(''+other.value.substr(6)+other.value.substr(3,2)+other.value.substr(0,2))){
						var tmp = ths.value;
						ths.value = other.value;
						other.value = tmp;
					}
				}else{
					if (parseInt(''+other.value.substr(6)+other.value.substr(3,2)+other.value.substr(0,2))>parseInt(''+ths.value.substr(6)+ths.value.substr(3,2)+ths.value.substr(0,2))){
						var tmp = ths.value;
						ths.value = other.value;
						other.value = tmp;
					}
				}
			}else{
				ths.value = dateValue;
				(frommode?dateTo:dateFrom).value = dateValue;
			}
		}
	}
	updateTree0();
}

function resetForm()
{
	top.sid = null;
	top.setHighlight();
	searchForm.reset();
	suggest_blur();
	suggest_close(true);
	setMode(top.getsize(1));
	initDate(dateFrom);
	initDate(dateTo);
	updateSearch(null,true);
	return false;
}

function submitSearch(e)
{
	var message = checkSearch();
	if (message){
		alert(message);
	}else{
		if (!top.onroot && top.frames.tree.fid){
			document.getElementById('path').value = top.frames.tree.fid.join('_');
		}else{
			document.getElementById('path').value = '';
		}
		top.frames.content.location.replace('/fix/wait.html');
		if (modeField.value == '1' && extendedForm.disabled){
			extendedForm.disabled = false;
			searchForm.submit();
			extendedForm.disabled = true;
		}else{
			suggest_close(); // close suggestions if open so search form is visible
			suggest_supress = suggest_count+1; // supress next suggestion trigger
			searchForm.submit();
		}
		try{
			if (searchMode) top.frames.vsizer.document.getElementById('up').onclick();
		}catch(e){};
	}
	searchInput.focus();
	return false;
}

function checkSearch()
{
	var query = suggest_getinput();

	if (!query){
		return 'Bitte geben Sie einen Suchbegriff an.';
	}

	if (query.length < minLength){
		return 'Ihr Suchbegriff muss mindestens '+minLength+' Zeichen lang sein.';
	}

	if (!oneChecked('tree[]')){
		return 'Bitte wählen Sie mindestens einen Eintragstyp.';
	}

	if (document.getElementById('tree1').checked && !oneChecked('type[]')){
		return 'Bitte wählen Sie mindestens einen Archivalientyp.';
	}

	return null;
}

function updateSearch(e,all)
{
	// check "tree1" - set "tree0", "type" and "run*"
	var forcetype = false;
	if (all || this.id == 'tree1'){
		var off = !document.getElementById('tree1').checked;
		edable('type', off, true);
		edable('flag', off, true);
		edable('run', off, true);
		forcetype = true;
	}

	// check "type" - check/uncheck "type"s
	if (forcetype || all || this.name == 'type[]'){
		var ths = (forcetype||all)?document.getElementById('type'):this;
		if (forcetype || ths.id == 'type'){
			var off = all||(forcetype?(!this.checked||(this.checked&&ths.checked)):ths.checked);
			var ids = '|';
			var es = getElementsByName('type[]');
			var ee = es.length;
			for (var ec=0; ec<ee; ec++)
				if (es[ec].id != 'type'){
					es[ec].disabled = off;
					ids += es[ec].id+'|';
				}
			var es = document.getElementsByTagName('label');
			var ee = es.length;
			for (var ec=0; ec<ee; ec++)
				if (ids.indexOf('|'+es[ec].htmlFor+'|')!=-1)
					es[ec].className=off?'disabled':'';
		}
	}

	updateTree0();
	return true;
}

function updateTree0(){
	var off = document.getElementById('tree1').checked && (
						document.getElementById('flaghaspic').checked ||
	          dateFrom.value!=dateValue ||
						dateTo.value!=dateValue ||
						!document.getElementById('type').checked);
	document.getElementById('tree0').disabled = off;
	getLabelsByFor('tree0')[0].className = off?'disabled':'';
}

function form(num, len)
{
	var res = ''+num;
	while (res.length<len) res = '0'+res;
	return res;
}

function openhelp()
{
	pop_ext('/fix/shelp.html',600,400,3);
	return false;
}

function openSearch()
{
	top.frames.vsizer.sizers['down'].onclick();
}

function closeSearch()
{
	top.frames.vsizer.sizers['up'].onclick();
}

function setMode(mode)
{
	if (modeField===null) return false;
	searchMode = mode;
	modeField.value = ((forceMode===null)?mode:forceMode)?'1':'0';
	if (mode){
		extendedForm.disabled = false;
		extendedForm.style.visibility = 'visible';
		suggest_enable();
		tip_needed = false;
	}else{
		suggest_disable();
		extendedForm.style.visibility = 'hidden';
		extendedForm.disabled = true;
	}
	return true;
}

function oneChecked(name, lazy)
{
	var es = getElementsByName(name, lazy);
	var ee = es.length;
	for (var ec=0; ec<ee; ec++) if (es[ec].checked) return true;
	return false;
}

function getElementsByName(name, lazy)
{
	var res = new Array();
	var nl = name.length;
	var es = document.getElementsByTagName('input');
	var ee = es.length;
	if (lazy){
		for (var ec=0; ec<ee; ec++)
			if (es[ec].name.substring(0,nl) == name)
				res[res.length] = es[ec];
	}else{
		for (var ec=0; ec<ee; ec++)
			if (es[ec].name == name)
				res[res.length] = es[ec];
	}
	return res;
}

function getLabelsByFor(name, lazy)
{
	var res = new Array();
	var nl = name.length;
	var es = document.getElementsByTagName('label');
	var ee = es.length;
	if (lazy){
		for (var ec=0; ec<ee; ec++)
			if (es[ec].htmlFor.substring(0,nl) == name)
				res[res.length] = es[ec];
	}else{
		for (var ec=0; ec<ee; ec++)
			if (es[ec].htmlFor == name)
				res[res.length] = es[ec];
	}
	return res;
}

function rotate(what)
{
	var rb = getElementsByName(what);
	var re = rb.length;
	for (var rc=0; rc<re; rc++){
		if (rb[rc].checked){
			rb[(rc+1)%re].checked = true;
			break;
		}
	}
	return false;
}

function edable(what, off, lazy)
{
	var es = getElementsByName(what, lazy);
	var ee = es.length;
	for (var ec=0; ec<ee; ec++)
		es[ec].disabled = off;
	var es = getLabelsByFor(what, lazy);
	var ee = es.length;
	for (var ec=0; ec<ee; ec++)
		es[ec].className = off?'disabled':'';
}

function result(resid)
{
	top.frames.content.location.href = '/app/result.php?'+resid;
}

var bdname = null;
var fbname = null;
function opensigs()
{
	if (!top.onroot && top.frames.tree.fid){
		pop_ext('/app/sigsearch.php?path='+top.frames.tree.fid.join('_'),620,185,3);
	}else{
		pop_ext('/app/sigsearch.php',620,185,3);
	}
	return false;
}
function siginit()
{
	bdname = document.getElementById('bdname');
	fbname = document.getElementById('fbname');
	bdname.onkeyup = sigkeys;
	fbname.onkeyup = sigkeys;
	var es = document.getElementsByTagName('input');
	var ee = es.length;
	for (var ec=0; ec<ee; ec++){
		if (es[ec].name == 'archive'){
			es[ec].onfocus = sigfocus;
		}
	}
	sigfocus();
}
function sigfocus()
{
	bdname.focus();
}
function sigkeys(e)
{
	switch ((typeof e=='undefined')?window.event.keyCode:e.keyCode){
		case 13:
			sigsubmit();
			break;
		case 27:
			window.close();
			break;
	}
	return true;
}
function sigsubmit()
{
	if (!bdname.value.replace(/\s/g,'')){
		alert('Bitte geben Sie mindestens die Bestands-Nr an.');
		sigfocus();
	}else{
		document.getElementById('sigsearch').submit();
	}
	return false;
}

var tip_needed = true;
function showSearchTip()
{
	if (tip_needed){
		try{
			top.frames.content.showTip('Klicken Sie bitte auf<br />diesen Pfeil, um die<br />erweiterten Suchoptionen<br />einzublenden.',Math.max(0,document.body.clientWidth/2-162),0);
		}catch(e){};
	}
}
function hideSearchTip()
{
	top.frames.content.hideTip();
}

function searchConcrete()
{
	tip_needed = false;
	hideTip();
	openSearch();
	searchInput.focus();
	return false;
}

function searchMore(num)
{
	document.getElementById('maxhits'+num).checked = true;
	return submitSearch();
}
