// $Id: lmdb-u.js,v 1.13 2004/04/09 11:40:55 tulder Exp $


var supported = document.getElementById && document.childNodes &&
           document.createElement;
var editKolommen = false;

if (supported) {
	var old = (window.onload) ? window.onload : function () {};
	window.onload = function () {
    old();
    get_kolommenprefs();
    start_uitgebreidzoeken();
    tableruler();
    prepareBeoordeling();
    prepareOpenstaandeBeoordelingen();
    setMaxLength();
    showFlashMsg();
    setScreenClass();
  };
  window.onresize = setScreenClass;

	// kijken welke display-waarde hoort bij een tr en bij een td
	// IE zegt: block, de rest: table-row en table-cell
	// een proeftabel, regel en cel maken
	var tableEl = document.createElement('table');
	var trEl = document.createElement('tr');
	var tdEl = document.createElement('td');
	tableEl.appendChild(trEl);
	trEl.appendChild(tdEl);
	// welke waarde hebben ze?
	if (window.getComputedStyle) {
		var trDisplay = window.getComputedStyle(trEl,null).getPropertyValue('display');
		var tdDisplay = window.getComputedStyle(tdEl,null).getPropertyValue('display');
	} else if (trEl.currentStyle) {
		var trDisplay = trEl.currentStyle.display;
		var tdDisplay = tdEl.currentStyle.display;
	} else {
		supported = false;
	}
}

function setScreenClass(){
  var fmt = document.documentElement.clientWidth;
  var cls = fmt < 1050 ? '' : 'wide';
  document.body.className=cls;
}

function start_uitgebreidzoeken() {
	if (!supported) return false;

	var uitgebreidH2 = document.getElementById('uitgebreidzoeken');
	if (uitgebreidH2) {
		uitgebreidH2.onclick = klik_uitgebreidzoeken;
		uitgebreidH2.className = 'uitgeklapt';
		if (readCookie('uitgebreidzoeken')!='y') {
			uitgebreidH2.onclick();
		}
	}
}
function klik_uitgebreidzoeken() {
	if (!supported) return false;

	if (this.className!='uitgeklapt') {
		this.className = 'uitgeklapt';

		var tabelBody = this.parentNode.parentNode.parentNode;
		for (var i=0; i<tabelBody.childNodes.length; i++) {
			if (tabelBody.childNodes[i].className=='zoek_extra') {
				tabelBody.childNodes[i].style.display = trDisplay;
			}
		}

		createCookie('uitgebreidzoeken', 'y', 7);
	} else {
		this.className = '';

		var tabelBody = this.parentNode.parentNode.parentNode;
		for (var i=0; i<tabelBody.childNodes.length; i++) {
			if (tabelBody.childNodes[i].className=='zoek_extra') {
				tabelBody.childNodes[i].style.display = 'none';
			}
		}

		eraseCookie('uitgebreidzoeken');
	}
  this.blur();
  return false;
}

function list_kolommen() {
	if (!supported) return false;

	// kolommen langsgaan
	var kolommenverborgen = document.createElement('ul');

	var tabelBody = document.getElementById('resultatenTabelBody');
	var tabelkop = false;
	for (var i=0; i<tabelBody.childNodes.length; i++) {
		if (tabelBody.childNodes[i].nodeName=='TR') {
			tabelkop = tabelBody.childNodes[i];
			break;
		}
	}
	if (!tabelkop) return false;
	
	for (var i=0; i<tabelkop.childNodes.length; i++) {
		if (tabelkop.childNodes[i].nodeName=='TH') {
			if (tabelkop.childNodes[i].style.display=='none' ||
			    (tabelkop.childNodes[i].style.display=='' && tabelkop.childNodes[i].className.match('verborgen'))) {
				var kolomLi = document.createElement('li');
				kolomLi.kolompos = i;
				kolomLi.onclick = show_kolom;
				kolomLi.innerHTML = tabelkop.childNodes[i].innerHTML;
				kolommenverborgen.appendChild(kolomLi);
			}
		}
	}

	return kolommenverborgen;
}

function update_kolom(kolompos, displayType) {
	if (!supported) return false;

	var tabelBody = document.getElementById('resultatenTabelBody');

	for (var i=0; i<tabelBody.childNodes.length; i++) {
		// kolom weergeven of verbergen
		if (tabelBody.childNodes[i].nodeName=='TR') {
			tabelBody.childNodes[i].childNodes[kolompos].style.display = displayType;
		}
	}

	store_kolommenprefs();
}

