
// ####################################################################################################################

function fnInit()
{
  try { fnRunClock(); } catch(e) {}
}

// --------------------------------------------------------------------------------------------------------------------

function fnRunClock()
{
  var objClock = $('elementClockData');
  
  if(objClock)
  {
    var now = new Date();
    
    var h = now.getHours(); if(h<10) h = '0'+h;
    var i = now.getMinutes(); if(i<10) i = '0'+i;
    var s = now.getSeconds(); if(s<10) s = '0'+s;
    var w = js_weekdays[now.getDay()];
    var d = now.getDate();
    var m = js_monthnames[now.getMonth()+1];
    var y = now.getFullYear();

    objClock.innerHTML = h + ':' + i + ' | ' + w + ' ' + d + ' ' + m + ' ' + y;

    window.setTimeout('fnRunClock()', 5000);
  }
}

// ####################################################################################################################

function fnMQ()
{
  fnHTTPGet(js_website_url_root + 'mq');
}

// ####################################################################################################################

function fnMarkErrorObjects(objForm)
{
  if(objForm.app_errob.value!="")
  {
    var arrObjs = objForm.app_errob.value.split("~");

    for(i=0;i<arrObjs.length;i++)
      document.getElementsByName(arrObjs[i])[0].parentNode.parentNode.style.background = 'yellow';
  }
}

// ####################################################################################################################

