$(function() {
  $(window).load(function() {
    window.switchTo5x = false;
    loadScript('http://w.sharethis.com/button/buttons.js', function() {
      stLight.options({publisher:'db972e99-5e5f-48c7-a530-3dca6436f4e9', onhover: false});
      // SHARE THIS DROPDOWN
      if (stButtons){stButtons.locateElements();}
      $('.sharedrop, .sharedropdown').hover(
        function() {
          $('.sharedropdown', this).stop(true,true).fadeIn();
          if (stButtons){stButtons.locateElements();}
        },
        function() { $('.sharedropdown', this).stop(true,true).delay(500).fadeOut(); }
      );
    });
  });

  // REVERSE ARRAY
  $.fn.reverse = [].reverse;

  // CAPTION FUNCTION
  $.fn.capt = function(options) {
    var opts = $.extend({}, $.fn.capt.defaults, options);
    return this.each(function() {
      $this = $(this);
      var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
      $this.find('.caption').css('display','none');
      var _img = $this.find('img:first');
      var w = _img.css('width');
      var h = _img.css('height');
      $('.caption',$this).css({'color':o.caption_color,'background-color':o.caption_bgcolor,'bottom':'0px','width':w});
      $('.caption .details',$this).css({'color':o.caption_color});
      $this.css({'width':w , 'height':h, 'border':o.border});
      $this.hover(
        function () {
          $('.caption',$(this)).stop(true,true).slideDown(500);
        },
        function () {
          $('.caption',$(this)).stop(true,true).slideUp(200);
        }
      );
    });
  };
  $.fn.capt.defaults = {
    caption_color   : '#ccc',
    caption_bgcolor : 'rgba(0,0,0,0.7)',
    border                  : '0px solid #fff'
  };

  $.fn.autoselect = function() {
    this.each(function() {
      var ele = $(this);
      var length = ele.val().length;
      ele.focus();

      if ('selectionStart' in this) {
        this.selectionStart = 0;
        this.selectionEnd = length;
      } else if (this.createTextRange) {
        var tr = this.createTextRange();
        tr.moveEnd('textedit', -1);
        tr.moveStart('character', 0);
        tr.moveEnd('character', length);
        tr.select();
      }
    });
  };

  // LIMIT CHARACTERS IN TEXTAREA
  $.fn.limitLength = function(options){

    var settings = jQuery.extend({
      attribute: "maxlength",
      onLimit: function(){},
      onEdit: function(){}
      }, options);

      var onEdit = function(){
        var textarea = jQuery(this);
        var maxlength = parseInt(textarea.attr(settings.attribute));
        if(textarea.val().length > maxlength){
          textarea.val(textarea.val().substr(0, maxlength));
          jQuery.proxy(settings.onLimit, this)();
        }
        jQuery.proxy(settings.onEdit, this)(maxlength - textarea.val().length);
      }
      this.each(onEdit);
      return this
        .live('keyup', onEdit)
        .live('keydown', onEdit)
        .live('focus', onEdit)
        .live('input paste', onEdit);
    }

  // TRUNCATE / EXPAND FUNCTION
  var expandText = $('meta[name=expand-text]').attr('content');
  var collapseText = $('meta[name=collapse-text]').attr('content');

  $.fn.summary = function(options) {
    return this.each(function() {
      new $.Summary(this, options);
    });
  };
  $.Summary = function(e, o) {
    var element = $(e);
    var options = o || {};
    var lineHeight = parseInt(element.css('line-height'), 10);
    var textHeight = element.innerHeight();
    var maxHeight = (options.maxLines || 7) * lineHeight;
    var newHeight = (options.newLines || 4) * lineHeight;
    var className = options.className || 'expand';
    var tag = options.tag || '<a>';
    var link = options.link;

    if (textHeight > maxHeight) {
      var collapsed = true;
      element.css({overflow: 'hidden'});
      element.height(newHeight);
      var moreLink = $(tag, {text: expandText}).addClass(className);
      element.after(moreLink);

      if (link) {
        moreLink.attr('href', element.attr(link));
      } else {
        moreLink.click(expand);
      }
    }

    function expand() {
      if (collapsed) {
        element.animate({height: textHeight}, 'fast');
        moreLink.text(collapseText).addClass('collapse');
      } else {
        element.animate({height: newHeight}, 'fast');
        moreLink.text(expandText).removeClass('collapse');
      }
      collapsed = !collapsed;
    }
  };

  //  = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  //

  // summary text blocks
  $('.peep').summary({maxLines: 6, link: 'data-link'});
  $('.detailcoldesc').summary({maxLines: 4, newLines: 3,link: 'data-link'});
  $('.wikiIngress').summary({maxLines: 3, newLines: 3, link: 'data-link'});

  // textarea limits
  var featuredEditCallback = function(remaining) {
    $textareacount = $(this).parent().parent().find('label span.textareacount');
    $textareacount.text(remaining);
    if(remaining>0) {$textareacount.css('color', 'black');}
  }
  var featuredLimitCallback = function() {
    $textareacount = $(this).parent().parent().find('label span.textareacount');
    $textareacount.css('color', 'red');
  }
  $('textarea.featuredcomment, textarea.wikisuggestcomment').limitLength({
    onEdit: featuredEditCallback,
    onLimit: featuredLimitCallback
  });

  // modal window search item
  $('.itemModal').each(function(i) {
    $(this).jqm({
      toTop: true,
      onShow: function(hash) {
        $('.image img', hash.w).attr("src", hash.w.attr("data-image"));
        $('.image img', hash.w).load(function() {
          $('.image img', hash.w).position({of: $('.image', hash.w), my: "center center", at: "center center" });
        });
        hash.w.fadeIn();
        hash.o.fadeIn();
      },
      onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
    });
    $(this).jqmAddTrigger($(this).prev().find('.item-img img.croppedImage'));
  });

  // modal windows
  $('#folderDialog').jqm({
    toTop: true,
    ajax: '@href',
    trigger: '#addToMyFolder a,a.addToMyFolder' ,
    overlayClass: "jqmOverlayDark",
    onShow: function(hash) { hash.w.fadeIn(); hash.o.fadeIn();},
    onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
  });
  $('#placeMap').jqm({
    toTop: true,
    trigger: 'a.placeMap',
    overlayClass: "jqmOverlayDark",
    onShow: function(hash) {
      hash.w.fadeIn();
      hash.o.fadeIn();
      $('#placeMap .mapCanvas').show().data('show-map')();
    },
    onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
  });
  $('#bigMap').jqm({
    toTop: true,
    trigger: 'a.bigMap',
    overlayClass: "jqmOverlayDark",
    onShow: function(hash) {
      hash.w.fadeIn();
      hash.o.fadeIn();
      $('#bigMap .mapCanvas').show().data('show-map')($(hash.t).data('index'));
    },
    onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
  });
  $('#featuredpop').jqm({
    toTop: true,
    trigger: '.featuredtrigger',
    ajax: '@data-link',
    overlayClass: 'jqmOverlayDark',
    onShow: function(hash) { hash.w.fadeIn(); hash.o.fadeIn();},
    onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
  });
  $('#suggest_wikipediapop').jqm({
    toTop: true,
    trigger: 'a.suggest_wikipedia',
    ajax: '@href',
    overlayClass: 'jqmOverlayDark',
    onShow: function(hash) { hash.w.fadeIn(); hash.o.fadeIn();},
    onHide: function(hash) { hash.w.fadeOut(); hash.o.fadeOut();}
  });
  // folder edit, sort artifacts
  $('#sortableFolders' ).sortable();
  $('#sortableFolders' ).disableSelection();
  $('#folderEditingForm').submit(function(e) {
    $('#folderOrder').attr('value', $('#sortableFolders li').map(function() {  return $(this).attr('data-id'); } ).get().join(' '));
  });
  $('#sortableFolders li').hover(
      function() {
        $(this).find('.dragdropoverlay').fadeIn();
      }, 
      function() {
        $(this).find('.dragdropoverlay').fadeOut();
      }
    );
  // login
  $('#userActionsToggle').click(function(e){
    e.preventDefault();
    $('#langSel').slideUp();
    $('#languageSelector').removeClass('open');
    $('#userActions').slideToggle();
    $('#userActionsToggle').toggleClass('open');

  });
  // change lang
  $('#languageSelector').click(function(e){
    e.preventDefault();
    $('#userActions').slideUp();
    $('#userActionsToggle').removeClass('open');
    $('#langSel').slideToggle();
    $('#languageSelector').toggleClass('open');

  });

  // recover
  $('#recoverlink').click( function(e){
    e.preventDefault();
    $('#recoverform').slideToggle();
  });
  if(window.location.hash) {
    if (window.location.hash == "#recover") {
      $('#recoverform').slideToggle();
    }
  }

  // search field
  $( "#searchField" ).autocomplete({
    source: "/search/autocomplete",
    minLength: 2,
    select: function( event, ui ) {
      $(this).val(ui.item.value);
      $('#searchForm').submit();
    }
  });
  $('#searchField').focus(function() {
    if(!$(this).val().length) {
      $('#searchRecommendations').slideDown();
    }
  });
  $('#searchField').focusout(function() {
    $('#searchRecommendations').delay(200).slideUp();
  });
  $('#searchField').keypress(function() {
    $('#searchRecommendations').slideUp();
  });

  $('#highContrast').click(function(e) {
    e.preventDefault();
    alert('Enable high contrast css');
  });

  // Footer

  $('#wikisearch').click(function(e) {
    e.preventDefault();
    window.open('http://no.wikipedia.org/w/index.php?title='+$('#wikigoogsearch').attr('value'));
  });
  $('#googsearch').click(function(e) {
    e.preventDefault();
    window.open('https://www.google.com/search?hl=no&q='+$('#wikigoogsearch').attr('value'));
  });


  // COMMENT FUNCTIONALITY

  onTextAreaResize();
  $('.form-comments textarea, #folderEditingForm textarea').live("focus", function() {
    $(this).next().show();
    $(this).autoResize({
      minHeight: "original",
      maxHeight: 200,
      extraSpace: 30,
      onResize: onTextAreaResize,
      animate: false
    });
    onTextAreaResize();
  });

  $('a.show-sub').click(function(e) {
    e.preventDefault();
    $(this).next().slideToggle();
  });

  $('a.show-wikicode').click(function(e) {
    e.preventDefault();
    var w = $('.wikicode');
    w.slideToggle(function() {
      if (w.is(':visible')) w.autoselect();
    });
  });

  $('.commenttext').summary({maxLines: 3, newLines: 3});

  $('p.showmore a').click(function(e){
    e.preventDefault();
    $('.hiddencomment').slideDown();
    $('p.showmore').slideUp();
  });



  $('.subcommentlink .addcomment').live('click', function(e) {
    $(this).parent().nextAll('.subcommentsholder').slideDown();
    e.preventDefault();
  });


  $('.form-comments').submit(function(e) {
    e.preventDefault();
    $('.message').remove();
    var form = $(this);
    form.find('input[type="submit"]').attr("disabled", true);
    var data = form.serializeArray();
    $.ajax({
      url: form.attr('action'),
      type: 'POST',
      data: data,
      complete: function(xhr) {
        form.find('input[type="submit"]').attr("disabled", false);
        $('.onlynocomments').remove();

        if (xhr.status == 200) {
          form.find('input[type=text],textarea').val('');
          insertComment(form, xhr.responseText);
        } else if (xhr.status == 400) {
          form.prepend(xhr.responseText);
        } else {
          insertComment(form, "Something went wrong");
        }
      }
    });
  });

  $('.jqmWindow form').live('submit', function(e) {
    e.preventDefault();
    $('.message').remove();
    var form = $(this);
    form.find('input[type="submit"]').attr("disabled", true);
    var data = form.serializeArray();
    $.ajax({
      url: form.attr('action'),
      type: 'POST',
      data: data,
      complete: function(xhr) {
        form.find('input[type="submit"]').attr("disabled", false);

        if (xhr.status == 200) {
          window.location.reload();
        } else {
          form.parents('.jqmWindow:first').find('.error').html(xhr.responseText);
          var info = form.data('info-window');
          if (info && google) google.maps.event.trigger(info, 'content_changed');
        }
      }
    });
  });

  // SUMMARY
  $('#object dd:not(.noSummary)').summary({maxLines: 6, newLines: 5});
  //$('h3.ingress').summary({maxLines: 10, newLines: 10});
  $('.exhib_desc p').summary({maxLines: 10, newLines: 10});

  // RATING
  $('.rating a').live('click', function(e) {
    e.preventDefault();
    $.get(this.href);
    $(this).addClass('voted').siblings().removeClass('voted');
  });

  // INPUT PLACEHOLDER FIX
  if(!Modernizr.input.placeholder) {
    $('label.placeholderOldIE').show();
    $("input:not(.noPlaceholderOldIE),textarea").each(function() {
      var $input = $(this);
      if(!$input.val() && $input.attr("placeholder")){
        $input.val($input.attr("placeholder")).addClass('dimu-placeholder');
        $input.focus(function(){
          if($input.val()==$input.attr("placeholder")) $input.val("").removeClass('dimu-placeholder');
        });
        $input.blur(function(){
          if(!$input.val()) $input.val($input.attr("placeholder")).addClass('dimu-placeholder');
        });
      }
    });
  }

  $('ul#filterOptions h3').click(function(e){
    if ($(this).parent().hasClass('open')) {
      $(this).next().slideUp();
    } else {
      $(this).next().slideDown();
      if ($(this).parent().hasClass('initial')) $(this).parent().removeClass('initial');
    }
    $(this).parent().toggleClass('open');
  });

  $('#tagcloud.collapsable h2').click(function(){
    var p = $(this).parent();
    if (p.hasClass('closed')) {
      p.find('ul').show();
      setTimeout(function() { p.removeClass('closed') }, 10);
    } else {
      p.addClass('closed')
      setTimeout(function() { p.find('ul').hide() }, 500);
    }
  });

  $('.pager select[name=rows]').change(function(evt) {
    var self = $(this);
    var page = Math.floor(self.find('option:selected').data('page'));
    self.parents('form').find('input[name=page]').val(page);
  });



  $('#displayOptions .displayOpt[title]').tooltip({margin: "4", direction: "bottom", color: "pink"});
  $('.tooltip').tooltip({margin: "-10", delay: "1000"});
  $('.tooltipfast').tooltip({margin: "-10", delay: "100"});
  $('.toolpink').tooltip({margin: "-5", delay: "200", color: "pink"});

  if ($('#displayOptions select').length) $('#displayOptions select').selectmenu();

  var num = $('#post_number'), place = $('#post_place'), place_label = $('span#post_place_preview');
  num.keyup(function() {
    var val = $(this).val();
    if (val.length == 4) {
      $.getJSON('http://fraktguide.bring.no/fraktguide/api/postalCode.json?callback=?', { pnr: val }, function(res) {
        if (res.valid) {
          place.val(res.result);
          place_label.text(res.result);
        }
      });
    } else {
      place.val("");
      place_label.text("");
    }
  }).keyup();
  $('#helpusinfo a.more').live('click',function(e) {
    e.preventDefault();
    $('div#helpusinfo').load($(this).attr('href'));
  });


  $('ul.menu a').click(function(e) {
    e.preventDefault();
    var l=$(this).parents('ul');
    if(!$(this).parent('.active').length) {
      l.find('li').toggleClass('active');
      $('.'+l.attr('id')+'View').toggleClass('nodisplay'); // FIXME: Only works for two.
    }
  });

  $('.showAllFolders').click(function(e) {
    e.preventDefault();
    $(this).hide().parents('div:first').find('li').slideDown();
  });

  $('a.fave').click(function(e) {
    e.preventDefault();
    var self=$(this);
    $.post(self.attr('href'),{id: self.attr('data-id') }, function(data) {
      self.find('span').toggleClass('nodisplay');
    }).error(function() {
      alert('En feil har oppstått: Kunne ikke legge i favoritter');
    });
    ;
  });
  $('.favelist a.delete').click(function(e) {
    e.preventDefault();
    var self=$(this);
    $.post(self.attr('href'),{id: self.parent().attr('data-id') }, function(data) {
      self.parent().remove();
    });
  });
  $('a.switch').click(function(e) {
    e.preventDefault();
    var self=$(this);
    $.post(self.attr('href'),{id: self.parent().attr('data-id') }, function(data) {
      self.toggleClass('on').toggleClass('off');
      self.find('.label').toggleClass('nodisplay');
    });
  });

  $('.imgSlide').each(function() {
    var self = $(this);
    var rows = $('#fullscreenview').length ? 15 : 5;
    var start = parseInt(self.attr('data-start'), 10) || 0;
    var first = start;
    var initial = self.find('li');
    var onscreen = initial.length;
    var end = start + onscreen;

    var total = parseInt(self.attr('data-artifacts'), 10) || onscreen;
    var url = self.attr('data-url');
    var prev = self.find('.prev');
    var next = self.find('.next');
    var curr = start;

    var nextDisabled = curr + rows >= total;
    var prevDisabled = curr == 0;
    prev.toggleClass('inactive', prevDisabled);
    next.toggleClass('inactive', nextDisabled);

    var container = self.find('ul');
    var width = initial.first().outerWidth();
    container.width(total * width);

    var load = function(change, cb) {
      var back = change < 0;
      var nxt = curr + change;
      var r = rows;

      // Are we trying to load at the edge?
      if (!back && total - end < r) {
        r = total - end;
        nxt = end;
      }

      // Loading more than available?
      if (nxt + r > total) return cb();

      // Loading less than available?
      if (nxt < 0) {
        r += nxt;
        nxt = 0;
      }

      var edge = back ? nxt : (nxt + r);
      // Already loaded?
      if (back ? edge >= start : edge <= end) return cb();

      $.get(url, { count: total, start: nxt, rows: r }, function(data) {
        if (back) {
          container.css('left', (edge - first) * width);
          container.prepend(data);
          start = edge;
        } else {
          container.append(data);
          end = edge;
        }
        cb();
      });
    };

    var move = function(change, thing) {
      thing.addClass('loading');
      nextDisabled = true;
      prevDisabled = true;

      var done = function() {
        done = function() {
          nextDisabled = (curr + rows >= total);
          next.toggleClass('inactive', nextDisabled);
          prevDisabled = (curr == 0);
          prev.toggleClass('inactive', prevDisabled);
        };
      };

      load(change, function() {
        curr += change;
        if (curr < 0) curr = 0;

        initial.slice(curr, curr + 10).find('img[data-src]').each(function() {
          var s = $(this);
          s.attr('src', s.data('src'));
        });

        var margin = -(curr - first) * width;
        container.animate({'margin-left': margin}, 500, function() {
          done();
        });

        load(change, function(r) {
          thing.removeClass('loading');
          done();
        });
      });
    };

    next.click(function(evt) {
      evt.preventDefault();
      if (!nextDisabled) move(rows, next);
    });

    prev.click(function(evt) {
      evt.preventDefault();
      if (!prevDisabled) move(-rows, prev);
    });
  });


  // Dead simple microdata extraction
  var mapping = {
    META: "content"
  };

  $.fn.microdata = function() {
    var self = $(this);
    var res = {};
    self.find('[itemprop]').each(function() {
      var r = $(this);
      if (mapping.hasOwnProperty(this.nodeName)) {
        res[r.attr('itemprop')] = r.attr(mapping[this.nodeName]);
      } else {
        res[r.attr('itemprop')] = r.html();
      }
    });
    return res;
  };

  function buildClusterWindow(list) {
    var c = '<ul class="maplist">';
    for (var i = 0; i < list.length; i++) {
      c += '<li>' + list[i].link + '</li>';
    };
    c += '</ul>';
    return c;
  }

  if (window.google) {
    var mapCanvas = $('.mapCanvas');

    if (mapCanvas.length) {
      mapCanvas.each(function() {
        var currentWindow;
        var center = new google.maps.LatLng(64.491725,14.589844);
        var map = new google.maps.Map(this, {
          center: center,
          zoom: 4,
          mapTypeId: google.maps.MapTypeId.HYBRID,
          streetViewControl: false
        });

        // Max Zoom level for auto-zoom
        var mz = 12;
        var mc = new MarkerClusterer(map, [], { zoomOnClick: false, averageCenter: true });

        // fitToBounds() sometimes zooms in too much, but getZoom() isn't updated immediately.
        // By hooking into zoom_changed we can force mz.
        var force_mz = false;
        google.maps.event.addListener(map, 'zoom_changed', function() {
          if (force_mz && map.getZoom() > mz) map.setZoom(mz);
          force_mz = false;
        });

        Cluster.prototype.get = function(name) {
          if (name == 'position') return this.getCenter();
        };

        google.maps.event.addListener(mc, 'click', function(c) {
          var z = map.getZoom();
          if (z >= mz) {
            var data = [];
            var markers = c.getMarkers();
            for (var i = 0; i < markers.length; i++) {
              data.push(markers[i].data);
            };
            var w = new google.maps.InfoWindow({content: buildClusterWindow(data)});
            w.open(map, c);
          } else {
            map.fitBounds(c.getBounds());
            z = map.getZoom();
            if (z >= mz) map.setZoom(mz);
          }
        });

        var start = "A".charCodeAt(0);
        var max = "Z".charCodeAt(0);
        var markers = [];

        $(this).parent().find('[itemscope]').each(function() {
          var letter = '';
          if (start <= max) {
            letter = String.fromCharCode(start);
            start++;
          }

          var self = $(this);
          var data = self.microdata();
          var marker = new google.maps.Marker({
            position: new google.maps.LatLng(data.lat, data.lng),
            icon: 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld='+letter+'|fd7b70|000000'
          });
          marker.data = data;
          self.find('.markerIcon').css('background-image', 'url('+marker.getIcon()+')');
          markers.push(marker);

          var w = new google.maps.InfoWindow({content: data.window });

          var open = function() {
            if (currentWindow) currentWindow.close();
            w.open(map, marker);
            currentWindow = w;
          };

          google.maps.event.addListener(marker, 'click', open);
          mc.addMarker(marker);

          self.click(function(e) {
            if (e.target.tagName == "A") return;
            e.preventDefault();
            // MarkerClusterer doesn't like setCenter/Zoom to the existing center/zoom
            if (!map.getCenter().equals(marker.getPosition()) || map.getZoom() != mz) {
              map.setCenter(marker.getPosition());
              map.setZoom(mz);
            }
            open();
          });
        });

        var changeMap = true;

        $(this).data('show-map', function(idx) {
          if (changeMap) {
            var c = map.getCenter();
            google.maps.event.trigger(map, 'resize');
            map.setCenter(c);
            if (idx === undefined && mc.getTotalMarkers()) {
              force_mz = true;
              mc.fitMapToMarkers();
            }
            changeMap = false;
          }

          if (idx !== undefined) {
            var marker = markers[idx];
            if (marker && (!map.getCenter().equals(marker.getPosition()) || map.getZoom() != mz)) {
              map.setCenter(marker.getPosition());
              map.setZoom(mz);
            }
          }
        });

        if ($(this).parents('#placeMap:first').length) {
          var placeMarker = new PlaceMarkerControl(map);
          map.controls[google.maps.ControlPosition.TOP_LEFT].push(placeMarker.control);
        }
      });
    }

    $('#mapLink').click($('#commentMap').data('show-map'));

  }


  $('#filterOptions li.selected:has(input:checked)').reverse().each(function() {
    var self = $(this);
    self.parent().prepend(self);
  });

  $('input[name=type_filter]').change(function(e) {
    $(this).parents('li:first').find('input[name$=subject_filter]:checked').click();
  });

  // FILTER LIST SHOW MORE / LESS
  var index = 5;
  $('#filter ul ul ul, #museumfilter, #placefilter').each(function() {
    var base = $(this);
    var hidden = base.find('li:gt('+index+')').hide();
    if (hidden.length) {
      base.append('<li class="more">Se fler...</li>');
      var more = base.find('li.more');
      more.click(function() {
        more.remove();
        hidden.slideDown();
      });
    }
  });

  var more = $('#moreObjectInfo');
  var moreLink = $('#moreObjectInfoLink');
  moreLink.click(function(e) {
    e.preventDefault();
    var n = moreLink.attr('data-toggle-text');
    moreLink.attr('data-toggle-text', moreLink.text());
    moreLink.text(n);
    document.cookie = "show_more=" + !more.is(':visible') + ";path=/";
    more.slideToggle();
    moreLink.toggleClass('collapse');
  });

  if (document.cookie.indexOf('show_more=true') != -1) {
    moreLink.click();
  }

  $('#commentTypeSelect').change(function(e) {
    var self = $(this);
    if (self.val() == 5) {
      $('.eventSuggestion').removeClass('nodisplay');
    } else {
      $('.eventSuggestion').addClass('nodisplay');
    }
  });

  // OBJECT PAGE CONTEXT THUMB
  $('.thumbs .imgSlide').hover(
    function() {
      $('a.prev,a.next', $(this)).stop(true,true).fadeIn();
    },
    function(){
      $('a.prev,a.next', $(this)).stop(true,true).fadeOut();
    }
  );

  // EXPLORE OBJECTS LOAD
  var first = true;
  var obj = $('#expl-obj .obj');
  $('#expl-obj li a').click(function(e) {
    e.preventDefault();
    $('#expl-obj li a').removeClass('current');
    var href = $(this).addClass('current').attr('href');
    if (href == '#') return;

    if (!first) obj.css('height', obj.outerHeight());
    first = false;

    obj.text('Laster inn...');
    $.get(href, function(data) {
      // DONE
      obj.html(data);

      $('#explorecontent').masonry({
        itemSelector: '.expl-res',
        columnWidth: 174,
        gutterWidth: 5
      });

      $('#explorecontent').hide().fadeIn('fast');
      obj.css('height', 'auto');
      $('.expl-res').capt();
      $('.expl-res .caption').css('top', '1000px').show();
      $('.expl-res .details:not(.userinfo)').summary({maxLines: 4, newLines: 4, link: 'data-link', tag: '<span>'});
      $('.expl-res .caption').css('top', '').hide();
    });
  });

  $('#expl-obj li a.current').click();


  // FLASH MESSAGE CLOSE BUTTON
  $('.message .close').live('click', function(e){
    e.preventDefault();
    $(this).parent().slideUp();
  });

  // Utility classes
  $('.indexSensitive').click(function(e){
    e.preventDefault();
    var url=$(this).attr('href');
    var real = url.replace('picture_index',$('.picture:visible').attr('data-index'));
    window.location = real;
  });
  var submitEdit=function(data) {
    var self=$(this);
    $.post(self.attr('data-url'),{ value: data.current  },function(data) {
      self.next().find('.editablelink').show();
      self.next().find('.editableSubmit').addClass('nodisplay');
      if(!data.saved)
      alert($('meta[name=failed-save]').attr('content'));
    }).error(function() {
      alert($('meta[name=failed-save]').attr('content'));
    });

  };
  var doEdit=function() {
    var self=$(this);
    $(this).find('input,textarea')[0].select();
    self.next().find('.editablelink').hide();
    self.next().find('.editableSubmit').removeClass('nodisplay');
  };
  if($('.editable').length ) {
    $('.editable').editable({onSubmit: submitEdit, onEdit:doEdit });
  }
  if($('.editableArea').length ) {
    $('.editableArea').editable({type:'textarea',onSubmit: submitEdit, onEdit: doEdit });
  };
  $('.editablelink').click(function(e) {
    e.preventDefault();
    $(this).parent().prev().trigger('click');
  });
  $('.editableArea textarea').live("focus", function() {
    $(this).autoResize({
      minHeight: 100,
      maxHeight: 400,
      extraSpace: 30,
      animate: false
    });
  });

  $('.postLink').click(function(e) {
    e.preventDefault();
    $('<form action="'+$(this).attr('href')+'" method="post"><input type="submit"></form>').appendTo($('body')).submit();
  });

  $('form').live('submit', function(evt) {
    var form = $(this);
    form.find('input.dimu-placeholder').val("");
    form.find('input[name=picture_index]').val($('.picture:visible').attr('data-index'));
  });

  $('.submitOnChange').live('change', function(e){
    $(this).parents('form').submit();
  });
  $('.submitOnClick').live('click', function(e){
    e.preventDefault();
    $(this).parents('form').submit();
  });
  $('.submitOnEnter').live('keypress', function(evt) {
    if (evt.keyCode == 13) {
      evt.preventDefault();
      $(this).parents('form').submit();
    }
  });
  $('.item img').bind('error', function(e) {
    e.preventDefault();
    $(this).parent().html('<span class="noimg thumb tooltip">?</span>');
  });
  $('form[data-connect]').live('submit',function(evt) {
    evt.preventDefault();
    var self = $(this);
    var other = $(self.attr('action'));
    var params = self.serializeArray();

    self.find('input').each(function() {
      other.find('input[name='+$(this).attr('name')+']').remove();
    });

    for (var i = 0; i < params.length; i++) {
      var param = params[i];
      if (param.value) {
        var field = other.find('[name='+param.name+']');
        $('<input>', {type: 'hidden', name: param.name, val: param.value}).appendTo(other);
      }
    };

    other.submit();
  });

  $('a[data-toggle]').click(function(e) {
    $( $(this).attr('data-toggle') ).slideToggle();
    e.preventDefault();
  });

  $("input[data-datepicker]").live('focus', function() {
    $(this).datepicker({ dateFormat: 'yy-mm-dd', firstDay: 1 });
  });
  //  console.log("Setting for " +$("input[data-datepicker]").length);

  // ADVANCED SEARCH CLASSIFICATIONS
  if ($('#classificationsToken').length > 0) {
    $('#classificationsToken').tokenInput('/search/classifications',
    {
      queryParam: "query",
      minChars: 2,
      propertyToSearch: 'title',
      hintText: "Søk etter klassifikasjon",
      noResultsText: "Ingen resultater",
      searchingText: "Søker, vennligst vent...",
      theme: "mac",
      preventDuplicates: "true"
    });
  }

  // FULL SCREEN

  var fullscreenThingie = false;
  $('#fullscreenview .deets, #fullscreenview a.expandLink').click(function(evt){
    evt.stopPropagation();
    evt.preventDefault();
    fullscreenThingie = !fullscreenThingie;
    $('.moredeets').stop(true,true).slideToggle();
    $('.expandLink').toggleClass('expanded');
  });

  $(".galleryPage #object, #fullscreenview #header").click(function(evt) {
    if (fullscreenThingie) $('#fullscreenview .deets').click();
  });

  // ON WINDOW RESIZE EVENTS

  $.event.add(window, "resize", winResize);
  $.event.add(window, "load", winResize);

  if ($('#fullscreenview').length) {
    if (window.name != "open") gallerySlideFirst();
    window.name = "open";
  } else {
    window.name = "";
  }

  // IE HACK FIT IMAGES IN BOXES
  if($('.imgFitInBox').length) {
    $('.imgFitInBox').each ( function () {
      var $container = $(this).parent(),
          aspect = $(this).width() / $(this).height();
      if (($container.width() / $container.height()) < aspect) {
        $(this).addClass('imgFitInBoxH');
      } else {
        $(this).addClass('imgFitInBoxW');
      }
    });
  }

  // IE HACK TO DISPLAY TRANSPARENT SUBMIT BUTTON ON MUSEUM SEARCH
  if($('.inline-button').length) {
    $('.inline-button').each( function() {
      if($(this).prev().is('css3-container')) {
        this.style['behavior'] = "";
        $(this).prev().remove();
      }
    });
  }

});