function meerkolommen_klik() {
	if (!supported) return false;

	var kolomth = document.getElementById('meerkolommenTH');
	if (!editKolommen) {
		var kolommenDiv = document.createElement('div');
		var kolommenP = document.createElement('p');
		kolommenP.innerHTML = 'Klik op de kolom die u wilt verwijderen of kies een nieuwe kolom uit de lijst.&nbsp;'+
		                      '<b><a href="#" onclick="reset_kolommenprefs();return false;">(Reset)</a></b>';
		var kolommenList = list_kolommen();
		kolommenDiv.appendChild(kolommenP);
		kolommenDiv.appendChild(kolommenList);
		kolomth.appendChild(kolommenDiv);
		editKolommen = kolommenDiv;
		verplaats_kolommendiv();
	} else {
		kolomth.removeChild(editKolommen);
		editKolommen = false;
	}
}

function kolom_klik(kolomth) {
	if (!supported) return false;
	
	if (editKolommen) {
		if (kolomth.className.match(/eerste/)) {
			alert('U kunt deze kolom niet verbergen.');
			return false;
		}

		// kolom verbergen
		for (var i=1; i<kolomth.parentNode.childNodes.length; i++) {
			if (kolomth.parentNode.childNodes[i]==kolomth) {
				update_kolom(i, 'none');
				meerkolommen_klik();
				break;
			}
		}
	} else {
		// link volgen
		for (var i=0; i<kolomth.childNodes.length; i++) {
			if (kolomth.childNodes[i].nodeName=='A' &&
			    kolomth.childNodes[i].href!='#') {
				document.location.href = kolomth.childNodes[i].href;
			}
		}
	}
}

function show_kolom() {
	if (!supported || !editKolommen) return false;
	update_kolom(this.kolompos, tdDisplay);
	return false;
}

function verplaats_kolommendiv() {
	if (!supported || !editKolommen) return false;

	editKolommen.style.top = (findPosY(editKolommen.parentNode)+editKolommen.parentNode.offsetHeight-1)+'px';
	editKolommen.style.left = (findPosX(editKolommen.parentNode)+editKolommen.parentNode.offsetWidth-editKolommen.offsetWidth+1)+'px';
}

function store_kolommenprefs() {
	if (!supported) return false;

	// kolommen langsgaan
	var tabelBody = document.getElementById('resultatenTabelBody');
	var tabelkop = false;
	for (var i=0; i<tabelBody.childNodes.length; i++) {
		if (tabelBody.childNodes[i].nodeName=='TR') {
			tabelkop = tabelBody.childNodes[i];
			break;
		}
	}
	if (!tabelkop) return false;

	var verborgen = '';
	var zichtbaar = '';

	for (i=0; i<tabelkop.childNodes.length; i++) {
		if (tabelkop.childNodes[i].nodeName=='TH') {
			if (tabelkop.childNodes[i].style.display=='none' &&
			    !tabelkop.childNodes[i].className.match(/verborgen/)) {
				verborgen += ' '+i;
			}
			if ((tabelkop.childNodes[i].style.display=='block' ||
			     tabelkop.childNodes[i].style.display=='table-cell') &&
			    tabelkop.childNodes[i].className.match(/verborgen/)) {
				zichtbaar += ' '+i;
			}
		}
	}

	createCookie('kolommenprefs', zichtbaar+'-'+verborgen, 7);

	return false;
}

function get_kolommenprefs() {
	if (!supported) return false;

	var cookie = readCookie('kolommenprefs');
	var tabelBody = document.getElementById('resultatenTabelBody');
	if (cookie && tabelBody) {
		var delen = new Array();
		delen = cookie.split('-');

		var zichtbaar = new Array();
		zichtbaar = delen[0].split(' ');
		for (var i=0; i<zichtbaar.length; i++) {
			if (zichtbaar[i].match(/^[0-9]+$/)) {
				update_kolom(zichtbaar[i]*1, tdDisplay);
			}
		}

		var verborgen = new Array();
		verborgen = delen[1].split(' ');
		for (var i=0; i<verborgen.length; i++) {
			if (verborgen[i].match(/^[0-9]+$/)) {
				update_kolom(verborgen[i]*1, 'none');
			}
		}
	}
}

