// DHTML menu script

function dropMenu()
{
  if (!document.getElementById) return true;
  var theMenu = this.parentNode.parentNode;

  for (var i = 0; i < theMenu.childNodes.length; i++) 
  {
    var elm = theMenu.childNodes[i];
    if ((elm.className != null) && 
        (elm.className.indexOf("dmblock") > -1)
       )
    {
      elm.style.visibility = (elm.style.visibility == "hidden") ? "visible" : "hidden";
    }
  }
  return false;
}

function dropMenuMouseOut() { this.style.visibility = "hidden"; }

function closeDropMenus()
{
  if (!document.getElementsByTagName) return true;

  var dmHeads1 = document.getElementsBySelector("div.dropmenu h2.boxhd a");
  var dmBlocks1 = document.getElementsBySelector("div.dropmenu div.content");
  var dmHeads2 = document.getElementsBySelector("div.dropmenu h3.label a");
  var dmBlocks2 = document.getElementsBySelector("div.dropmenu ul.block");
  var dropMenuHeads = mergeArrays(dmHeads1, dmHeads2);
  var dropMenuBlocks = mergeArrays(dmBlocks1, dmBlocks2);

  for (var i = 0; i < dropMenuHeads.length; i++) { dropMenuHeads[i].onclick = dropMenu; }
  for (var i = 0; i < dropMenuBlocks.length; i++) 
  { 
    dropMenuBlocks[i].parentNode.className = dropMenuBlocks[i].parentNode.className + "dm-active ";
    dropMenuBlocks[i].className = dropMenuBlocks[i].className + " dmblock";
    // dropMenuBlocks[i].onmouseout = dropMenuMouseOut;
    dropMenuBlocks[i].style.visibility = "hidden";
  }
  return true;
}



// Gereric Popup window script

var popupConfig = new Array;
popupConfig["hotelpic"] = new Array ( "", "width=400,height=450"); // Closeup hotel pics
popupConfig["popup"] = new Array ( "", "width=350,height=450"); // Generic popup window
popupConfig["glossary"] = new Array ( "", "width=550,height=350"); // Glossary information popup

function popup()
{
  if (this.target == "") { this.target = (popupConfig[this.keyName][0] != "") ? popupConfig[this.keyName][0] : this.keyName; }
  newWin = window.open(this.pophref, this.target, popupConfig[this.keyName][1]);
  newWin.focus();
  return false;
}

function initPopupLinks()
{
  if (!document.getElementsByTagName) return true;
  for (var theKey in popupConfig) 
  {
    var theLinks = document.getElementsBySelector("a."+theKey);
    for (var i = 0; i < theLinks.length; i++) 
    {
      theLinks[i].pophref = theLinks[i].href;
      theLinks[i].href = "#";
      theLinks[i].keyName = theKey;
      theLinks[i].onclick = popup;
    }
  }
  return true;
}



// Form validation functions

function searchValid(theForm)
{
  if (document.layers == null)
  {
    var error = "";
    error += (theForm.SearchFor.value == "") ? "Vinsamlega slįšu inn leitarorš.\n" : "";
    if (error != "") {
      alert(error);
      return false;
    }
    return true;
  }
}


function loginValid(theForm)
{
  if (document.layers == null)
  {
    var error = "";
    error += (theForm.Login.value == "")    ? "Vinsamlega slįšu inn notandanafn.\n" : "";
    error += (theForm.Password.value == "") ? "Vinsamlega slįšu inn lykilorš.\n" : "";
    if (error != "") {
      alert(error);
      return false;
    }
    return true;
  }
}


function subscrValid(theForm)
{
  if (document.layers == null)
  {
    var error = "";
    error += (theForm.VIS_Email.value == '')  ? "Vinsamlega slįšu inn netfang.\n" : "";
      error += (!checkEmail(theForm.VIS_Email.value)) ? "Netfangiš inniheldur ólögleg tįkn.\n" : "";
    if (error != "") {
      alert(error);
      return false;
    }
    return true;
  }
}


function contactValid(theForm)
{
  if (document.layers == null)
  {
    var error = "";
    error += (theForm.name.value == '') ? "Vinsamlega slįšu inn nafn.\n" : "";
    error += (theForm.email.value == '')  ? "Vinsamlega slįšu inn netfang.\n" : "";
      error += (!checkEmail(theForm.email.value)) ? "Netfangiš inniheldur ólögleg tįkn.\n" : "";
    error += (theForm.question.value == '') ? "Žś gleymdir fyrirspurninni.\n" : "";
    if (error != "") {
      alert(error);
      return false;
    }
    return true;
  }
}


function quizValid(theForm)
{
  if (document.layers == null)
  {
    var error = "";
    error += checkRadios(theForm, "QuizAnswer_2");
    if (error != "") {
      alert(error);
      return false;
    }
    return true;
  }
}




// Single Form-field validation functions (only used by the form-validate functions above)
function checkRadios(theForm, radioName) {
  var error = "";
  var checkvalue = false;
  for(i = 0; i < theForm.elements.length; i++) {
    if(theForm.elements[i].name == radioName) {
      if(theForm.elements[i].checked) {
        checkvalue = true; 
        break;
      }
    }
  }
  if(!(checkvalue)) {
    error = "Vinsamlegast hakašu viš valkost.\n";
  }
  return error;
} 

function checkEmail(email) {
  if (email != "") 
  {
    var emailFilter=/^.+@.+\..{2,3}$/;
    var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/;
    if ( (!(emailFilter.test(email))) || (email.match(illegalChars)) ) 
    {
      return false;
    }
  }
  return true;
}


function checkTel(number) {
  if (number != "") 
  {
    number = number.replace(/\s/g, "");
    number = number.replace(/[-+]/g, "");
    number = number.replace(/\d/g, "");
    if (number != "") { return false; }
  }
  return true;
}