function gallerySlideFirst() {
  $('.moredeets').show();
  $('.moredeets').slideUp();
}


function winResize() {
  if ($('#container').hasClass('slide')) {
    // imageSlideshow in gallery resize
    h = $(window).height() - $('header').outerHeight() - $('footer .deets').outerHeight() - 10;//-$('#container > header.top').innerHeight();
    m = $('header').outerHeight();
    $('.galleryPage #content').height(h);
    $('.galleryPage #content').css('margin-top',m+'px');
    $('.galleryPage #content #imageSlideshow').height(h);
    $('.galleryPage #imageSlideshow div').each ( function () {
      $(this).width($(this).parent().width());
      $(this).height(h);
    });

    // imageSlideshow img center
    $('.galleryPage #imageSlideshow div img').each( function() {
      topmargin = 20;
      bottommargin = 60;
      newH = (($(this).parent().height() - bottommargin - topmargin) < 748) ? ($(this).parent().height() - topmargin - bottommargin) : 748;
      newW = ($(this).parent().width() < 1024) ? $(this).parent().width() : 1024;
      $(this).css('height','auto');
      $(this).css('width','auto');
      resize($(this),newW,newH);
      $(this).parent().css('margin-top', $(this).parent().height()/2 - $(this).height()/2 - bottommargin);
      $(this).parent().css('margin-left', $(this).parent().width()/2 - $(this).width()/2);
      $(this).parent().css('margin-right', $(this).parent().width()/2 - $(this).width()/2);
      $(this).parent().width($(this).width());
      $(this).fadeIn();
    });
    $('.objectPage #imageSlideshow div img').each( function() {
      newH = $(this).parent().height();
      newW = $(this).parent().width();
      $(this).css('height','auto');
      $(this).css('width','auto');
      resize($(this),newW,newH);
      $(this).parent().css('padding-top', $(this).parent().height()/2 - $(this).height()/2);
      $(this).parent().css('padding-left', $(this).parent().width()/2 - $(this).width()/2);
      $(this).fadeIn();
    });
  }
  if($('#container').hasClass('galleryPage')) {
    $('#galleryDetails').css('max-height', ($(window).height() - $('header').outerHeight()) + 'px');
    $('.prevObject, .nextObject').css('height', $('#content').height());
  }
}

