var ignore = new list()
ignore.find = ignore_find;
var besk = new list();
var intfields = new list();
var maxlength = new list();
var decfields = new list();
var datefields = new list();
var validering = new list();
var hierarkilink_multibox = new list();
var checkbox_list = new list();
var hourfields    = new list();
var datetimefields    = new list();
var datetimefields_ignoretime = new list();
var datetimefieldsfratil = new list();
var datefieldsfratil = new list();
var htmlfields = new list();
var fckfields = new list();
var emailfields = new list();
var tabfields = new list();
var currenttab = '';

htmlfields.updateform = donothing;
fckfields.updateform = donothing;

function donothing() {}

function showfieldtab(fieldname) {
  for (var i = 0; i < tabfields.length; i++) {
    if (extractword( tabfields[i], 0) == fieldname ) {
      showtab(extractword( tabfields[i], 1));
      currenttab = extractword( tabfields[i], 1);
    }
  }
}

function henttitel( navn ) {
  for (var i = 0; i < besk.length; i++) {
    if (extractword( besk[i], 0) == navn )
      return extractword( besk[i], 1)
  }

 return navn.substring(0,1).toUpperCase() + navn.substring(1);
}


function validatefields(form) {
  for (var i = 0; i < form.length; i++) {
    cur = form[i];
    found = false;
    if (cur.type == "text" || cur.type == "textarea" || cur.type == "password" || cur.type == "file") {
      if (cur.value == '' && cur.id != 'Sp-Trap') {
     
        found = ignore.find(cur.name);
        
        if (!found) {
          showfieldtab(cur.name);
          eval( "form." + cur.name ).focus();
          if (inurl("tysk"))    return error( henttitel(cur.name) + ' muss ausgefüllt werden', cur );
          if (inurl("engelsk")) return error( henttitel(cur.name) + ' must be filled in', cur );
          return error( '"' + henttitel(cur.name) + '" skal udfyldes', cur );
        }  
      } else {


        for (var j = 0; j < maxlength.length; j++) {
          if (cur.name == extractword( maxlength[j], 0)) {
            if (cur.value.length > asint(extractword( maxlength[j], 1))) {
              showfieldtab(cur.name);
              cur.select();
              cur.focus();
              return error('Feltet må max indeholde '+ asint(extractword( maxlength[j], 1)) + ' tegn', cur);
            }
            break;
          }  
        }
      
      }
    }
  }
  
  if (!validate_maxlength(form)) return false;
  if (!validate_htmlfields(form)) return false;  
  if (!validate_fckfields(form)) return false;  
  if (!validate_date_fields(form)) return false;
  if (!validatehierarkilink_multibox(form)) return false;
  if (!check_validering(form)) return false;
  if (!validate_emailfields(form)) return false;
  marker_hierarkilink_multibox();
  return true;
}

function validate_maxlength(form) {
  for (var i = 0; i < maxlength.length; i++) {
    var cur = eval('form.'+extractword( maxlength[i], 0));
    if (cur.value.length > asint(extractword( maxlength[i], 1))) {
      showfieldtab(cur.name);
      if (cur.type == "hidden") {
        if (htmlfields.find(extractword( maxlength[i], 0))) {
        cur = eval(extractword( maxlength[i], 0) + '_html');
        htmlfields.edit_on();
        cur.focus();
        } else {
//          alert('sæt fokus til fck editor');
          var oFrame = getElement(cur.name + '___Frame');
          cur =  oFrame.contentWindow.document.body;
        }
      } else {
        cur.select();
        cur.focus();
      }
      return error('Feltet må max indeholde '+ asint(extractword( maxlength[i], 1)) + ' tegn', cur);
    }
  }
  return true;
}