function checkKt(Kt) {
  var isok = true;
  if (Kt != "") 
  {
    str_Kt = new String(Kt);
    str_Ktclean = new String;
    for(var i=0; i<str_Kt.length; i++) 
    {
      var t = parseInt(str_Kt.charAt(i),10);
      if (!isNaN(t)) {
        str_Ktclean += t;
      }
      else
      {
        isok = false;
      }
    }
    var margf= new Array(3,2,7,6,5,4,3,2,1);
    var summa = 0;
    for (var i=0; i!=9; i++) 
    {
      summa = summa + (margf[i] * str_Ktclean.charAt(i));
    }
    isok = ((summa % 11) || (str_Ktclean.length != 10)) ? false : isok;
  }
  return isok;
}


// Make sure that the pagebody block is at least equal height to 
// each of the side columns
var isChanged = false;
function fixPagebodyHeight()
{
  if (document.layers == null)
  {
    var bd = document.getElementById('pagebody');
    var e1 = document.getElementById('pageextra1');
    var e2 = document.getElementById('pageextra2');
    var e3 = document.getElementById('pageextra3');
    var e4 = document.getElementById('pageextra4');
    var hBody = bd.offsetHeight;
    var hExtra1 = (e1 != null) ? e1.offsetHeight : 0;
    var hExtra2 = (e2 != null) ? e2.offsetHeight : 0;
    var hExtra3 = (e3 != null) ? e3.offsetHeight : 0;
    var hExtra4 = (e4 != null) ? e4.offsetHeight : 0;
    if (hExtra1 > hBody) { hBody = hExtra1; isChanged = true; }
    if (hExtra2 > hBody) { hBody = hExtra2; isChanged = true; }
    if (hExtra3 > hBody) { hBody = hExtra3; isChanged = true; }
    if (hExtra4 > hBody) { hBody = hExtra4; isChanged = true; }
    if (isChanged == true)
    {
      bd.style.height = hBody + "px";
      // if (e1 != null) { e1.style.top = e1.offsetTop + "px"; }
      // if (e2 != null) { e2.style.top = e2.offsetTop + "px"; }
      // if (e3 != null) { e3.style.top = e3.offsetTop + "px"; }
      // if (e4 != null) { e4.style.top = e4.offsetTop + "px"; }
    }
  }
}


function initPage() 
{
  disableCSSinStupidBrowsers();
  initPopupLinks();
  fixPagebodyHeight();
  closeDropMenus();
}


/*
 Browser sniffing code borrowed from: http://www.webreference.com/tools/browser/javascript.html
 The following bit of javascript code is Free Software[tm]. Licence: GNU/GPL v2.0 or later.
*/
var agt=navigator.userAgent.toLowerCase();
var appVer = navigator.appVersion.toLowerCase();

// *** BROWSER VERSION ***
var is_minor = parseFloat(appVer);
var is_major = parseInt(is_minor);

var iePos  = appVer.indexOf('msie');
if (iePos !=-1) {
  is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
  is_major = parseInt(is_minor);
}

var is_opera = agt.indexOf('opera') != -1;

var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
var is_konq = agt.indexOf('konqueror') != -1;
var is_khtml  = (is_safari || is_konq);

var is_ie   = ((iePos!=-1) && (!is_opera) && (!is_khtml));
var is_ie5dn = (is_ie && is_minor < 5.0);

// *** PLATFORM ***
var is_mac = (agt.indexOf("mac")!=-1);


/* Disable all CSS in stupid browsers */
function disableCSSinStupidBrowsers()
{
  if (is_ie5dn) 
  {
    var x = null;
    if (document.getElementsByTagName) 
    {
      x = document.getElementsByTagName('link');
    }
    else if (document.all) 
    {
      x = document.all.tags('link');
    }
    if (x != null)
    {
      x[0].disabled = true;
      x[1].disabled = true;
    }
  }
}


//  getElementsBySelector and getAllChildren is written by Simon Willison.
//  For original source see: http://simon.incutio.com/archive/2003/03/25/getElementsBySelector

function getAllChildren(e) {
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector = function(selector) {
  if (!document.getElementsByTagName) {
    return new Array();
  }
  var tokens = selector.split(' ');
  var currentContext = new Array(document);
  for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
      var bits = token.split('#');
      var tagName = bits[0];
      var id = bits[1];
      var element = document.getElementById(id);
      if (tagName && element.nodeName.toLowerCase() != tagName) {
        return new Array();
      }
      currentContext = new Array(element);
      continue;
    }
    if (token.indexOf('.') > -1) {
      var bits = token.split('.');
      var tagName = bits[0];
      var className = bits[1];
      if (!tagName) {
        tagName = '*';
      }
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue;
    }
    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
      var tagName = RegExp.$1;
      var attrName = RegExp.$2;
      var attrOperator = RegExp.$3;
      var attrValue = RegExp.$4;
      if (!tagName) {
        tagName = '*';
      }
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      var checkFunction;
      switch (attrOperator) {
        case '=': checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); }; break;
        case '~': checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); }; break;
        case '|': checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); }; break;
        case '^': checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); }; break;
        case '$': checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); }; break;
        case '*': checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); }; break;
        default : checkFunction = function(e) { return e.getAttribute(attrName); };
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue;
    }
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
      var elements = currentContext[h].getElementsByTagName(tagName);
      for (var j = 0; j < elements.length; j++) {
        found[foundCount++] = elements[j];
      }
    }
    currentContext = found;
  }
  return currentContext;
}

// End of code by Simon Willison


function mergeArrays(array1, array2)
{
  for (var i = 0; i < array2.length; i++) { array1[array1.length] = array2[i]; }
  return array1;
}


window.onload = initPage;