// IMG RESIZE

function resize($el,maxWidth,maxHeight) {
  var ratio = 0;
  var width = $el.width();
  var height = $el.height();
  if ((width > maxWidth)||(height > maxHeight)) {
    ratio = (maxWidth / width);
    $el.width(maxWidth);
    $el.height((height * ratio));
    height = (height * ratio);
    width = (width * ratio);
    if (height > maxHeight) {
      ratio = (maxHeight / height);
      $el.height(maxHeight);
      $el.width((width * ratio));
    }
  }
}

function loadScript(url, callback){
  var script = document.createElement("script");
  var head = document.body;
  script.type = "text/javascript";

  if (script.readyState){  //IE
    script.onreadystatechange = function(){
      if (script.readyState == "loaded" ||
          script.readyState == "complete"){
        script.onreadystatechange = null;
        head.removeChild(script);
        callback();
      }
    };
  } else {  //Others
    script.onload = function(){
      head.removeChild(script);
      callback();
    };
  }

  script.src = url;
  head.appendChild(script);
}


function onTextAreaResize() {
  if (!$('#commentsmainform').hasClass('nocomments')) {
    $('.#objectinfo #commentsholder').css('margin-bottom', $('#commentsmainform').outerHeight()) + 30;
  }
}

function insertComment(form, text) {
  var t = form.prev();
  if (t.length) {
    t.prepend(text);
  } else {
    form.parent().before(text);
  }
}