function validate_htmlfields(form) {
  for (var i = 0; i < htmlfields.length; i++) {
    var formname = extractword( htmlfields[i], 1);
    var htmlname = extractword( htmlfields[i], 0);
    var cur = eval('edit_' + formname);
    if (cur.displaymode == 'code') {
      showfieldtab(formname);
      alert(editortext['editor.codemodeactive']);
      return false;
    }
    if (!ignore.find(formname)) {
      var cur = eval('form.'+ formname);
      if (cur.value.length == 0) {
        showfieldtab(formname);
        cur = eval(htmlname);
        htmlfields.edit_on();
        cur.focus();
        return error( '"' + henttitel(formname) + '" skal udfyldes' , cur);
      }
    }
  }
  return true;
}
function validate_fckfields(form) {

  for (var i = 0; i < fckfields.length; i++) {
    var formname = extractword( fckfields[i], 1);
    var htmlname = extractword( fckfields[i], 0);
    var cur = getElement(formname);
    if (!ignore.find(formname)) {
      var cur = eval('form.'+ formname);
      if (cur.value.length == 0) {
        showfieldtab(formname);
//          alert('sæt fokus til fck editor');
          var oFrame = getElement(cur.name + '___Frame');
          cur =  oFrame.contentWindow.document.body;
        return error( '"' + henttitel(formname) + '" skal udfyldes' , cur);
      }
    }
  }
  return true;
}

function hierarkilink_exists(fld) {
  // returnerer sand, hvis der er elementer i boxen ('' tæller ikke med)
  for (var i = 0; i < fld.length; i++) {
    if (fld.options[i].value != '') return true;
  }
  return false;
}

function validatehierarkilink_multibox(form) {
  for (var i = 0; i < hierarkilink_multibox.length; i++) {
    var fld = document.forms[0].elements[hierarkilink_multibox[i]];
    if (!ignore.find(fld.name)) {
      if (!hierarkilink_exists(fld)) {
        showfieldtab(fld.name);
        if (fld.focus) fld.focus();
        return error( 'Feltet "' + henttitel(fld.name) + '" skal udfyldes!');
      }
    }
  }
  return true;
}

function marker_hierarkilink_multibox() {
  for (var i = 0; i < hierarkilink_multibox.length; i++) {
    var fld = document.forms[0].elements[hierarkilink_multibox[i]];
    for (var j = 0; j < fld.length; j++) {
      fld.options[j].selected = true;
    }
  }
}

function check_validering(form) {
  for (var i = 0; i < validering.length; i++) {
    if (eval('form.' + validering[i][0])) {
      cur = eval('form.' + validering[i][0]);
      var check = paramtext(validering[i][1],new Array('cur.value'));
      if (!eval(check)) {
        showfieldtab(cur.name);
        cur.focus();
        cur.select();
        return error( '"' + henttitel(validering[i][0]) + '"\r\rFeltet er ikke korrekt udfyldt', cur);
      }
    }
  }  
  return true;
}

function validemail( value ) {
  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return (filter.test(value));
}

function validate_emailfields(form) {
  for (var i = 0; i < emailfields.length; i++) {
    var cur = eval('form.'+ emailfields[i]);
    if (cur.value != '') {
      if (!validemail(cur.value)) {
        showfieldtab(cur.name);
        cur.focus();
        return error( '"' + henttitel(emailfields[i]) + '" indeholder ikke en korrekt email adresse!', cur );
      }
    }
  }
  return true;
}


function error( msg, field ) {
  alert (dkstring( msg ));                                 
  if (field) { 
    window.focus();
    if (field.focus) field.focus();
    if (field.select) field.select();
  }
  return false;
}

function list() {
  var res = new Array();
  res.add = list_add;
  res.find = list_find;
  return res;
}

function list_find(item) {
  var internal = '|' + this.join('|') + '|';
  return (internal.indexOf('|'+item+'|') != -1)
}

function list_add( item ) {
  this[this.length] = item;
}

function highlight(field) {
  showfieldtab(field.name);
  if (field.focus) field.focus();
  if (field.select) field.select();
}

function formaterror( msg,param1,param2,param3) {
  if (msg.indexOf('%1%') == -1) 
    msg += param
  else
    msg = msg.replace('%1%',param1);
    
  if (param2) {
    if (msg.indexOf('%2%') != -1) 
      msg = msg.replace('%2%',param2);
  }  

  if (param3) {
    if (msg.indexOf('%3%') != -1) 
      msg = msg.replace('%3%',param3);
  }  

  return error(msg);
}

