
/*
 * Functions for the HIP Europe web site.
 *
 * Copyright 2006, 2007 by Ben Siemerink.
 * http://www.qoben.com/
 */

function ju_winsize() { // {{{1
    var x=0, y=0;
    if (typeof(window.innerWidth)=='number') {
	x=window.innerWidth;
	y=window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
	x=document.documentElement.clientWidth;
	y=document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
	x=document.body.clientWidth;
	y=document.body.clientHeight;
    }
    return {x:x, y:y};
}

function submitForm(formid)
// Remove all paragraphs of class error.
{
  var paragraphs, i, e, form, pos, overlay;
  paragraphs=document.getElementsByTagName('p');
  for (i in paragraphs)
  {
    e=paragraphs[i];
    if (e && e.className && e.className=='error') e.parentNode.removeChild(e);
  }

  form=document.getElementById(formid);
  pos=ju_offset(form);

  overlay=document.createElement('div');
  overlay.className='overlay';
  overlay.style.left=(pos.x-3)+'px';
  overlay.style.top=(pos.y-3)+'px';
  overlay.style.width=(form.offsetWidth+12)+'px';
  overlay.style.height=(form.offsetHeight+6)+'px';
  overlay.innerHTML='<p class="submitted">Uw verzoek wordt verwerkt. <img width="42px" height="42px" src="/img/wait.gif"></p>';
  document.body.appendChild(overlay);
  form.submit();
  return true;
}


function paytobusinessChanged()
// Turns the business and personal fields on and off
{
  var e, businessfields, personalfields, enablefields, disablefields, field;
  e=document.getElementById('paytobusiness');
  if (!e) return;

  businessfields=['businessname', 'businessnumber', 'businessfiscalid', 'businessvar', 'selfbilling'];
  personalfields=['passportnumber', 'fiscalid'];
  if (e.value=='True')
  {
    enablefields=businessfields;
    disablefields=personalfields;
  }
  else
  {
    enablefields=personalfields;
    disablefields=businessfields;
  }
  for (field in disablefields)
  {
    e=document.getElementById(disablefields[field]);
    if (e)
    {
      e.disabled=true;
      e.className='disabled';
    }
  }
  for (field in enablefields)
  {
    e=document.getElementById(enablefields[field]);
    if (e)
    {
      e.disabled=false;
      e.className='';
    }
  }

  return;
}


function focusFirstField()
{
  var elist, i, e;
  elist=document.getElementsByTagName('input');
  for (i in elist) if (elist[i].type=="text" || elist[i].type=="password")
  {
    try { elist[i].focus(); break; }
    catch (e) {};
  }
}


function showHelp(id, text)
{
  var e;
  e=document.getElementById(id+'_help');
  if (!e) return;
  e.style.display='block';
  e.innerHTML='&raquo;&nbsp;'+text;

}


function showUpload(id, size)
{
  var e;
  e=document.getElementById(id+'_file');
  if (!e) return;
  e.innerHTML='<input type="file" class="file" id="'+id+'" name="'+id+'" size="'+size+'">';
}


function proj_deletefile(projectid, fileid, size)
{
  var e, url, td;
  e=document.getElementById('row_'+fileid);
  if (e)
  {
    url='proj.cgi?id='+projectid;
    td=e.childNodes[e.childNodes.length-1];
    td.innerHTML='<form id="form_'+fileid+'" method="post" accept-charset="UTF-8" action="proj.cgi" ><input type="hidden" name="action" value="delete"><input type="hidden" name="form_id" value="form_misc_'+fileid+'"><input type="hidden" id="id" name="id" value="'+projectid+'"><input type="hidden" id="fileid" name="fileid" value="'+fileid+'"><input class="button" type="button" value="Bevestig verwijdering" onclick="submitForm(\'form_'+fileid+'\');">&nbsp;<input class="button" type="button" onclick="javascript:document.location=url;" value="Annuleren"></form>';
  }
}


