var htmlfields = false;
var dblists = false;

var errortextlist = new list();
errortextlist.getError = function(Id) {
  if (arguments.length < 2) 
    return this[Id]
  else {
    var result = this[Id]
    var i = 1
    for (var i = 1; i <= arguments.length-1;i++) {
      result = result.replace(new RegExp('%' + i + '%',"gi"), arguments[i]);
    }
    return dkstring(result)
  }
}

errortextlist['required']  = '"%1%" skal udfyldes';
errortextlist['maxlength'] = '"%1%" må max indeholde %2% tegn';
errortextlist['dataerror'] = '"%1%" er ikke korrekt udfyldt';

function validemail( value ) {
  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return (filter.test(value));
}

//--------

function tformfields() {
  var res = new list();
  res.validate_required   = tformfields_validate_required;
  res.validate_maxlength  = tformfields_validate_maxlength;
  res.validate_syntax     = tformfields_validate_syntax;
  res.find                = tformfields_find;
  res.validate            = tformfields_validate;
  res.requiredonlyif      = new list();
  res.validationRequired  = tformfields_validationRequired;
  return res;
}

function tformfields_validationRequired(form) {
  // Hvis denne returnerer true skal alle requiered felter valideres
  for (var i = 0; i < this.requiredonlyif.length; i++) {
    var cur = form[this.requiredonlyif[i]];
    if (cur.type == 'checkbox' && cur.checked) return true;
  }
  return true;
}

function tformfields_validate(form) {
  var retval = true;
  
  for (var i = 0; i < this.length; i++) {
    var ff = this[i];
    var field = form[ff.fieldname];
    if(ff.inlineTitle && ff.displayname == field.value) {
      field.value = '';
      field.className = field.className.replace('_title', '');
    }
  }
  
  if (retval && this.validationRequired(form)) {
    if (!this.validate_required(form)) retval = false;
  }
  if (retval && !this.validate_syntax(form)) retval = false;
  if (retval && !this.validate_maxlength(form)) retval = false;
  
  if(!retval) {
    for (var i = 0; i < this.length; i++) {
      var ff = this[i];
      var field = form[ff.fieldname];
      if(ff.inlineTitle && field.value == '') {
        field.value = ff.displayname;
        field.className = field.className.replace('_title', '') + '_title';
      }
    }
  }
  
  return retval;
}

function tformfields_find(fieldname) {
  for (var i = 0; i < this.length; i++) {
    if(this[i].fieldname == fieldname) return this[i];
  }
  return null;
}

function tformfields_validate_required(form) {
  for (var i = 0; i < this.length; i++) {
    if (!this[i].validate_required(form)) {
      this[i].seterror(form);
      error( errortextlist.getError('required', this[i].displayname));
      this[i].setfocus(form);
      return false;
    }
  }
  return true;
}

function tformfields_validate_maxlength(form) {
  for (var i = 0; i < this.length; i++) {
    if (!this[i].validate_maxlength(form)) {
      this[i].setfocus(form);
      return error(errortextlist.getError('maxlength', this[i].displayname, this[i].maxlength));
    }
  }
  return true;
}

function tformfields_validate_syntax(form) {
  for (var i = 0; i < this.length; i++) {
    if (!this[i].validate_syntax(form)) {
      this[i].setfocus(form);
      return error(errortextlist.getError('dataerror', this[i].displayname));
    }
  }
  return true;
}

//--------

function tbasefield(fieldname, displayname, required, maxlength) {
  this.fieldname   = fieldname;
  this.focusfieldname = fieldname;
  this.displayname = displayname;
  this.maxlength   = maxlength;
  this.required    = required;
  this.setfocus    = tbasefield_setfocus;
  this.validate_required  = tbasefield_validate_required;
  this.validate_maxlength = tbasefield_validate_maxlength;
  this.validate_syntax    = tbasefield_validate_syntax;
  this.seterror = tbasefield_seterror;
}

function tbasefield_setfocus(form) {
  var cur = form[this.focusfieldname];
  showfieldtab(cur.name);
  if (cur.select) cur.select();
  if (cur.focus) cur.focus();
}

function tbasefield_seterror(form) {
  var cur = form[this.focusfieldname];
  showfieldtab(cur.name);
  if (isUndefined(cur.originalclassName)) cur.originalclassName = cur.className;
  cur.className = cur.originalclassName + '_error';
}


function tbasefield_validate_required(form) {
  if (this.required == 1)
    if (form[this.fieldname].value == '') return false;
  return true;  
}

function tbasefield_validate_maxlength(form) {
  if (this.maxlength == -1 || isundefined(this.maxlength)) return true;
  if (form[this.fieldname].value.length > asint(this.maxlength)) return false;
  return true;
}

function tbasefield_validate_syntax(form) {
  return true;
}

//--------

function tintfield(fieldname, displayname, required, maxlength, tillad0) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.validate_syntax    = tintfield_validate_syntax;
  res.tillad0            = tillad0;
  return res;
}

function tintfield_validate_syntax(form) {
  var cur = form[this.fieldname];
  if (cur.value == '') return true;
  cur.value = cur.value.replace(/\./gi, '');
  if (!isinteger(cur.value)) return false;
  if (parseInt(cur.value) == 0 && this.tillad0 == 0) return false;
  return true;
}

//--------

function tdecimalfield(fieldname, displayname, required, maxlength, tillad0) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.validate_syntax    = tdecimalfield_validate_syntax;
  res.tillad0            = tillad0;
  return res;
}

