﻿

/**
* jQuery.query - Query String Modification and Creation for jQuery
* Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
* Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
* Date: 2008/05/28
*
* @author Blair Mitchelmore
* @version 2.0.0
*
**/
new function(settings) {
  // Various Settings
  var $separator = settings.separator || '&';
  var $spaces = settings.spaces === false ? false : true;
  var $suffix = settings.suffix === false ? '' : '[]';
  var $prefix = settings.prefix === false ? false : true;
  var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";

  jQuery.query = new function() {
    var is = function(o, t) {
      return o != undefined && o !== null && (!!t ? o.constructor == t : true);
    };
    var parse = function(path) {
      var m, rx = /\[([^[]*)\]/g, match = /^(\S+?)(\[\S*\])?$/.exec(path), base = match[1], tokens = [];
      while (m = rx.exec(match[2])) tokens.push(m[1]);
      return [base, tokens];
    };
    var set = function(target, tokens, value) {
      var o, token = tokens.shift();
      if (typeof target != 'object') target = null;
      if (token === "") {
        if (!target) target = [];
        if (is(target, Array)) {
          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
        } else if (is(target, Object)) {
          var i = 0;
          while (target[i++] != null);
          target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
        } else {
          target = [];
          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
        }
      } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
        var index = parseInt(token, 10);
        if (!target) target = [];
        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
      } else if (token) {
        var index = token.replace(/^\s*|\s*$/g, "");
        if (!target) target = {};
        if (is(target, Array)) {
          var temp = {};
          for (var i = 0; i < target.length; ++i) {
            temp[i] = target[i];
          }
          target = temp;
        }
        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
      } else {
        return value;
      }
      return target;
    };

    var queryObject = function(a) {
      var self = this;
      self.keys = {};

      if (a.queryObject) {
        jQuery.each(a.get(), function(key, val) {
          self.SET(key, val);
        });
      } else {
        jQuery.each(arguments, function() {
          var q = "" + this;
          q = q.replace(/^[?#]/, ''); // remove any leading ? || #
          q = q.replace(/[;&]$/, ''); // remove any trailing & || ;
          if ($spaces) q = q.replace(/[+]/g, ' '); // replace +'s with spaces

          jQuery.each(q.split(/[&;]/), function() {
            var key = this.split('=')[0];
            var val = this.split('=')[1];

            if (!key) return;

            if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
              val = parseFloat(val);
            else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
              val = parseInt(val, 10);

            val = (!val && val !== 0) ? true : val;

            if (val !== false && val !== true && typeof val != 'number')
              val = decodeURIComponent(val);

            self.SET(key, val);
          });
        });
      }
      return self;
    };

    queryObject.prototype = {
      queryObject: true,
      has: function(key, type) {
        var value = this.get(key);
        return is(value, type);
      },
      GET: function(key) {
        if (!is(key)) return this.keys;
        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
        var target = this.keys[base];
        while (target != null && tokens.length != 0) {
          target = target[tokens.shift()];
        }
        return target || "";
      },
      get: function(key) {
        var target = this.GET(key);
        if (is(target, Object))
          return jQuery.extend(true, {}, target);
        else if (is(target, Array))
          return target.slice(0);
        return target;
      },
      SET: function(key, val) {
        var value = !is(val) ? null : val;
        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
        var target = this.keys[base];
        this.keys[base] = set(target, tokens.slice(0), value);
        return this;
      },
      set: function(key, val) {
        return this.copy().SET(key, val);
      },
      REMOVE: function(key) {
        return this.SET(key, null).COMPACT();
      },
      remove: function(key) {
        return this.copy().REMOVE(key);
      },
      EMPTY: function() {
        var self = this;
        jQuery.each(self.keys, function(key, value) {
          delete self.keys[key];
        });
        return self;
      },
      empty: function() {
        return this.copy().EMPTY();
      },
      copy: function() {
        return new queryObject(this);
      },
      COMPACT: function() {
        function build(orig) {
          var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
          if (typeof orig == 'object') {
            function add(o, key, value) {
              if (is(o, Array))
                o.push(value);
              else
                o[key] = value;
            }
            jQuery.each(orig, function(key, value) {
              if (!is(value)) return true;
              add(obj, key, build(value));
            });
          }
          return obj;
        }
        this.keys = build(this.keys);
        return this;
      },
      compact: function() {
        return this.copy().COMPACT();
      },
      toString: function() {
        var i = 0, queryString = [], chunks = [], self = this;
        var addFields = function(arr, key, value) {
          if (!is(value) || value === false) return;
          var o = [key];
          if (value !== true) {
            o.push("=");
            o.push(encodeURIComponent(value));
          }
          arr.push(o.join(""));
        };
        var build = function(obj, base) {
          var newKey = function(key) {
            return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
          };
          jQuery.each(obj, function(key, value) {
            if (typeof value == 'object')
              build(value, newKey(key));
            else
              addFields(chunks, newKey(key), value);
          });
        };

        build(this.keys);

        if (chunks.length > 0) queryString.push($hash);
        queryString.push(chunks.join($separator));

        return queryString.join("");
      }
    };

    return new queryObject(location.search, location.hash);
  };
} (jQuery.query || {}); // Pass in jQuery.query as settings object


/* Norwegian initialisation for the jQuery UI date picker plugin. */
/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
jQuery(function($) {
  $.datepicker.regional['no'] = {
    clearText: 'Tøm', clearStatus: '',
    closeText: 'Lukk', closeStatus: '',
    prevText: '&laquo;Forrige', prevStatus: '',
    prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
    nextText: 'Neste&raquo;', nextStatus: '',
    nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
    currentText: 'I dag', currentStatus: '',
    monthNames: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni',
        'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],
    monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun',
        'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
    monthStatus: '', yearStatus: '',
    weekHeader: 'Uke', weekStatus: '',
    dayNamesShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
    dayNames: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
    dayNamesMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],
    dayStatus: 'DD', dateStatus: 'D, M d',
    dateFormat: 'yy-mm-dd', firstDay: 0,
    initStatus: '', isRTL: false
  };
  $.datepicker.setDefaults($.datepicker.regional['no']);
});


/*
 * ESS common functions
 */ 

var datoFormat = "dd.mm.yy";
/* browser detect */
var is_ie = document.getElementById("is_ie");
var is_ie6 = document.getElementById("is_ie6");
var is_safari = (window.navigator.appVersion.search("Safari") != -1);
var is_firefox = (window.navigator.userAgent.search("Firefox") != -1);
var is_firefox3 = is_firefox && (window.navigator.userAgent.indexOf("Firefox/3") != -1);

function classRegexp(className) { return new RegExp("(^|\\s)" + className + "(\\s|$)"); }
function getElementsByClassName(className, tag, elm){
  var re = classRegexp(className);
  var elm = elm || document;
  var es = ((tag || "*") == "*" && elm.all)? elm.all : elm.getElementsByTagName((tag || "*"));
  var r = [];
  for(var i=0; i<es.length; i++){
    if(re.test(es[i].className)){
      r.push(es[i]);
    }
  }
  return r;
}
function hasClass(elem, className) { return classRegexp(className).test(elem.className); }
function setClass(elem, className, set) { if(set) { addClass(elem, className); } else { removeClass(elem, className); } }
function addClass(elem, className) { if(!hasClass(elem, className)) { elem.className += " " + className; } }
function removeClass(elem, className) { $(elem).removeClass(className); }
function getElemUp(e, tag) { return(e ? ((e.tagName == tag) ? e : getElemUp( e.parentNode, tag)) : null); }
function getClassUp(e, c) {  return(e ? (hasClass(e, c) ? e : getClassUp(e.parentNode, c  )) : null); }
function getClassPartUp(e, c) {return (e ? (((e.className || "").search(c) != -1) ? e : getClassPartUp(e.parentNode, c)) : null); }
function removeNode(e) { if (e) { e.parentNode.removeChild(e); } }
function trim(s) { return s.replace(/^\s+|\s+$/g, ''); }
Array.prototype.remove=function(v){
  for(i=0;i<this.length;i++){
    if(v==this[i]) this.splice(i, 1); 
  }
}
function toggleClass(elem, className) { setClass(elem, className, !hasClass(elem, className)); }
function setElem(elem, show) { elem.style.display = (show ? "" : "none"); }
function showElem(elem) { setElem(elem, true); }
function hideElem(elem) { setElem(elem, false); }
function toggleElem(elem) { setElem(elem, !visible(elem)); }
function visible(elem) { return (elem.style.display != "none"); }
function tryAlert(f) { try { f(); } catch(err) { alert(err + (err.lineNumber ? (" on line " + err.lineNumber) : "")); } }

function contains(h, v) {
  for(i in h) { if(h[i] == v) { return true; } }
  return false;
}

// Firefox InnerText R.E.M 2006
// Credits: Matthias Hertel , Erik Arvidsson, check by jvance
// emulates IE's innertext on Firefox's Proprietary __defineGetter__ 
if (is_firefox && HTMLElement != "undefined" && typeof HTMLElement.prototype.__defineGetter__ != "undefined") {
  HTMLElement.prototype.__defineGetter__("innerText", function() {
  if (this.textContent) { return this.innerHTML.replace(/<(br|p)\s*\\?>/gi, "\n").replace(/<(.|\n)*?>/g, "").replace(/&nbsp;/g, "\u00a0"); }
    else { var r = this.ownerDocument.createRange(); r.selectNodeContents(this); return r.toString(); } 
  });
  HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
    if  (this.textContent)  {this.innerHTML=sText.textContent; }
    else {this.innerHTML = sText.replace(/\&/g, "&").replace(/\>/g, ">");  }}  );
}
/*
// opera innerText is broken
String.fixText=function($INPUT) {
   return $INPUT.replace(/\&/g, "&").replace(/\</g, "<").replace(/\>/g, ">");
} 
*/
    