function proj_replacefile(projectid, fileid, size)
{
  var e, numcols, url, td;
  e=document.getElementById('row_'+fileid);
  if (e)
  {
    numcols=e.childNodes.length;
    url='proj.cgi?id='+projectid;
    // Remove all but two cells from this row
    while (e.childNodes.length>2) { e.removeChild(e.childNodes[1]); }
    td=e.childNodes[1];
    td.colSpan=numcols; // Make it span the whole row
    td.innerHTML='<form id="form_'+fileid+'" method="post" enctype="multipart/form-data" accept-charset="UTF-8" action="proj.cgi"><input type="hidden" name="form_id" value="form_misc_'+fileid+'"><input type="hidden" name="action" value="replace"><input type="hidden" id="id" name="id" value="'+projectid+'"><input type="hidden" id="fileid" name="fileid" value="'+fileid+'"><input type="file" class="file" id="filename" name="filename" size="'+size+'">&nbsp;<input class="button" type="button" value="Vervang" onclick="submitForm(\'form_'+fileid+'\');">&nbsp;<input class="button" type="button" onclick="javascript:document.location=url;" value="Annuleren"></form>';
  }
}


function editString(ref)
{
  var e;
  e=document.getElementById(ref);
  if (e)
  {
    e.innerHTML='<form id="form_misc_'+ref+'" method="post" accept-charset="UTF-8"><p><input class="button" type="button" onclick="submitForm(\'form_misc_'+ref+'\');" value="Update"> <input class="button" type="button" onclick="document.location=\'stringlist.cgi\';" value="Annuleren"></p><input type="hidden" name="form_id" value="form_misc_'+ref+'"><input type="hidden" name="ref" value="'+ref+'"><textarea name="text" cols="30" rows="15">'+e.childNodes[0].innerHTML+'</textarea></form>';
  }
}


function changedomain(level, id)
{
  var e, html, firstid, i, radio, div_domain;
  e=document.getElementById(id);
  if (!e) return;
  e.checked=true;

  div_domain=document.getElementById('div_domain');
  e=document.getElementById('div_'+level)
  if (!e) return;

  html='<table>';

  if (e.getAttribute('radio')) radio=e.getAttribute('radio')[0]=='t';
  else radio=true;

  firstid=null;
  for (i in subs[id])
  {
    if (!firstid) firstid=i;
    html+='<tr><th>';
    if (radio) {
      html+='<input type="radio" class="nb" id="'+i+'" name="'+level+'" value="'+i+'"';
      if (level=='subcategory')
      {
	html+=' onchange="changedomain(\'domain\', '+i+');"';
	html+=' onclick="changedomain(\'domain\', '+i+');"';
      }
      html+='></input>';
    }
    else html+='&bull;&nbsp;';
    html+='</th><td>'+subs[id][i]+'</td></tr>';
  }
  e.innerHTML=html+'</table>';

  if (level=='subcategory' && div_domain) div_domain.innerHTML='';

  /* IE6 hack: without this two click are needed to select. */
  try {
    document.getElementById(firstid).focus();
    if (div_domain) div_domain.focus();
    document.getElementById(id).focus();
  } catch(e) {};
}


function setToday(id)
{
  var d, m, y, now;

  // Verify form elements
  d=document.getElementById(id);
  m=document.getElementById(id+'__month');
  y=document.getElementById(id+'__year');
  if (!d || !m || !y) return;

  // Set to today
  now=new Date();
  d.value=now.getDate();
  m.value=now.getMonth()+1;
  y.value=now.getFullYear();
}


function humansonly(id, text, link)
{
  var element, t, i, l;
  element=document.getElementById(id);
  if (element==undefined) return;

  if (text!=null)
  {
    t='';
    for (i in text) t+=String.fromCharCode(150-text[i]);
    element.innerHTML=t;
  }

  if (link!=null && element.href)
  {
    l='';
    for (i in link) l+=String.fromCharCode(150-link[i]);
    element.href=l;
  }
}


function maxlen(textarea, maxlength)
{
  var text_id, curlength, hint_id;
  text_id=document.getElementById(textarea);
  if (text_id==undefined) return;

  curlength=document.getElementById(textarea).value.length;
  if (curlength==undefined) return;

  hint_id=document.getElementById(textarea+'_hint');
  if (hint_id==undefined) return;

  if (curlength<=maxlength)
  {
    hint_id.innerHTML='&raquo;&nbsp;Maximaal '+maxlength+' karakters; nog '+(maxlength-curlength)+' beschikbaar.';
    hint_id.className='hint_ok';
  }
  else
  {
    hint_id.innerHTML='&raquo;&nbsp;Maximaal '+maxlength+' karakters '+(curlength-maxlength)+' zal inkort worden.';
    hint_id.className='hint_truncate';
  }
}


/* Prefetch some pictures */
var prefetchlist=new Array();
function prefetch(imagelist)
{
  var i;
  for (i=0; i<imagelist.length; i++)
  {
    prefetchlist[i]=new Image();
    prefetchlist[i].src=imagelist[i];
  }
}