function reset_kolommenprefs() {
	if (!supported) return false;

	var tabelBody = document.getElementById('resultatenTabelBody');
	if (tabelBody) {
		var tabelkop = false;
		for (var i=0; i<tabelBody.childNodes.length; i++) {
			if (tabelBody.childNodes[i].nodeName=='TR') {
				tabelkop = tabelBody.childNodes[i];
				break;
			}
		}

		for (var i=0; i<tabelkop.childNodes.length; i++) {
			if (tabelkop.childNodes[i].nodeName=='TH' &&
			    tabelkop.childNodes[i].className.match(/verborgen/)) {
				update_kolom(i, 'none');
			} else if (tabelkop.childNodes[i].nodeName=='TH') {
				update_kolom(i, tdDisplay);
			}
		}
	}

	eraseCookie('kolommenprefs');
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}

function standaardtekst_weg(veld, standaardtekst) {
	if (veld.value==standaardtekst) {
		veld.value = '';
	}
}
function standaardtekst_terug(veld, standaardtekst) {
	if (veld.value=='') {
		veld.value = standaardtekst;
	}
}

function ganaarstap(stap) {
	// het formulier zoeken
	if (document.stappenFormulier) {
		document.stappenFormulier.ganaar.value = stap;
		document.stappenFormulier.submit();
		return false;
	}
}

function tabelformulier_uitbreiden(linkje) {
	// voegt een nieuwe regel toe aan het formulier 'tabel bewerken'
	// is het ondersteund?
	if (!supported) { return false; }

	// de regel opzoeken   a->td->tr
	var huidigeTR = linkje.parentNode.parentNode;

	// nog steeds ondersteund?
	if (!huidigeTR.cloneNode) { return false; }

	// regel klonen
	var nieuweTR = huidigeTR.cloneNode(true);

	// nummers in de regel aanpassen
	for (var i=0; i<nieuweTR.childNodes.length; i++) {
		// een TD?
		var curNode = nieuweTR.childNodes[i];
		if (curNode.nodeName=='TD') {
			// op zoek naar een input-veld
			for (var x=0; x<curNode.childNodes.length; x++) {
				// is dit de input?
				var curInput = curNode.childNodes[x];
				if (curInput.nodeName=='INPUT') {
					// naam veranderen
					var naam2 = curInput.name.replace(']','');
					naam2 = naam2.split('[');
					curInput.name = 'regel_nieuw['+(naam2[1]*1+1)+']['+naam2[2];
					curInput.value = '';
					break;
				}
			}
		}
	}

	// regelclass aanpassen
	nieuweTR.className = (nieuweTR.className=='a') ? 'b' : 'a';

	// wat is de regel na de huidigeTR?
	var volgendeRegel = huidigeTR.nextSibling;

	// regel in de tabel zetten
	huidigeTR.parentNode.insertBefore(nieuweTR, volgendeRegel);

	// de link weghalen
	if (linkje.nodeName=='A') {
		linkje.parentNode.removeChild(linkje);
	} else {
		// link zoeken
		for (var i=0; i<huidigeTR.childNodes.length; i++) {
			// een TD?
			var curNode = huidigeTR.childNodes[i];
			if (curNode.nodeName=='TD') {
				// op zoek naar een input-veld
				for (var x=0; x<curNode.childNodes.length; x++) {
					// is dit de link?
					var curInput = curNode.childNodes[x];
					if (curInput.nodeName=='A') {
						curNode.removeChild(curInput);
						break;
					}
				}
			}
		}
	}

	return false;
}
function tabelformulier_klikverwijderen(vakje) {
	// verwijderen geklikt
	// is het ondersteund?
	if (!supported) { return false; }

	// de class van de rij veranderen
	var deTR = vakje.parentNode.parentNode;
	if (vakje.checked) {
		deTR.className = deTR.className.charAt(0)+' verwijderen';
	} else {
		deTR.className = deTR.className.charAt(0);
	}

	// de velden op slot doen
	for (var i=0; i<deTR.childNodes.length; i++) {
		// is dit een td?
		var curNode = deTR.childNodes[i];
		if (curNode.nodeName=='TD') {
			// op zoek naar inputs
			for (var x=0; x<curNode.childNodes.length; x++) {
				// is dit een text-veld?
				var curInput = curNode.childNodes[x];
				if (curInput.nodeName=='INPUT' &&
				    curInput.type=='text') {
					// op slot doen
					curInput.disabled = vakje.checked;
					break;
				}
			} 
		}
	}
}