function tdecimalfield_validate_syntax(form) {
  var cur = form[this.fieldname];
  if (cur.value == '') return true;
  if (!isdecimal(cur.value)) return false;
  if (parseInt(cur.value) == 0 && this.tillad0 == 0) return false;
  return true;
}


//--------

function tdatefield(fieldname, displayname, required, maxlength) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.validate_syntax    = tdatefield_validate_syntax;
  return res;
}

function tdatefield_validate_syntax(form) {
  var cur = form[this.fieldname];
  if (cur.value == '') return true;
  cur.value = expand_date(cur.value);
  return validdate(cur.value,true);
}


//--------

function ttextfield(fieldname, displayname, required, maxlength, inlineTitle) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.inlineTitle = inlineTitle;
  return res;
}

//--------

function temailfield(fieldname, displayname, required, maxlength) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.validate_syntax    = temailfield_validate_syntax;
  return res;
}

function temailfield_validate_syntax(form) {
  var cur = form[this.fieldname];
  if (cur.value == '') return true;
  return (validemail(cur.value));
}

//--------

function tdbdropdownfield(fieldname, displayname, required, maxlength) {
  var res = new tbasefield(fieldname, displayname, required, maxlength);
  res.validate_required  = tdbdropdownfield_validate_required;
  res.validate_syntax    = tdbdropdownfield_validate_syntax;
  return res;
}

function tdbdropdownfield_validate_required(form) {
  var cur = form[this.fieldname];
  if (this.required == 1)
    if (cur.selectedIndex == 0) return false;
  return true;  
}

function tdbdropdownfield_validate_syntax(form) {
  return true;
}

//--------

function tdropdownfield(fieldname, displayname, required, maxlength) {
  return new tdbdropdownfield(fieldname, displayname, required, maxlength);
}

//--------

function tpasswordfield(fieldname, displayname, required, maxlength) {
  return new ttextfield(fieldname, displayname, required, maxlength);
}

//--------

var formfields = new tformfields();

//--------

var ignore = new list()
ignore.find = ignore_find;

var besk = new list();

var maxlength = new list();
var decfields = new list();
var validering = 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 emailfields = new list();
var tabfields = new list();
var requireif = new list();


var dropdowns = new list();
var currenttab = '';


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 error( msg, field ) {
  alert (dkstring( msg ));                                 
  if (field) { 
    field.focus();
    field.select();
  }
  return false;
}

//--------

function list() {
  var res = new Array();
  res.add = list_add;
  res.find = list_find;
  res.clear = list_clear;
  return res;
}

function list_clear() {
  this.length = 0;
}

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 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 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;
}

var onValidateStdForm = '';
var onBeforeValidateStdForm = '';
var stdform_hideonsubmit = 'form_save,form_cancel,form_print';
var stdform_showonsubmit = 'form_wait';
var stdform_execOnSubmit = '';

function stdform_waitform() {
  var list
  list = stdform_hideonsubmit.split(',');
  for (var i in list) {
    if (list[i] != '') {
      var ele = getElement(list[i]);
      if (ele != null) ele.style.display = 'none';
    }
  }

  list = stdform_showonsubmit.split(',');
  for (var i in list) {
    if (list[i] != '') {
      var ele = getElement(list[i]);
      if (ele != null) ele.style.display = 'block';
    }
  }
  
  list = stdform_execOnSubmit.split(',');
  for (var i in list) {
    if (list[i] != '') {
      eval(list[i]);
    }
  }
  
}

function validatestdform(form) {
  if (onBeforeValidateStdForm != '') 
    if (!eval(onBeforeValidateStdForm)) return false;
  if (!formfields.validate(form)) return false;
  if (onValidateStdForm != '') {
    var l = onValidateStdForm.split(';');
    for (var i = 0; i < l.length; i++) {
      if (l[i] != '' && !eval(l[i])) return false;
    }
  }
    
  if (htmlfields) htmlfields.edit_off();
  if (htmlfields) htmlfields.updateform(form);
  if (dblists) transferdblists2form(form);
  stdform_waitform();
  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=250,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 urldecode(value)
{
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = value;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
     if (ch == "+") {
         plaintext += " ";
       i++;
     } else if (ch == "%") {
      if (i < (encoded.length-2) 
          && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
          && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
        plaintext += unescape( encoded.substr(i,3) );
        i += 3;
      } else {
        alert( 'Bad escape combination near ...' + encoded.substr(i) );
        plaintext += "%[ERROR]";
        i++;
      }
    } else {
       plaintext += ch;
       i++;
    }
  } // while
   return plaintext;
}

//--------


function field_focus(field, classname) {
  var ff = formfields.find(field.name);
  if(ff && ff.inlineTitle && ff.displayname == field.value) {
    field.value = '';
    field.className = field.className.replace('_title', '');
  }
  if (isUndefined(field.originalclassName)) field.originalclassName = field.className;
  if (field.tagName && field.tagName.toLowerCase() != 'select')
    field.className = classname + '_focus';
  if (field.select) field.select();
}

//--------

function field_blur(field, classname) {
  var ff = formfields.find(field.name);
  if(ff && ff.inlineTitle && field.value == '') {
    field.value = ff.displayname;
    field.className = field.className.replace('_title', '') + '_title';
  }
  if (field.__dataerror)
    field.className = classname + '_error';
  else
    field.className = classname;
}

//--------

function focusfirstfield(formname) {
  var form = document.forms[formname];
  for (var i = 0; i < form.length; i++) {
    if (form[i].type != 'hidden' && (form[i].enabled != false)) {
      if (form[i].focus) {
        document.focus();
        form[i].focus();
        if (form[i].select) form[i].select();
        break;
      }
    }
  }
}