function extractword(value, no, delim) {
  if (!delim) var delim = ","
  first = -1;
  if (no > 0) {
    for (var i = 0; i < no; i++) 
      first = value.indexOf(delim, first+1);
    if (first == -1) return '';
  }
  tmp = value.substring(first+1);  
  first = tmp.indexOf(delim);
  if (first != -1) 
    tmp = tmp.substring(0,first);
  return tmp;
}

function validate_datefields_fratil(form) {
  for (var i = 0; i < datefieldsfratil.length; i++) {
    var fra = eval('form.' + datefieldsfratil[i] + '_fra');
    fra.value = expand_date(fra.value);
    var til = eval('form.' + datefieldsfratil[i] + '_til');
    til.value = expand_date(til.value);
    if (fra.value != '') if (!validdate(fra.value,true)) {
      showfieldtab(fra.name);
      return error( 'Feltet "' + henttitel(datefieldsfratil[i]) + '" er ikke korrekt udfyldt!!' )
    }
    if (til.value != '') if (!validdate(til.value,true)) {
      showfieldtab(til.name);
      return error( 'Feltet "' + henttitel(datefieldsfratil[i]) + '" er ikke korrekt udfyldt!!' )
    }
    var cur = eval('form.' + datefieldsfratil[i]);
    if (fra.value == '' && til.value == '') {
      if (!ignore.find(datefieldsfratil[i])) { 
        showfieldtab(fra.name);
        return error( '"' + henttitel(datefieldsfratil[i]) + '" skal udfyldes' );
      }  
      cur.value = '' 
    } else {
      cur.value = datetosqldata(fra.value) + '|' + datetosqldata(til.value);
    }
  }
  return true;
}


function validate_int_fields(form,tillad0) {
  for (var i = 0; i < intfields.length; i++) {
    if (eval('form.' + intfields[i])) {
      // Felt findes i formularen
      
      var found = ignore.find(intfields[i]);
      
      if (eval('form.' + intfields[i]).value == '') continue;
      if (!isinteger(eval('form.' + intfields[i]).value)) {
        showfieldtab(intfields[i]);
        alert('Felt ikke korrekt udfyldt !');
        eval('form.' + intfields[i]).focus();
        eval('form.' + intfields[i]).select();
        return false
      }  
      if ((parseInt(eval('form.' + intfields[i]).value) == 0) && !tillad0) {
        showfieldtab(intfields[i]);
        eval('form.' + intfields[i]).focus();
        eval('form.' + intfields[i]).select();
        return error('Antal skal v&aelig;re st&oslash;rre end 0 !');
      }  
    }
  }
  return true;
}

function validate_dec_fields(form) {
  for (var i = 0; i < decfields.length; i++) {
    if (eval('form.' + decfields[i])) {
      // Felt findes i formularen
      
      if (eval('form.' + decfields[i]).value == '') continue;
      if (!isdecimal(eval('form.' + decfields[i]).value)) {
        showfieldtab(decfields[i]);
        alert('Felt ikke korrekt udfyldt !');
        eval('form.' + decfields[i]).focus();
        eval('form.' + decfields[i]).select();
        return false
      }  
    }
  }
  return true;
}

function isinteger(str) {
  if (str == '') return false;
  var valid = "-0123456789"
  var ok = true;
  var temp;
  for (var i=0; i<str.length; i++) {
    temp = "" + str.substring(i, i+1);
    if (valid.indexOf(temp) == "-1") ok = false;
  }
  return ok;
}