function queryToHash(q) {
//alert("queryToHash of " + q);
  var p = q ? q.split(/&/) : [];
  var h = {};
  for(var i = 0; i < p.length; i++) {
    var a = p[i].split(/=/);
    h[a[0]] = (a.length > 1) ? a[1] : "";
  }
  return h;
}
function hashToQuery(h) {
  var k = [];
  for(var i in h) { k.push(i); }
  k.sort();
  var q = "";
  for(var i = 0; i < k.length; i++) {
    q += (q ? "&" : "") + k[i] + "=" + h[k[i]];
  }
  return q;
}

function hentQueryHash() { return queryToHash(window.location.search.replace(/^\?/, "")); }
function settQuery(q) { 
  var f = finnCookie("go");
  if(f && (f == q)) { document.cookie = "go="; /*alert("skulle gått til " + q );*/ }
  else {
    document.cookie = "go=" + q;
    window.location.replace(window.location.pathname + (q ? "?" + q : "")); 
  }
}    
function finnCookie(v) {
  var r = document.cookie.match(v + '=(.*?)(;|$)');
  if(r) { return r[1]; }
}
function deleteCookie(v) {
  document.cookie = v + "=;expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
function hentTilstand(i) {
  var e = document.getElementById(i);
  try { return e.getElementsByTagName("SPAN")[0].innerText; }
  catch(r) { return null; }
}
function splitUrl() {
  var p = window.location.pathname;
  if(p.search(/^(.*\/)([^\/]*)$/) != -1) {
    return { path: RegExp.$1, name: RegExp.$1 + ((RegExp.$2.toLowerCase() == "default.aspx") ? "" : RegExp.$2) };
  }
  return { path: "/", name: "/" + p };
}
function sjekkTilstand(x) {
  var s = finnCookie(splitUrl().name);
  //alert("x="+x+", s="+s);
  if(x && s && (x != s)) { 
    var endret = false;
    var c = queryToHash(s);
    var t = queryToHash(x);
    var u = hentQueryHash();
    for(var i in c) {
      if((u[i] == undefined) && (c[i] != t[i])) { u[i] = c[i]; endret = true; }
    }
    if(endret) { settQuery(hashToQuery(u)); } else { deleteCookie("go"); }
  }
}
function Rad(r) {
  function radOver() { setClass(r, "hover", true); }
  function radOut()  { setClass(r, "hover", false); }
  function click()   { 
    var as = r.getElementsByTagName("A");
    if(as.length > 0) { 
      var h = as[0].href;
      if(h.search(/^javascript:(.*)$/) == -1) { window.location = h; }
      else { eval(RegExp.$1); }
    } 
  }
  r.onmouseover = radOver;
  r.onmouseout  = radOut;
  r.onclick = click;
}
var rader = [];
function initTabell(e) {
  var rs = e.getElementsByTagName("TR");
  for(var i = 0; i < rs.length; i++) {
    var cs = getElementsByClassName("cell", null, rs[i]);
    if((cs.length > 0) && (!hasClass(cs[0], "edit")) && (!hasClass(cs[0].parentNode, "noclick"))) {
      rader.push(new Rad(rs[i]));
    }
  }
}

function PageLoadedEventHandler() {

   documentReady();
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
   Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
   
   var t = hentTilstand("tilstandForelder");
   //alert("setter tilstand=" +t);
   if(t) { var s = splitUrl(); document.cookie = s.name + "=" + t + "; path=" + s.path; }
   // Sjekk om er kompatibel med url
   var a = hentQueryHash();
   var b = queryToHash(t);
   var endret = false;
   for(var i in b) {
     if((!(a[i] == undefined)) && (a[i] != b[i])) { delete a[i]; endret = true; }
   }
   if(endret) { settQuery(hashToQuery(a)); } else { deleteCookie("go"); }
   // Initialiser tabeller
   var ts = getElementsByClassName("radliste", "TABLE", document);
   for(var i = 0; i < ts.length; i++) {
     initTabell(ts[i]);
   }
   var rr = document.getElementById("rapportRedigerer");
   if(rr && erPerSted) { setClass(rr, "persted", erPerSted()); }

}
 
function BeginRequest(sender, args) {
   CloseError();
}
 
function EndRequest(sender, args) {
  // Check to see if there's an error on this request.
  if (args.get_error() != undefined)
  {
    // If there is, show the custom error.

      var e = $get('ErrorPanel');
      var m = "" + args.get_error().message;
      m = m.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", "");
      if (e) { e.style.display = "block"; e.innerHTML = m; }
      else { alert(m); }
 
    // Let the framework know that the error is handled, 
    //  so it doesn't throw the JavaScript alert.
    args.set_errorHandled(true);
  }
}
 
function CloseError() {
  // Hide the error div.
  var e = $get('ErrorPanel');
  if (e) { e.style.display = "none"; }
}

var managere = [ null ];

function initFelt(e) {
  return initMan(e, null, true);
}

function initMan(e, pk, nohover) {
  if(!e.getAttribute("manager")) { 
    try {
      var i = managere.length;
      var man = hasClass(e, "felt") ? 
        new Felt(e, i, nohover) : ( hasClass(e, "hjelp") ? 
          new Hjelpetekst(e, pk) : 
          new RadManager(e, pk, i)
        );
      managere.push(man);
      e.setAttribute("manager", i);
      return man;
    } catch(err) {
      var timer = setTimeout(function() { initMan(e); }, 500);
      e.onmouseout = function() { clearTimeout(timer); e.onmouseout = null; }
      return null;
    }
  } else {
    return managere[e.getAttribute("manager")];
  }
}

setClass(document.body, "safari", is_safari);
setClass(document.body, "firefox", is_firefox);
setClass(document.body, "firefox3", is_firefox3);


function documentReady() {
    $('.kalender').datepicker({ dateFormat: datoFormat });
}