function release_message(id)
// Submits the message for release.
{
    var d, f;
    d=document.getElementById('text_'+id);
    f=document.getElementById('form_'+id);
    if (!d || !f) return;

    f.getElementsByTagName('input')[1].checked=true;
    f.submit();
}


function enable_form(id)
// Hides the division and shows the edit form.
{
    var d, f, buttonlist, i, e, winh, t, elist;
    d=document.getElementById('text_'+id);
    f=document.getElementById('form_'+id);
    if (!d || !f) return;

    // Turn off all other buttons
    buttonlist=document.getElementsByTagName('input');
    for (i in buttonlist) {
	e=buttonlist[i];
	if (e.className=='action') {
	    e.disabled=true;
	    e.className='noaction';
	}
    }

    winh=ju_winsize().y;
    t=f.getElementsByTagName('textarea')[0];
    if (t) t.style.height=(winh/2)+'px';
    d.style.display='none';
    f.style.display='block';
    if (f.scrollIntoView) {
	elist=f.getElementsByTagName('input');
	elist[elist.length-1].scrollIntoView(false);

	e=document.getElementById('h2_'+id);
	if (e) e.scrollIntoView(true);
	else if (t) t.scrollIntoView(true);
    }
    if (t) t.focus();
}


function cancel_form(id)
// Shows the division and hides the edit form.
{
    var d, f, buttonlist, i, e;
    d=document.getElementById('text_'+id);
    f=document.getElementById('form_'+id);
    if (!f) return;

    // Turn on all buttons
    buttonlist=document.getElementsByTagName('input');
    for (i in buttonlist) {
	e=buttonlist[i];
	if (e && e.className=='noaction') {
	    e.disabled=false;
	    e.className='action';
	}
    }

    if (d) d.style.display='block';
    f.style.display='none';
}


function set_display(id, display)
// Shows an element by setting its display option. If it exists, it hides the
// element id_hide.
{
    var d;
    d=document.getElementById(id);
    if (!d) return;
    d.style.display=display;

    d=document.getElementById(id+'_hide');
    if (!d) return;
    d.style.display='none';
}


function ju_offset(e)
{
    if (!e) return null;
    var x, y;
    x=e.offsetLeft;
    y=e.offsetTop;
    while (e.offsetParent) {
	e=e.offsetParent;
	x+=e.offsetLeft;
	y+=e.offsetTop;
    }
    return {x:x, y:y};
}


function search_change()
// Displays the search form and hides some buttons.
{
    var e;
    e=document.getElementById('search_change');
    if (e) e.style.display='none';
    enable_form('search');
}


function searchMethodA() {
    var e;
    try {
	e=document.getElementById('form_search')
	if (e) {
	    e.style.display='';
	    e.className='';
	}
	document.getElementById('searchCategories').style.display='';
	document.getElementById('searchWords').style.display='none';

	e.scrollIntoView(true);
    }
    catch (e) {}
}


function searchMethodB() {
    var e;
    try {
	e=document.getElementById('form_search')
	if (e) {
	    e.style.display='';
	    e.className='';
	}
	document.getElementById('searchWords').style.display='';
	document.getElementById('searchCategories').style.display='none';

	e.scrollIntoView(true);

	document.getElementById('q').focus();
    }
    catch (e) {}
}

function questionAccept(followup) {
    var e;
    e=document.getElementById('followup');
    if (e) e.value=followup;

    e=document.getElementById('satisfied');
    if (e) e.value=true;

    e=document.getElementById('form_accept');
    if (e) e.submit();
}

function questionReject() {
    var e;
    e=document.getElementById('satisfied');
    if (e) e.value=false;

    e=document.getElementById('form_accept');
    if (e) {
	e.className='';
	e.style.display='block';
    }
}

function registerUsertype(t) {
    var e, other, bigbutton;
    if (t!='expert' && t!='client') return;

    document.getElementById('registerUsertypes').style.display='none';
    document.getElementById('usertypeHint').style.display='none';
    if (t=='expert') {
      document.getElementById('businessname').parentNode.parentNode.style.display='none';
      document.getElementById('fullname').parentNode.parentNode.style.display='none';
      document.getElementById('phonenumber1').parentNode.parentNode.style.display='none';
      document.getElementById('phonenumber2').parentNode.parentNode.style.display='none';
    }
    document.getElementById('usertype').value=t;
    document.getElementById('submit'+t).style.display='';
    document.getElementById('register').style.display='block';
}