var rulerTrs = false;
function tableruler() {
	if (!supported) { return false; }

	// is de rulertabel er?
	if (document.getElementById('rulertabel')) {
		var rulertabel = document.getElementById('rulertabel');
		rulerTrs = rulertabel.getElementsByTagName('tr');
		var trs = rulerTrs;

		for (var i=0; i<trs.length; i++) {
			if (trs[i].className!='kopregel' && trs[i].className!='knopregel') {
				// mouseover op de td's zetten
				for (var x=0; x<trs[i].childNodes.length; x++) {
					if (trs[i].childNodes[x].nodeName=='TD') {
						var tds = trs[i].childNodes[x];
						tds.kolomPositie = x;
						tds.onmouseover=function(){showruler(this,true);};
						tds.onmouseout=function(){showruler(this,false);};
					}
				}
			}
		}
	}
}
function showruler(deTD, ruler) {
	if (!supported) { return false; }

	// deze tr markeren
	deTD.parentNode.className = ruler ? 'communityregel ruler' : 'communityregel';

	// de kolommen markeren
	var trs = rulerTrs;
	for (var i=0; i<trs.length; i++) {
		if (trs[i].className!='knopregel' && trs[i].childNodes[deTD.kolomPositie]) {
			trs[i].childNodes[deTD.kolomPositie].className = ruler ? 'ruler' : '';
		}
	}
}

function controleerUploadBestand() {
	if (!supported) { return false; }

	var parts = document.formulier.bestand.value.split(/[\\\/]/);
	var bestnaam = parts[parts.length-1];
	var tabel = document.getElementById('tabelBestandBewerken');
	var labels = document.getElementsByTagName('label');
	for (var i=0; i<labels.length; i++) {
		if (labels[i].innerHTML==bestnaam &&
		    labels[i].parentNode &&
			labels[i].parentNode.parentNode &&
			labels[i].parentNode.parentNode.firstChild &&
			labels[i].parentNode.parentNode.firstChild.firstChild &&
			labels[i].parentNode.parentNode.firstChild.firstChild.nodeName=='INPUT') {
			if (confirm('Er is al een bestand met bestandsnaam '+bestnaam+'. Wilt u het bestaande bestand overschrijven? (Ja: klik OK. Nee: klik Annuleren.)')) {
				labels[i].parentNode.parentNode.firstChild.firstChild.checked = true;
			}
			break;
		}
	}
}

function prepareBeoordeling() {
  if (!supported) return false;

  var beoordelingDiv = document.getElementById("uw-beoordeling");
  if (!beoordelingDiv) return false;

  addBeoordelingMouseovers(beoordelingDiv);
}