function validate_checkbox_list(form) {
  for (var i = 0; i < checkbox_list.length; i++) {
    var curname = extractword(checkbox_list[i],0);
    // Hvis den ikke kraeves, ignorer den
    if (ignore.find(curname)) continue;

    var clicks = 0;
    
    for (var j = 0; j < form.length; j++) {
      cur = form[j];
      // Tael antal kliks, gennemgaa hele formen
      if (cur.type == "checkbox") {
        if (cur.name == curname) {
          if (cur.checked) clicks+= 1
        }
      }
    }
    var minantal = asint(extractword(checkbox_list[i],1));
    var maxantal = asint(extractword(checkbox_list[i],2));

    if (minantal != 0) {
      if (clicks < asint(extractword(checkbox_list[i],1))) {
        showfieldtab(curname);
        return error( 'Fejl ved feltet "' + henttitel(curname) + '"\r\r' + 
                      'Du skal v&aelig;lge ' + minantal + '.');
      }
    }
      
    if (clicks > maxantal) {
      showfieldtab(curname);
      return error( 'Fejl ved feltet "' + henttitel(curname) + '"\r\r' + 
                    'Du m&aring; h&oslash;jst v&aelig;lge ' + maxantal);
    }
  }
  
  return true;
}

function get_datetime_field_value( form , curname ) {
  var dato = eval('form.' + curname + '_date');
  var tid = eval('form.' + curname + '_time');
  return datetosqldata(dato.value) + '|' + tid.options[tid.selectedIndex].value;
}

function val_datetime_field( form, curname ) {
  var dato = eval('form.' + curname + '_date');
  var tid = eval('form.' + curname + '_time');
  var cur = eval('form.' + curname);
  
  dato.value = expand_date(dato.value);
  
  if (ignore.find(curname)) {
    if (dato.value == '' && tid.selectedIndex == 0) {
      cur.value = '';
      return true;
    }
  }
  if (!validdate(dato.value,true)) {
    showfieldtab(dato.name);
    return error( 'Feltet "' + henttitel(dato.name) + '" er ikke korrekt udfyldt!!' )
  }
  
  if (dato.value != '' && tid.selectedIndex == 0) {
      cur.value = get_datetime_field_value( form, curname );
      return true;
  }
  
  if (dato.value != '' && tid.selectedIndex != 0) {
    if (!validdate(dato.value,true)) {
      showfieldtab(dato.name);
      return error( 'Feltet "' + henttitel(dato.name) + '" er ikke korrekt udfyldt!!' )
    }
    cur.value = get_datetime_field_value( form, curname );
  } else {
    if (ignore.find(curname)) {
      cur.value = ''
    } else {
      showfieldtab(dato.name);
      return error( 'Feltet "' + henttitel(dato.name) + '" skal udfyldes!' )
    }
  }
  return true;
}

function validate_datetimefieldsfratil(form) {
  for (var i = 0; i < datetimefieldsfratil.length; i++) {
    var curname = datetimefieldsfratil[i] + '_fra';
    if (!val_datetime_field(form,curname)) return false;
    var curname = datetimefieldsfratil[i] + '_til';
    if (!val_datetime_field(form,curname)) return false;
    var cur = eval('form.' + curname);
    cur.value = get_datetime_field_value( form , datetimefieldsfratil[i] + '_fra' ) + '|' +
                get_datetime_field_value( form , datetimefieldsfratil[i] + '_til' )
  }
  return true;
}

function validate_datetimefields(form) {
  for (var i = 0; i < datetimefields.length; i++) {
    var curname = datetimefields[i];
    if (!val_datetime_field(form,curname,'')) return false;
  }
  return true;
}

function validate_hourfields(form) {
  for (var i = 0; i < hourfields.length; i++) {
    var fra = eval('form.' + hourfields[i] + '_time1');
    var til = eval('form.' + hourfields[i] + '_time2');
    cur = eval('form.' + hourfields[i]);
    cur.value = fra.value + ' - ' + til.value;
    
    if (!ignore.find(hourfields[i])) {
      if (fra.selectedIndex == 0 || til.selectedIndex == 0) {
        showfieldtab(hourfields[i]);
        return error( 'Feltet "' + henttitel(hourfields[i]) + '" skal udfyldes!' )
      }
    }
  }
  return true;
}