function PlaceMarkerControl(map) {
  var form = $('#placeMapForm').remove().removeClass('nodisplay');
  var latlng = form.find('input[name=location]');
  var marker = new google.maps.Marker({map: map, draggable: true});
  var info = new google.maps.InfoWindow({content: form[0]});
  form.find('form').data('info-window', info);

  var control = $('<div>', {id: 'placeMarkerControl'});
  var move = $('<a>', {id: 'moveMapIcon', href: '#', 'class': 'active icon'});
  move.append($('<span>', {'class': 'hand'}));
  var place = $('<a>', {id: 'placeMarkerIcon', href: '#', 'class': 'icon'});
  place.append($('<span>', {'class':'marker'}));

  var markerPlaced = function() {
    latlng.val(marker.getPosition().toUrlValue());
  };

  var listener;
  var placeCallback = function(evt) {
    marker.setPosition(evt.latLng);
    marker.setVisible(true);
    info.open(map, marker);
    markerPlaced(evt);
  };

  google.maps.event.addListener(marker, 'dragend', markerPlaced);
  google.maps.event.addListener(info, 'closeclick', function() {
    move.click();
  });

  move.click(function(e) {
    e.preventDefault();
    map.set('draggable', true);
    move.addClass('active');
    place.removeClass('active');
    if (listener) google.maps.event.removeListener(listener);
    marker.setVisible(false);
    info.close();
  });

  place.click(function(e) {
    e.preventDefault();
    map.set('draggable', false);
    place.addClass('active');
    move.removeClass('active');
    listener = google.maps.event.addListener(map, 'click', placeCallback);
  });

  control.append(move).append(place);
  this.control = control[0];
}