function addBeoordelingMouseovers(beoordelingDiv) {
  var images = new Array();
  for (var i=0; i<beoordelingDiv.childNodes.length; i++) {
    if (beoordelingDiv.childNodes[i].nodeName=="IMG") {
      images[images.length] = beoordelingDiv.childNodes[i];
    }
  }

  var strong = beoordelingDiv.getElementsByTagName("H2");
  if (strong.length==0) strong = beoordelingDiv.getElementsByTagName("H3");
  strong[0].origText = strong[0].innerHTML;
  
  for (var i=0; i<images.length; i++) {
    images[i].nummer = i+1;
    images[i].origSrc = images[i].src;
    images[i].style.cursor = "pointer";
    images[i].onmouseover = function() {
        var sib = this;
        while (sib) {
          if (sib.nodeName=="IMG") {
            sib.src = sib.src.replace(/beoordeling-.+\.gif/, "beoordeling-over-vol.gif");
          }
          sib = sib.previousSibling;
        }
        sib = this.nextSibling;
        while (sib) {
          if (sib.nodeName=="IMG") {
            sib.src = sib.src.replace(/beoordeling-.+\.gif/, "beoordeling-leeg.gif");
          }
          sib = sib.nextSibling;
        }

        var tekst;
        switch (this.nummer) {
          case 1: tekst = "Slecht"; break;
          case 2: tekst = "Matig"; break;
          case 3: tekst = "Gemiddeld"; break;
          case 4: tekst = "Goed"; break;
          case 5: tekst = "Geweldig"; break;
        }
        
        var strong = this.parentNode.getElementsByTagName("H2");
        if (strong.length==0) strong = this.parentNode.getElementsByTagName("H3");
        strong[0].innerHTML = tekst;
      };
    images[i].onmouseout = function() {
        var images = this.parentNode.getElementsByTagName("IMG");
        for (var i=0; i<images.length; i++) {
          images[i].src = images[i].origSrc;
        }
        var strong = this.parentNode.getElementsByTagName("H2");
        if (strong.length==0) strong = this.parentNode.getElementsByTagName("H3");
        strong[0].innerHTML = strong[0].origText;
      };
    images[i].onclick = function() {
        var inputs = this.parentNode.getElementsByTagName("INPUT");
        if (inputs.length > 0) {
          inputs[0].value = this.nummer;
          var strong = this.parentNode.getElementsByTagName("H2");
          if (strong.length==0) strong = this.parentNode.getElementsByTagName("H3");
          strong[0].origText = strong[0].innerHTML;

          for (var j=0; j<images.length; j++) {
            if (images[j].src.match('vol')) {
              images[j].origSrc = images[j].origSrc.replace(/beoordeling-.+\.gif/, "beoordeling-user-vol.gif");
            } else {
              images[j].origSrc = images[j].origSrc.replace(/beoordeling-.+\.gif/, "beoordeling-leeg.gif");
            }
          }

        } else if (setBeoordeling) {
          setBeoordeling(this.nummer, function() { $('uw-beoordeling').onmouseout=function(){this.onmouseout=function(){}; prepareBeoordeling();}; });
          var strong = this.parentNode.getElementsByTagName("H2");
          if (strong.length==0) strong = this.parentNode.getElementsByTagName("H3");
          strong[0].origText = strong[0].innerHTML = "Even geduld...";
        }
      };
  }
}

function prepareOpenstaandeBeoordelingen() {
  var beoordelingenDiv = document.getElementById("openstaande-beoordelingen");
  if (!beoordelingenDiv) return false;

  var divs = beoordelingenDiv.getElementsByTagName("div");
  for (var i=0; i<divs.length; i++) {
    if (divs[i].className=="beoordeling-sterren") {
      addBeoordelingMouseovers(divs[i]);
    }
  }

  var inputs = beoordelingenDiv.getElementsByTagName("input");
  for (var i=inputs.length-1; i>=0; i--) {
    if (inputs[i].className=="submit") {
      var form = inputs[i].form;
      var a = document.createElement("A");
      a.href = "#";
      a.innerHTML = inputs[i].value;
      a.className = "submit";
      a.onclick = function() {
          form.submit();
          return false;
        };
      inputs[i].parentNode.replaceChild(a, inputs[i]);
    }
  }
}

function showFlashMsg() {
  var flashDiv = document.getElementById("flash");
  if (flashDiv) {
    new Effect.Appear('flash',
                      { duration:1,
                        afterFinish:function(){
                            new Effect.Fade('flash',
                                            { duration:1,
                                              delay:2,
                                              afterFinish:function(){ $('flash').parentNode.removeChild($('flash')); } });
                          } });
  }
}

// popupscript van www.quirksmode.org
function popitup(url) {
  newwindow=window.open(url,'lmdb_popup','height=400,width=500,scrollbars=yes,status=no,resizable=yes');
  if (window.focus) {newwindow.focus()}
  return false;
}

// maxlengthscript van www.quirksmode.org
function setMaxLength() {
  var x = document.getElementsByTagName('textarea');
  var counter = document.createElement('div');
  counter.className = 'counter';
  for (var i=0;i<x.length;i++) {
    if (x[i].getAttribute('maxlength')) {
      var counterClone = counter.cloneNode(true);
      counterClone.relatedElement = x[i];
      counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
      x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
      x[i].relatedElement = counterClone.getElementsByTagName('span')[0];

      x[i].onkeyup = x[i].onchange = checkMaxLength;
      x[i].onkeyup();
    }
  }
}

function checkMaxLength() {
  var maxLength = this.getAttribute('maxlength');
  var currentLength = this.value.length;
  if (currentLength > maxLength)
    this.relatedElement.className = 'toomuch';
  else
    this.relatedElement.className = '';
  this.relatedElement.firstChild.nodeValue = currentLength;
  // not innerHTML
}