function validate_date_fields(form) {
  for (var i = 0; i < datefields.length; i++) {
    var curname = datefields[i];
    var dato = eval('form.' + curname);
    
    if (dato.value != '') {
      dato.value = expand_date(dato.value);
      if (!validdate(dato.value,true)) {
        showfieldtab(curname);
        return error( 'Feltet "' + henttitel(curname) + '" er ikke korrekt udfyldt!!' )
      }
    }
  }
  return true;
}

var onValidateStdForm = null;

function validatestdform(form) {
  if (htmlfields.edit_off) htmlfields.edit_off();
  if (htmlfields) htmlfields.updateform(form);
  if (fckfields)  fckfields.updateform(form);
  
  var ok = true;
  
  if (ok) if (!validatefields(form)) ok = false;
  if (ok) if (!validate_int_fields(form,true)) ok = false;
  if (ok) if (!validate_date_fields(form)) ok = false;
  if (ok) if (!validate_hourfields(form)) ok = false;
  if (ok) if (!validate_datetimefields(form)) ok = false;
  if (ok) if (!validate_datetimefieldsfratil(form)) ok = false;
  if (ok) if (!validate_checkbox_list(form)) ok = false;
  if (ok) if (!validate_datefields_fratil(form)) ok = false;
  if (ok) if (!validate_dec_fields(form)) ok = false;

  if (ok) {
    if (onValidateStdForm != null) {
      if (!eval(onValidateStdForm)) {
        if (htmlfields.edit_on) htmlfields.edit_on()
        return false;
      }
    }
  }

  if (!ok) {
    if (htmlfields.edit_on) htmlfields.edit_on()
    return false;
  } else {
  
    var ele = getElement('form_save');
    if (ele != null) ele.style.display = 'none';
  
    var ele = getElement('form_cancel');
    if (ele != null) ele.style.display = 'none';
    return true;
  }
  return true;
}

function extractquerystring(except) {
  var s = ""
  except = "," + except.toLowerCase() + ","
  if (location.search == '') 
    return ''
  else {
    var fields = location.search.substring(1).split('&');
    for (var i in fields) {
      var field = ',' + fields[i].split('=')[0].toLowerCase() + ','; 
      if (except.indexOf( field ) == -1) {
        s = s + "&" + fields[i]
      }
    }
    return s;
  }
}

function showcalendar(field) {

  var form = document.forms[0];
  var f = eval('form.'+field);
  
  if ((field == 'tildato') && (f.value == '')) f = eval('form.fradato');
  
  f.value = expand_date( f.value);
  if (validdate(f.value,true)) {
    var d = extractword( f.value,0,'-');
    var m = extractword( f.value,1,'-');
    var y = extractword( f.value,2,'-');
    if (asint(y)<100) y = 2000 + asint(y);
  } else {
    var d = '';
    var m = '';
    var y = '';
  }
  var maxyear = new Date().getFullYear()+2;
 
  kalenderurl = getbasehttp + "calendar.asp?minday=1&minmonth=1&minyear=1997&maxyear=" + maxyear + "&field=" + field + '&reqmonth=' + m + '&reqyear=' + y;
  win_kalender = window.open(kalenderurl,"sima_kalender","left=100,top=100,width=280,height=200,resizable=0,status=0,menubar=0,scrollbars=0,fullscreen=0");
  win_kalender.focus() 
}

function showcalendar_limit(field,minyear,minmonth,minday) {

  var form = document.forms[0];
  var f = eval('form.'+field);
  
  if ((field == 'tildato') && (f.value == '')) f = eval('form.fradato');
  
  f.value = expand_date( f.value);
  if (validdate(f.value,true)) {
    var d = extractword( f.value,0,'-');
    var m = extractword( f.value,1,'-');
    var y = extractword( f.value,2,'-');
    if (asint(y)<100) y = 2000 + asint(y);
  } else {
    var d = '';
    var m = '';
    var y = '';
  }
  var maxyear = new Date().getFullYear()+2;
 
  kalenderurl = getbasehttp + "calendar.asp?minday=" + minday + "&minmonth=" + minmonth + "&minyear=" + minyear +"&maxyear=" + maxyear + "&field=" + field + '&reqmonth=' + m + '&reqyear=' + y;
  win_kalender = window.open(kalenderurl,"sima_kalender","left=100,top=100,width=280,height=200,resizable=0,status=0,menubar=0,scrollbars=0,fullscreen=0");
  win_kalender.focus() 
}