function fnInitializeBuyerInfoForm()
{
  f = document.forms.buyer_info_form;

  if(f.app_passchange && f.app_passchange[0].checked) fnHideElements('TR','pcrow','hide');
  fnMarkErrorObjects(f);
  fnCheckZipcodeOnChange(f.dat_zipcode);
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeSellerRegistrationForm()
{
  if(document.forms.seller_registration_form)
  {
    f = document.forms.seller_registration_form;

    fnMarkErrorObjects(f);

    fnCheckZipcodeOnChange(f.dat_visit_zip, 'vlabel');
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeSellerRegistrationSimple()
{
  if(document.forms.seller_registration_form)
  {
    f = document.forms.seller_registration_form;
    fnMarkErrorObjects(f);
    f.dat_company_name.focus();
    fnCheckZipcodeOnChange(f.dat_visit_zip, 'vlabel');
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeSellerInfoForm()
{
  f = document.forms.seller_info_form;

  if(f.app_passchange && f.app_passchange[0].checked) fnHideElements('TR','pcrow','hide');
  if(f.dat_match_engine_on && f.dat_match_engine_on[0].checked) fnHideElements('TR','mrow','hide');

  var arrMatchPwMakes = f.app_match_pw_makes.value.split(';');
  var arrMatchPtMakes = f.app_match_pt_makes.value.split(';');

  for(i=0; i<5; i++)
  {
    objPwInput = document.getElementsByName('dat_match_pw_makes['+i+']')[0];
    objPtInput = document.getElementsByName('dat_match_pt_makes['+i+']')[0];
    fnBuildMakesList(objPwInput);
    fnBuildMakesList(objPtInput);
    if(arrCars[arrMatchPwMakes[i]] || arrMatchPwMakes[i]=='*') objPwInput.value = arrMatchPwMakes[i];
    if(arrCars[arrMatchPtMakes[i]] || arrMatchPtMakes[i]=='*') objPtInput.value = arrMatchPtMakes[i];
  }

  fnMarkErrorObjects(f);

  fnCheckZipcodeOnChange(f.dat_visit_zip, 'vlabel');
  fnCheckZipcodeOnChange(f.dat_post_zip, 'plabel');
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeLogonForm()
{
  var f = document.forms.logon_form;

  if(f.app_account && f.app_account[0].checked) fnHideElements('TR','pcrow','hide');
  fnMarkErrorObjects(f);
  fnCheckZipcodeOnChange(f.dat_zipcode);
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeRequestForm()
{
  if(document.forms.request_form)
  {
    f = document.forms.request_form;

    fnBuildMakesList(f.dat_pw_make);
    fnBuildMakesList(f.dat_pt_make);
    fnBuildModelsList(f.dat_pw_model, f.dat_pw_make.value);
    fnBuildModelsList(f.dat_pt_model, f.dat_pt_make.value);

    if(arrCars[f.app_pw_make.value])
    {
      f.dat_pw_make.value = f.app_pw_make.value;
      fnBuildModelsList(f.dat_pw_model, f.dat_pw_make.value);
      if(f.app_pw_model.value==js_texts[3310] ||
       f.app_pw_model.value!='' && (arrCars[f.app_pw_make.value].join('~~')+'~~').indexOf(f.app_pw_model.value+'~~')>=0)
        f.dat_pw_model.value = f.app_pw_model.value;
    }
    if(arrCars[f.app_pt_make.value])
    {
      f.dat_pt_make.value = f.app_pt_make.value;
      fnBuildModelsList(f.dat_pt_model, f.dat_pt_make.value);
      if(f.app_pt_model.value==js_texts[3310] ||
       f.app_pt_model.value!='' && (arrCars[f.app_pt_make.value].join('~~')+'~~').indexOf(f.app_pt_model.value+'~~')>=0)
        f.dat_pt_model.value = f.app_pt_model.value;
    }
    fnMarkErrorObjects(f);
    if(f.dat_pw_buy_vehicle[1].checked) fnHideElements('TR','pwrow','hide');
    if(f.dat_pt_trade_vehicle[1].checked) fnHideElements('TR','ptrow','hide');
    if(f.app_user_account && f.app_user_account[1].checked) fnHideElements('TR','pcrow','hide');
    fnCheckZipcodeOnChange(f.dat_zipcode);
    fnCheckLicenseOnChange();
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeReplyForm()
{
  if(document.forms.reply_form)
  {
    f = document.forms.reply_form;

    fnMarkErrorObjects(f);
    if(f.app_user_account && f.app_user_account[1].checked) fnHideElements('TR','usr_row','hide');
    if(f.dat_zipcode) fnCheckZipcodeOnChange(f.dat_zipcode);
  }

  if($('elementDivSuccesMsg')) alert($('elementDivSuccesMsg').innerHTML.replace(/~~/gi,'\n'));
}

// --------------------------------------------------------------------------------------------------------------------

function fnInitializeRequestSearchForm()
{
  if(document.forms.search_form)
  {
    f = document.forms.search_form;
    
    fnBuildMakesList(f.dat_make);
    fnBuildModelsList(f.dat_model, f.dat_make.value);

    if(arrCars[f.app_make.value])
    {
      f.dat_make.value = f.app_make.value;
      fnBuildModelsList(f.dat_model, f.dat_make.value);
      if(f.app_model.value!="" && (arrCars[f.app_make.value].join('~~')+'~~').indexOf(f.app_model.value+'~~')>=0)
        f.dat_model.value = f.app_model.value;
    }

    if(f.app_search_mode.value=='all')
      fnSwitchTabForm(0);
    else if(f.app_search_mode.value=='wish')
      fnSwitchTabForm(1);
    else if(f.app_search_mode.value=='trade')
      fnSwitchTabForm(2);
  }
}

// ####################################################################################################################

function fnPrepareRequestFormSubmit()
{
  f = document.forms.request_form;

  if(fnSelectedRadioValue(f.dat_pt_trade_vehicle)=='N')
  {
    f.dat_pt_photo1.disabled = true;
    f.dat_pt_photo2.disabled = true;
    f.dat_pt_photo3.disabled = true;
  }
  else
  {
    if(!fnCheckFileInputs()) return false;
  }

  // SHOW UPLOAD BAR
  $('elementPageHeader').style.display = 'none';
  if($('elementErrorMessage')) $('elementErrorMessage').style.display = 'none';
  $('elementRequestForm').style.display = 'none';
  $('elementUploadInfo').style.display = 'block';
  setTimeout("$('loading_img').src = js_website_url_root + 'images/animated_globe.gif'", 400);

  return true;
}

// --------------------------------------------------------------------------------------------------------------------

function fnPrepareReplyFormSubmit()
{
  f = document.forms.reply_form;

  if(!fnCheckFileInputs()) return false;

  // SHOW UPLOAD BAR
  $('elementRequestViewPage').style.display = 'none';
  $('elementUploadInfo').style.display = '';
  setTimeout("$('loading_img').src = js_website_url_root + 'images/animated_globe.gif'", 400);

  return true;
}

// ####################################################################################################################

function fnBuildMakesList(make_pd)
{
  var arrMakes = new Array();
  make_pd.length = 0;
  make_pd.innerHTML = null;

  fnAddOption(make_pd, '', js_texts[3300]);

  if( make_pd.form.name=='request_form' ||
      make_pd.form.name=='seller_registration_form' ||
      make_pd.form.name=='seller_info_form' )
  {
    fnAddOptionGroup(make_pd, '----------------------------------------', 'lightgray');
    
    if( make_pd.form.name=='seller_registration_form' && make_pd.name=='dat_main_make1' ||
        make_pd.form.name=='seller_info_form')
    {
      fnAddOption(make_pd, '*', 'Alle Merken (Universeel)');
      fnAddOptionGroup(make_pd, '----------------------------------------', 'lightgray');
    }
  }

  for(var x in arrCars) arrMakes.push(x);
  arrMakes.sort();

  for(var x in arrMakes) {
    fnAddOption(make_pd, arrMakes[x]);
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnBuildModelsList(model_pd, curMake)
{
  model_pd.length = 0;
  model_pd.innerHTML = null;

  if(!arrCars[curMake]) {
    fnAddOption(model_pd, '', js_texts[3301]);
    model_pd.disabled = true;
  }
  else
  {
    if(model_pd.name=='dat_pt_model') {
      fnAddOption(model_pd, '', js_texts[3302]);
    } else {
      fnAddOption(model_pd, '', js_texts[3307]);
    }

    if(model_pd.name=='dat_pw_model' || model_pd.name=='dat_pt_model') {
      fnAddOptionGroup(model_pd, '----------------------------------------', 'lightgray');
      fnAddOption(model_pd, js_texts[3310], js_texts[3311]);
      fnAddOptionGroup(model_pd, '----------------------------------------', 'lightgray');
    }

    arrCars[curMake].sort();
    for(var x in arrCars[curMake]) fnAddOption(model_pd, arrCars[curMake][x]);

    model_pd.disabled = false;
  }
}

// ####################################################################################################################

function fnFocusObject(obj)
{
  var initVal = (obj.name.substr(obj.name.length-5)=='start') ? js_texts[2062] : js_texts[2061];
  if(obj.value==initVal) obj.value = '';
  obj.focus();
  obj.select();
}

// --------------------------------------------------------------------------------------------------------------------

function fnBlurObject(obj)
{
  var initVal = (obj.name.substr(obj.name.length-5)=='start') ? js_texts[2062] : js_texts[2061];
  if(obj.value=='') obj.value = initVal;
}

// ####################################################################################################################

var objHTTP = fnHTTPCreateRequestObject();
var arrHTTPBuffers = new Array();
var booHTTPInRequest = false;

function fnHTTPCreateRequestObject()
{
  if(window.XMLHttpRequest)
  {
    return new XMLHttpRequest();
  }
  else if(window.ActiveXObject)
  {
    var ie_versions = ['abc','MSXML2.XMLHttp.5.0','MSXML2.XMLHttp.4.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHttp','Microsoft.XMLHttp'];

    for(var i=0; i<ie_versions.length; i++)
    {
      try { return new ActiveXObject(ie_versions[i]); }
      catch (error) {}
    }
  }
  return false;
}

// --------------------------------------------------------------------------------------------------------------------

function fnHTTPGet(txtUrl, intSecondsRun, intTicketID)
{
  if(intSecondsRun==null) intSecondsRun = 0;
  if(intTicketID==null) {
    intTicketID = arrHTTPBuffers.length;
    arrHTTPBuffers[intTicketID] = '';
  }

  if(!objHTTP)
    arrHTTPBuffers[intTicketID] = 'HTTP-CONN-ERROR';
  else if(arrHTTPBuffers[intTicketID]=='') {
    if(!booHTTPInRequest) {
      if(objHTTP.readyState==0 || objHTTP.readyState==4) {
        booHTTPInRequest = true;
        objHTTP.open("GET", txtUrl, true);
        objHTTP.onreadystatechange = function () {
                                       if(objHTTP.readyState==4) {
                                         arrHTTPBuffers[intTicketID] = (objHTTP.status==200 ? objHTTP.responseText : 'HTTP-CONN-ERROR');
                                         booHTTPInRequest = false;
                                       }
                                     }
        objHTTP.send(null);
      } else if(intSecondsRun>5 && objHTTP.readyState>0 && objHTTP.readyState<4) {
        objHTTP.abort();
      }
    }

    if(intSecondsRun>10) {
      objHTTP.abort();
      arrHTTPBuffers[intTicketID] = 'HTTP-CONN-ERROR';
      booHTTPInRequest = false;
      return;
    }

    var intRetryMillisecond = 500;
    intSecondsRun += intRetryMillisecond/1000;
    setTimeout("fnHTTPGet('"+txtUrl+"',"+intSecondsRun+","+intTicketID+")",intRetryMillisecond);
  }
  
  return intTicketID;
}

// --------------------------------------------------------------------------------------------------------------------

function fnGetXmlElementData(xmlDoc, xmlElement)
{
  if(xmlDoc.indexOf('<'+xmlElement+'>')==-1 || xmlDoc.indexOf('</'+xmlElement+'>')==-1) return '';

  dataStartPos = xmlDoc.indexOf('<'+xmlElement+'>') + xmlElement.length + 2;
  dataEndPos = xmlDoc.indexOf('</'+xmlElement+'>') - 1;

  return xmlDoc.substring(dataStartPos, dataEndPos+1);
}

// ####################################################################################################################

var arrZipBuffer = new Array();
var arrLastZipcodes = new Array();

function fnCheckZipcodeOnChange(objZipInput, txtLabelID, txtCountyType)
{
  var zip = objZipInput.value.substring(0,4);
  if(txtLabelID==null) txtLabelID = 'ziplabel';
  if(txtCountyType==null) txtCountyType = 'full';
  if(!arrLastZipcodes[objZipInput.name]) arrLastZipcodes[objZipInput.name] = new Array();

  if(zip!=arrLastZipcodes[objZipInput.name]['zip'])
  {
    arrLastZipcodes[objZipInput.name]['zip'] = zip;
    if(!arrLastZipcodes[objZipInput.name]['initLabel']) {
      arrLastZipcodes[objZipInput.name]['initLabel'] = $(txtLabelID).innerHTML;
      arrLastZipcodes[objZipInput.name]['initLabelColor'] = $(txtLabelID).style.color;
    }

    if(zip.length==4 && !isNaN(zip))
      fnCheckZipcode(zip, txtLabelID, txtCountyType);
    else {
      $(txtLabelID).innerHTML = arrLastZipcodes[objZipInput.name]['initLabel'];
      $(txtLabelID).style.color = arrLastZipcodes[objZipInput.name]['initLabelColor'];
    }
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnCheckZipcode(zip, tagLabel, countyType, intTicketID)
{
  if(intTicketID!=null) {
    if(arrHTTPBuffers[intTicketID]=='HTTP-CONN-ERROR') {
      $(tagLabel).innerHTML = js_texts[3312];
      $(tagLabel).style.color = 'blue';
      return;
    } else if(arrHTTPBuffers[intTicketID]!='') {
      arrZipBuffer[zip] = arrHTTPBuffers[intTicketID];
    }
  }

  if(arrZipBuffer[zip])
  {
    zipInfo = arrZipBuffer[zip];
    var label = null;

    if(zipInfo.indexOf('<Error>')>=0)
    {
      label = fnGetXmlElementData(zipInfo, 'Error');
    }
    else if(zipInfo.indexOf('<ZipInfo>')>=0)
    {
      zipCity = fnGetXmlElementData(zipInfo, 'City');
      zipCounty = fnGetXmlElementData(zipInfo, 'County');
      zipCountyCode = fnGetXmlElementData(zipInfo, 'CountyCode');

      if(countyType=='full') label = zipCity + ', ' + zipCounty;
      else if(countyType=='code') label = zipCity + ', ' + zipCountyCode;
      else label = zipCity;
    }
    else
    {
      label = js_texts[3304];
    }

    if($(tagLabel)) {
      $(tagLabel).innerHTML = label;
      $(tagLabel).style.color = 'black';
    }
  }
  else
  {
    if($(tagLabel)) {
      $(tagLabel).style.color = 'blue';
      $(tagLabel).innerHTML = ($(tagLabel).innerHTML==js_texts[3308] ? '' : js_texts[3308]);
    }

    if(intTicketID==null) {
      intTicketID = fnHTTPGet(js_website_url_root + 'zipcodes/' + js_session_key + '/' + zip + '.xml');
    }
    setTimeout("fnCheckZipcode('"+zip+"','"+tagLabel+"','"+countyType+"',"+intTicketID+")",300);
  }
}

// ####################################################################################################################

var txtLicenseAccChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var arrLicenseBuffer = new Array();
var txtLastLicense = '';

function fnCheckLicenseOnChange()
{
  var txtLicenseInput = document.forms.request_form.dat_pt_license.value.toUpperCase();

  if(txtLicenseInput!=txtLastLicense) {
    txtLastLicense = txtLicenseInput;

    var txtLicenseClean = '';
    for(var i=0; i<txtLicenseInput.length; i++)
      if(txtLicenseAccChars.indexOf(txtLicenseInput.charAt(i))>-1) txtLicenseClean += txtLicenseInput.charAt(i);

    if(txtLicenseClean.length==6)
      fnCheckLicense();
    else {
      fnResetLicenseFields();
      $('licLicenseTag').innerHTML = '';
    }
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnCheckLicense(intTicketID)
{
  fnResetLicenseFields();
  var f = document.forms.request_form;
  var license = '';

  var txtLicenseInput = f.dat_pt_license.value.toUpperCase();
  for(var i=0; i<txtLicenseInput.length; i++)
    if(txtLicenseAccChars.indexOf(txtLicenseInput.charAt(i))>-1) license += txtLicenseInput.charAt(i);

  if(intTicketID!=null) {
    if(arrHTTPBuffers[intTicketID]=='HTTP-CONN-ERROR') {
      $('licLicenseTag').innerHTML = js_texts[3313];
      $('licLicenseTag').style.color = 'blue';
      return;
    } else if(arrHTTPBuffers[intTicketID]!='') {
      arrLicenseBuffer['lic'+license] = arrHTTPBuffers[intTicketID];
    }
  }

  if(arrLicenseBuffer['lic'+license])
  {
    licInfo = arrLicenseBuffer['lic'+license];

    if(licInfo.indexOf('<Error>')>=0)
    {
      $('licLicenseTag').innerHTML = fnGetXmlElementData(licInfo, 'Error');
      $('licLicenseTag').style.color = 'blue';
    }
    else if(licInfo.indexOf('<VehicleInfo>')>=0)
    {
      var licLicense = fnGetXmlElementData(licInfo, 'License');
      var licMake = fnGetXmlElementData(licInfo, 'Make');
      var licMakeTag = fnGetXmlElementData(licInfo, 'MakeTag');
      var licModel = fnGetXmlElementData(licInfo, 'Model');
      var licType = fnGetXmlElementData(licInfo, 'Type');
      var licBodywork = fnGetXmlElementData(licInfo, 'Bodywork');
      var licFuel = fnGetXmlElementData(licInfo, 'Fuel');
      var licTransmission = fnGetXmlElementData(licInfo, 'Transmission');
      var licBuilt = fnGetXmlElementData(licInfo, 'Built');
      var licColor = fnGetXmlElementData(licInfo, 'Color');
      var licApkEnd = fnGetXmlElementData(licInfo, 'ApkEnd');
      var licApkEndTag = fnGetXmlElementData(licInfo, 'ApkEndTag');

      f.dat_pt_license.value = txtLastLicense = licLicense;
      fnInputToLabel(f.dat_pt_make, licMake, 'licMakeTag', licMakeTag);
      if(licMake!='') fnBuildModelsList(f.dat_pt_model, licMake);
      // setTimeout to delay for solving IE6 problem
      setTimeout("fnInputToLabel(f.dat_pt_model, '"+licModel+"', 'licModelTag', '"+licModel+"')",10);
      fnInputToLabel(f.dat_pt_type, licType, 'licTypeTag', null, false);
      fnInputToLabel(f.dat_pt_bodywork, licBodywork, 'licBodyworkTag');
      fnInputToLabel(f.dat_pt_fuel, licFuel, 'licFuelTag');
      fnInputToLabel(f.dat_pt_transmission, licTransmission, 'licTransmissionTag', null, false);
      fnInputToLabel(f.dat_pt_built, licBuilt, 'licBuiltTag');
      fnInputToLabel(f.dat_pt_color, licColor, 'licColorTag');
      fnInputToLabel(f.app_pt_apk_end_month, (licApkEnd=='0' ? '0' : licApkEnd.substring(4)*1));
      fnInputToLabel(f.app_pt_apk_end_year, licApkEnd.substring(0,4));
      if(licApkEnd!='' && licApkEndTag!='') $('licApkEndTag').innerHTML = licApkEndTag;

      $('licLicenseTag').innerHTML = '';
    }
    else
    {
      $('licLicenseTag').innerHTML = js_texts[3306];
      $('licLicenseTag').style.color = 'blue';
    }
  }
  else
  {
    $('licLicenseTag').style.color = 'blue';
    $('licLicenseTag').innerHTML = ($('licLicenseTag').innerHTML==js_texts[3308] ? '' : js_texts[3308]);

    if(intTicketID==null) {
      intTicketID = fnHTTPGet(js_website_url_root + "licenses/" + js_session_key + "/" + license + ".xml");
    }
    setTimeout("fnCheckLicense("+intTicketID+")",300);
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnInputToLabel(objInput, val, tagId, tag, hide)
{
  if(hide==null) hide = true;
  var canHide = (tag!='' && tag!=null);

  if(objInput.tagName.toUpperCase()=='SELECT' && val!='')
  {
    var arrOptions = new Array();
    for(var i=0;i<objInput.length;i++) {
      arrOptions[objInput[i].value] = objInput[i].innerHTML;
    }

    if(arrOptions[val]) {
      objInput.value = val;
      tag = arrOptions[val];
      canHide = true;
    }
  }
  else if(objInput.tagName.toUpperCase()=='INPUT') {
    canHide = (val!='');
    objInput.value = val;
    tag = val;
  }
  
  if(hide && canHide) {
    fnHideElements(objInput.tagName, objInput.name, 'hide');
    objTag = $(tagId);
    if(objTag) objTag.innerHTML = tag;
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnResetLicenseFields()
{
  var arrTagIDs = new Array('licMakeTag','licModelTag','licTypeTag','licBodyworkTag','licFuelTag','licTransmissionTag','licBuiltTag','licColorTag','licApkEndTag');
  var arrInpIDs = new Array('dat_pt_make','dat_pt_model','dat_pt_type','dat_pt_bodywork','dat_pt_fuel','dat_pt_transmission','dat_pt_built','dat_pt_color','app_pt_apk_end_month','app_pt_apk_end_year');

  for(var x in arrTagIDs) $(arrTagIDs[x]).innerHTML = '';
  for(var x in arrInpIDs) fnHideElements(document.forms.request_form[arrInpIDs[x]].tagName, arrInpIDs[x], 'show');
}

// ####################################################################################################################

function fnHideElements(elementTag, elementId, hideMode)
{
  var elements = document.getElementsByTagName(elementTag);

  for(i=0; i<elements.length; i++)
  {
    if(elements[i].id.substr(0,elementId.length)==elementId)
    {
      if(hideMode=='switch')
      {
        if(elements[i].className=='hidden') elements[i].className = 'visible';
        else if(elements[i].className=='visible') elements[i].className = 'hidden';
        else if(elements[i].style.visibility=='hidden') elements[i].style.visibility = 'visible';
        else if(elements[i].style.visibility=='visible') elements[i].style.visibility = 'hidden';
        else if(elements[i].style.display=='none') elements[i].style.display = '';
        else if(elements[i].style.display=='') elements[i].style.display = 'none';
        else if(elements[i].style.display=='' && elements[i].style.visibility=='' && elements[i].className=='')
          elements[i].className = 'visible';
      }
      else
      {
        elements[i].style.display = hideMode=='hide' ? 'none' : '';
        elements[i].style.visibility = hideMode=='hide' ? 'hidden' : 'visible';
      }
    }
  }
}

// ####################################################################################################################

function fnSelectThumb(i)
{
  if($('thumb_inp_delete'+i).value=="N")
  {
    $('thumb_inp_delete'+i).value="Y";
    $('thumb_img_delete'+i).className = 'visible';
    fnBlurElement($('thumb_img_photo'+i));
    $('thumb_table'+i).style.border = "1px red solid";
  }
  else
  {
    $('thumb_inp_delete'+i).value="N";
    $('thumb_img_delete'+i).className = 'hidden';
    fnUnBlurElement($('thumb_img_photo'+i));
    $('thumb_table'+i).style.border = "1px black solid";
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnBlurElement(elem)
{
  if(elem)
  {
    elem.style.filter = "alpha(opacity=30)";
    elem.style.MozOpacity = "0.3";
    elem.style.opacity = "0.3";
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnUnBlurElement(elem)
{
  if(elem)
  {
    elem.style.filter = "";
    elem.style.MozOpacity = "1";
    elem.style.opacity = "1";
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnChangeImage(imgId, src)
{
  if($(imgId).complete)
  {
    $(imgId).src = src;
  }
}

// ####################################################################################################################

function fnLogoff()
{
  if(confirm(js_texts[3303])==true)
  {
    var url = js_website_url_root + 'logon.html?app_action=LOGOFF';
    window.location.assign(url);
  }
}

// ####################################################################################################################

function fnSwitchTabForm(n)
{
  var tags = document.getElementsByTagName("td");

  for(i=0;i<tags.length;i++)
    if(tags[i].id.substr(0,7)=="tab_tag")
      tags[i].className = "tab";

  if($('tab_tag'+n))
    $('tab_tag'+n).className = "tab tab_active";
}

// ####################################################################################################################

function fnSelectedRadioValue(rb)
{
  for(i=0; i<rb.length; i++)
  {
    if(rb[i].checked==true) return rb[i].value;
  }
}

// ####################################################################################################################

function fnScrollTo(obj)
{
  if(obj)
  {
    objTop = fnAbsoluteTop(obj);
    scrollTo(0, objTop-10);
  }
}

// --------------------------------------------------------------------------------------------------------------------

function fnScrollToInElement(obj, elem)
{
  if(obj && elem)
  {
    elemTop = fnAbsoluteTop(elem);
    objTop = fnAbsoluteTop(obj);
    elem.scrollTop = objTop - elemTop - 10;
  }
}

// ####################################################################################################################

function fnAbsoluteTop(obj)
{
  objTop = obj.offsetTop

  while(obj.offsetParent!=null)
  {
    objParent = obj.offsetParent;
    objTop += objParent.offsetTop;
    obj = objParent;
  }

  return objTop;
}

// ####################################################################################################################

function fnShowDawnImages(numOpacity, numStep, numDelay, numSpeed, numLShift, numTShift)
{
  var arrImages = document.getElementsByTagName('IMG');
  var j = 0;
  var curOpacity = 0;

  for(var i=0; i<arrImages.length; i++)
  {
    if(arrImages[i].id.substr(0,4).toLowerCase()=='dawn')
    {
      curOpacity = Math.round(numOpacity - j++ * numDelay);
      curOpacity = (curOpacity<0 ? 0 : (curOpacity>100 ? 100 : curOpacity));

      arrImages[i].style.filter = 'alpha(opacity='+curOpacity+')';
      arrImages[i].style.MozOpacity = curOpacity/100;
      arrImages[i].style.opacity = curOpacity/100;

      if(numLShift!=0 || numTShift!=0)
      {
        arrImages[i].style.position = 'relative';
        arrImages[i].style.left = Math.abs(curOpacity-100)/100*numLShift + 'px';
        arrImages[i].style.top = Math.abs(curOpacity-100)/100*numTShift + 'px';
      }
    }
  }
  
  if(j>0 && curOpacity<100)
  {
    var a = numOpacity+numStep;
    var b = numStep;
    var c = numDelay;
    var d = numSpeed;
    var e = numLShift;
    var f = numTShift;
    window.setTimeout('fnShowDawnImages('+a+','+b+','+c+','+d+','+e+','+f+')', numSpeed);
  }
}

// ####################################################################################################################

function fnCheckFileInputs()
{
  var arrInputElements = document.getElementsByTagName('INPUT');

  for(var i=0; i<arrInputElements.length; i++)
  {
    if(arrInputElements[i].type.toLowerCase()=='file' && arrInputElements[i].value!='')
    {
      var urlPattern = /^(http|ftp).*$/i;

      if(urlPattern.test(arrInputElements[i].value))
      {
        alert(js_texts[3305]);
        return false;
      }
    }
  }
  
  return true;
}

// ####################################################################################################################

function fnAddOption(objSelect, txtValue, txtLabel)
{
  if(txtLabel==null) txtLabel = txtValue;
  var opt = document.createElement('option');
  opt.value = txtValue;
  opt.innerHTML = txtLabel;
  objSelect.appendChild(opt);
}

// --------------------------------------------------------------------------------------------------------------------

function fnAddOptionGroup(objSelect, txtLabel, txtClassName)
{
  var optgroup = document.createElement('optgroup');
  optgroup.label = txtLabel;
  optgroup.className = txtClassName;
  objSelect.appendChild(optgroup);
}

// ####################################################################################################################

function $()
{
  var elements = new Array();
  var element = null;

  for(var i=0; i<arguments.length; i++)
  {
    element = arguments[i];

    if(typeof element=='string') element = document.getElementById(element);
    if(arguments.length==1) return element;

    elements.push(element);
  }
  return elements;
}

// FOR DEVELOPMENT ONLY ###############################################################################################

function showProp(x)
{
  for(var i in x)
    txt += '<tr><td>' + i + '</td><td><xmp>' + x[i] + '</xmp></td></tr>';
  return showPopup('<table cellspacing="0" border=1><tr><th>Veld</th><th>Waarde</th></tr>' + txt + '</table>');
}

function showPopup(txt)
{
  var popup_style = 'scrollbars=yes,resizable=yes,width=800,height=600';
  popup = window.open('#', null, popup_style);
  popup.document.write(txt);
  popup.moveTo(50,50);

  return popup;
}