function countcheckboxclicks(form) {
  var clicks = 0;
  for (var i = 0; i < form.length; i++) {
    var cur = form[i];
    // Tael antal kliks, gennemgaa hele formen
    if (cur.type == "checkbox") {
      if (cur.checked) clicks+= 1
    }
  }
  return clicks;
}

function regexpcheck(regex, value) {
  var check = new RegExp(regex, "i")
  return check.test(value);
}

function validip(value) {
  var ipDomainPat=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
  var IPArray=value.toString().match(ipDomainPat)
  if (IPArray!=null) {
      // this is an IP address
     for (var i=1;i<=4;i++) {
       if (IPArray[i]>255) {
         return false
       }
      } 
      return true
  }
  return false;
}

function setoptionbyvalue(ele, value) {
  for (var i = 0; i < ele.options.length; i++) {
    if (ele.options[i].value == value) {
      ele.selectedIndex = i;
      break;
    }
  }
}

function ignore_find(item) {
  var internal = '|' + this.join('|') + '|';
  if (internal.indexOf('|'+item+'|') != -1) return true;
  for (var i = 0; i < this.length; i++) {
    var pos = this[i].indexOf('*');
    if (pos != -1) {
      var curitem = this[i].toLowerCase().substring(0, this[i].length-1)
      if (item.substring(0, curitem.length).toLowerCase() == curitem) return true;
    }
  }
  return false;
}

function isdecimal(value) {
  var price = /^[0-9]{1,8}$|^[0-9]{1,8}[\.\,]{1}[0-9]{1,2}$/ig;
	return (price.test(value));
}

function setselectedbytext( form, selname, settext ) {
  settext = settext.toLowerCase();
  sel = form[selname];
  if (!sel) {
    alert('error');
  }  
  for (var i=0;  i < sel.length; i++ ) {
    if (sel.options[i].text.toLowerCase() == settext) {
      sel.selectedIndex = i;
      break;
    }  
  }
}

function setselectedbyvalue( form, selname, settext ) {
  settext = settext.toLowerCase();
  sel = form[selname];
  if (!sel) {
    alert('error');
  }  
  for (var i=0;  i < sel.length; i++ ) {
    if (sel.options[i].value.toLowerCase() == settext) {
      sel.selectedIndex = i;
      break;
    }  
  }
}

function disableFCKtoolbars(fieldname) {

  if(eval('oFCKeditor_' + fieldname).sima_DisableToolbar) {
    for (var j = 0; j < window.frames.length; j++) {
      if (document.frames[j].location.search.indexOf('?InstanceName='+fieldname) != -1) {
        document.frames[j].document.getElementById('xToolbarRow').style.display = 'none';
        break;
      }
    }
  }
}

function setFCKheight(fieldname,Height) 
{
    for (var j = 0; j < window.frames.length; j++) 
    {
      if (window.frames[j].location.search.indexOf('?InstanceName='+fieldname) != -1) 
      {
      	var eEditorFrameStyle = window.frames[j].frameElement.style ;
      	//eEditorFrameStyle.width		= oViewPaneSize.Width + 'px' ;
      	eEditorFrameStyle.height	= Height + 'px' ;
        break;
      }
    }
}

function setFCKwidth(fieldname,Width) 
{
    for (var j = 0; j < window.frames.length; j++) 
    {
      if (window.frames[j].location.search.indexOf('?InstanceName='+fieldname) != -1) 
      {
      	var eEditorFrameStyle = document.frames[j].frameElement.style ;
      	//eEditorFrameStyle.width		= oViewPaneSize.Width + 'px' ;
      	eEditorFrameStyle.width	= Width + 'px' ;
        break;
      }
    }
}
