﻿jQuery(document).ready(function() {
  initScrollArea();
  initCenters();
  jQuery("#find_center").bind("click", function() {
    showCenters();
    jQuery(this).unbind("click").css("cursor", "default");
  }).css("cursor", "pointer");
  if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) && new Number(RegExp.$1) < 7) {

  } else {
    initFrontPageNewsScroll();
  }
  initMenuMouseOver();
  initLoginTooltip();
  initCo3Gallery();
});

jQuery.fn.outerHTML = function(s) {
return (s)
? this.before(s).remove()
: jQuery("<p>").append(this.eq(0).clone()).html();
};

//The area that will be scrolled sideways
var scrollArea;
//Bredden på det synlige område
var mainAreaWidth;
//Antallet af sider i scrollbaren
var antalSider = 0;
//Den aktuelle side
var currentPage = 1;

var leftArrow;
var contentListItems;
var rightArrow;
var contentListItemPadding = 0;
var isScrolling = false;
var scrollAreaWidth = 0;

/*
* Readies the scrollarea
*/
function initScrollArea() {
  //All items in the scrollarea
  scrollAreaWidth = 0;
  scrollArea = jQuery("#scrollArea");
  if (scrollArea.length > 0) {
    contentListItems = jQuery(".contentListItem");
    mainAreaWidth = parseInt(jQuery("#slide_holder").width());
    try {
      contentListItemPadding = contentListItems.attr("scrollWidth") - contentListItems.outerWidth();
    } catch (e) {
      //Der er intet indhold
    }

    leftArrow = jQuery("#pil_left");
    rightArrow = jQuery("#pil_right");
    for (var i = 0; i < contentListItems.length; i++) {
      var contentListItem = jQuery(contentListItems[i])
      scrollAreaWidth += contentListItem.outerWidth();
    }
    scrollArea.width(scrollAreaWidth);
    scrollArea.css("opacity", 0);
    scrollArea.animate({
      opacity: 1
    }, 1000);

    if (scrollAreaWidth > mainAreaWidth) {
      //Looper for at få det korrekte antal sider
      antalSider = findPage();


      leftArrow.bind("click", { isRight: false, speed: 500 }, doScroll);
      rightArrow.bind("click", { isRight: true, speed: 500 }, doScroll);
    }
    setArrows();

    //Scroll to a predefined page
    if (getURLParam("show")) {
      var show = "ele" + getURLParam("show");
      doScroll({ data: { speed: 500, element: show} });
    }
  }
}

//Finds the page from a width
//If no width is defined, the total scrollareawidth will be used
function findPage(width) {
  var tmpAntalSider = 0;
  var remainingWidth = scrollAreaWidth;
  if (width != null)
    remainingWidth = width == 0 ? 1 : width + 1;

  while (remainingWidth > 0) {
    tmpAntalSider++;
    remainingWidth = remainingWidth - contentListItemPadding - mainAreaWidth;
    if (remainingWidth < 1)
      break;
  }
  return tmpAntalSider;
}

function doScroll(e) {
  var gotopage = 0;
  var newXPos = 1;
  var tempXPos = 0;

  if (e.data.element) {

    var lengthToElement = 0;
    for (var i = 0; i < contentListItems.length; i++) {
      if (contentListItems[i].id == e.data.element)
        break;
      lengthToElement += jQuery(contentListItems[i]).outerWidth();
    }
    gotopage = findPage(lengthToElement);
  }

  if (!isScrolling) {

    toggleIsScrolling();
    oldXPos = parseInt(scrollArea.css("left").replace("px", ""));

    if (gotopage == 0) {
      newXPos = e.data.isRight ? oldXPos - mainAreaWidth - contentListItemPadding : oldXPos + mainAreaWidth + contentListItemPadding;

      if (e.data.isRight)
        currentPage++;
      else
        currentPage--;
    } else {
      if (currentPage != gotopage) {
        newXPos = -((gotopage - 1) * mainAreaWidth + (gotopage - 1) * contentListItemPadding);
        if (currentPage > gotopage)
          e.data.isRight = true;
        else
          e.data.isRight = false;
      }

      currentPage = gotopage;
    }

    if (newXPos != 1) {
      tempXPos = e.data.isRight ? oldXPos + 30 : oldXPos - 30;

      scrollArea.animate({
        left: tempXPos
      }, 200);

      scrollArea.animate({
        left: newXPos
      }, 1000, function() {
        toggleIsScrolling();
        if (e.data.element)
          jQuery("#" + e.data.element).children(".readMore").trigger("click");
      });
    } else if (e.data.element) {
      jQuery("#" + e.data.element).children(".readMore").trigger("click");
      toggleIsScrolling();
    }
    setArrows();

  }
}

function setArrows(hide) {
  if (hide) {
    toggleArrow(leftArrow, false);
    toggleArrow(rightArrow, false);
    return;
  }
  if (currentPage == 1 || antalSider < 2)
    toggleArrow(leftArrow, false);
  else
    toggleArrow(leftArrow, true);

  if (currentPage == antalSider || antalSider < 2)
    toggleArrow(rightArrow, false);
  else
    toggleArrow(rightArrow, true);
}

function toggleArrow(arrow, show) {
  if (!show) {
    arrow.css("visibility", "hidden");
    return;
  }
  if (arrow.css("visibility") == "hidden" || show)
    arrow.css("visibility", "visible");
  else
    arrow.css("visibility", "hidden");
}

function toggleIsScrolling() {
  isScrolling = !isScrolling;
}

// Giver dig en parameter fra urlen
function getURLParam(strParamName) {
  return getParameterFromLink(strParamName, window.location.href);
}

// Giver dig en parameter fra et link
function getParameterFromLink(strParamName, link) {
  var strReturn = "";
  var strHref = link;
  if (strHref.indexOf("?") > -1) {
    var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
    var aQueryString = strQueryString.split("&");
    for (var iParam = 0; iParam < aQueryString.length; iParam++) {
      if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1) {
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
  return unescape(strReturn);
}


var map = null;
var oneWidthUnit = 0;
var oneHeightUnit = 0;

function initCenters() {
  var ul = jQuery("#black");
  var li = jQuery("#black li");
  if (li.length > 0) {
    var liwidth = jQuery(li[0]).outerWidth();
    var ulwidth = jQuery(ul[0]).innerWidth();
    var cols = Math.round(ulwidth / liwidth);
    var rows = Math.ceil(li.length / cols);
    var extra = li.length % cols;
    var weirdProblem = (cols - extra) > 1;
    var arrayToSort = new Array();
    for (var i = 0; i < li.length; i++) {
      arrayToSort[arrayToSort.length] = li[i].title.trim();
    }
    var rowsArr = new Array();
    for (var i = 0; i < rows; i++) {
      rowsArr[i] = new Array();
    }
    var extrasLeft = extra;
    var currentRow = 0;
    for (var j = 0; j < li.length; j++) {

      if (currentRow == rows - 1) {

        if (extrasLeft > 0) {
          rowsArr[currentRow][rowsArr[currentRow].length] = li[j];
          currentRow = 0;
          extrasLeft--;
        } else {
          currentRow = 0;
          rowsArr[currentRow][rowsArr[currentRow].length] = li[j];
          currentRow++;
        }

      } else {
        rowsArr[currentRow][rowsArr[currentRow].length] = li[j];
        currentRow++;
      }

    }

    for (var i = 0; i < rowsArr.length; i++) {
      for (var j = 0; j < rowsArr[i].length; j++) {
        lala = rowsArr[i][j].title;
        ul.append(rowsArr[i][j]);

      }
    }

    //Eventhandlers
    li.click(function(e1, e2) {
      //Take care of dot
      var idClicked = e1.target.id.replace("center", "");
      showNewCenter(idClicked);
    });


  }
  //alert(jQuery(".centerDot").length);
  jQuery(".centerDot").bind("click", function(e1, e2) {
    //Take care of dot
    var idClicked = e1.target.id.replace("dot", "");

    showNewCenter(idClicked, jQuery(e1.target).hasClass("underside"));
  });

  jQuery("#closeInfoArea").click(function(e1, e2) {
    //Take care of dot
    jQuery(this).parent().css("left", -1000).css("top", -1000);
    removeLastSelected();
  });

  //Init Map
  map = jQuery("#centerInfoAreaMap");
  var firstImg = map.children(":first");
  oneWidthUnit = map.width() / 1000;
  oneHeightUnit = map.height() / 1000;

  var nextImg = firstImg;
  while (nextImg.length > 0) {

    var pos = nextImg.position();
    var left = Math.round(pos.left * oneWidthUnit);
    var top = Math.round(pos.top * oneHeightUnit);

    nextImg.css("left", left - 10);
    nextImg.css("top", top - 10);
    nextImg = nextImg.next();
  }
}

function showNewCenter(idClicked, isUnderside) {
  if (isUnderside == undefined) {
    isUnderside = false;
  }

  if (isUnderside) {
    jQuery("#centerInfoArea").css("left", 40).css("top", 40);
  }
  removeLastSelected();
  var img = jQuery("#dot" + idClicked);
  var info = jQuery("#info" + idClicked);
  //info.css("opacity", 0);
  info.addClass("selectedInfo");
  info.animate({
    left: 0
  }, 500);

  img.attr("src", img.attr("src").replace("Lille", "Stor"));
  img.addClass("selectedDot");
  var pos = img.position();
  img.css("left", pos.left - 3);
  img.css("top", pos.top - 3);
}

function removeLastSelected() {
  var lastSelectedDot = jQuery(".selectedDot");
  var lastSelectedInfo = jQuery(".selectedInfo");

  if (lastSelectedInfo.length > 0) {
    lastSelectedInfo.animate({
      left: -1000
    }, 500, function(e) {
      //jQuery(this).removeClass("selectedInfo");
    });
    lastSelectedInfo.removeClass("selectedInfo");
  }

  if (lastSelectedDot.length > 0) {
    lastSelectedDot.attr("src", lastSelectedDot.attr("src").replace("Stor", "Lille")).removeClass("selectedDot");
    var pos = lastSelectedDot.position();
    lastSelectedDot.css("left", pos.left + 3);
    lastSelectedDot.css("top", pos.top + 3);
  }
}

function bubbleSort(inputArray, start, rest) {
  for (var i = rest - 1; i >= start; i--) {
    for (var j = start; j <= i; j++) {
      if (inputArray[j + 1] < inputArray[j]) {
        var tempValue = inputArray[j];
        inputArray[j] = inputArray[j + 1];
        inputArray[j + 1] = tempValue;
      }
    }
  }

  return inputArray;
}

//Trim Function
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

//En ekstra format funktion til String objektet
//Kan bruges med parametre
String.format = function(text) {
  //check if there are two arguments in the arguments list
  if (arguments.length <= 1) {
    //if there are not 2 or more arguments there's nothing to replace
    //just return the original text
    return text;
  }
  //decrement to move to the second argument in the array
  var tokenCount = arguments.length - 2;
  for (var token = 0; token <= tokenCount; token++) {
    //iterate through the tokens and replace their placeholders from the original text in order
    text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token + 1]);
  }
  return text;
};

function showCenters() {
  jQuery("#hovedfeltContent").animate({
    left: -958
  }, 750);
  var firstBanner = jQuery("#find_center").children(":last");
  //alert(firstBanner.length);
  firstBanner.animate({
    opacity: 0
  }, 500, function() {
    jQuery(this).css("display", "none");
  });
}

var newslist = null;
var timeBetweenSlides = 4000;
var rowHeight = 0;
function initFrontPageNewsScroll() {
  newslist = jQuery("#newsSlideContainer").children("#newslist");
  if (newslist.length > 0) {
    var lis = newslist.children();
    rowHeight = parseInt(jQuery("#newsSlideContainer").css("height").replace("px", ""));
    if (lis.length > 3) {
      for (var i = lis.length - 1; i > lis.length - 5; i--) {
        newslist.prepend(lis[i]);
      }
      newslist.css("top", -rowHeight);
      setTimeout(slideNewsList, timeBetweenSlides);
    }
  }
}

function slideNewsList() {
  newslist = jQuery("#newsSlideContainer").children("#newslist");
  newslist.animate({
    top: parseInt(newslist.css("top").replace("px", "")) + rowHeight
  }, 500, function() {
    newslist = jQuery("#newsSlideContainer").children("#newslist");
    var lis = newslist.children();
    for (var i = lis.length - 1; i > lis.length - 3; i--) {
      newslist.prepend(lis[i]);
    }
    newslist.css("top", parseInt(newslist.css("top").replace("px", "")) - rowHeight);
    setTimeout(slideNewsList, timeBetweenSlides);
  });
}

function initMenuMouseOver() {
  var hovedmenu = jQuery("#hovedmenu");
  var mouseFollower = jQuery(document.createElement("img"));
  mouseFollower.attr("src", "/files/Billeder/gfx/hovedmenu_active.gif");
  mouseFollower.addClass("mouseFollower");
  hovedmenu.append(mouseFollower);
  hovedmenu.mousemove(function(e1, e2) {
    var hovedmenu = jQuery("#hovedmenu");

    var follower = jQuery(".mouseFollower");
    var halfFollower = follower.width() / 2;
    var xPos = e1.clientX - hovedmenu.offset().left;
    if (xPos < halfFollower) {
      xPos = halfFollower;
    } else if (xPos > hovedmenu.width() - halfFollower) {
      xPos = hovedmenu.width() - halfFollower;
    }
    follower.css("left", xPos - halfFollower);
  });
  hovedmenu.mouseout(function(e1, e2) {
    var follower = jQuery(".mouseFollower");
    follower.css("left", -40);
  });
}

function initLoginTooltip() {
  var toolmenuspgs = jQuery(".toolmenuspg");
  toolmenuspgs.bind("mouseover", function() {
    var tooltipDiv = jQuery(this).next();
    var thisPos = jQuery(this).position();
    tooltipDiv.stop();
    tooltipDiv.css("top", thisPos.top + 35);
    tooltipDiv.css("left", thisPos.left - tooltipDiv.outerWidth() + 30);
    tooltipDiv.css("opacity", 0);
    tooltipDiv.css("display", "block");
    tooltipDiv.css("height", tooltipDiv.children().outerHeight());
    tooltipDiv.css("z-index", 1000);
    tooltipDiv.animate({
      opacity: 0.9
    }, 300);
    lala = "";
  });

  toolmenuspgs.bind("mouseout", function() {
    var tooltipDiv = jQuery(this).next();
    tooltipDiv.stop();
    tooltipDiv.animate({
      opacity: 0
    }, 300, function() {
      tooltipDiv.css("display", "none");
    });

  });
}

function initCo3Gallery() {
  var imageList = jQuery(".imageList");
  if (imageList.length > 0) {
    var settings = {
      imageInformationHeight: 100,
      imageInformationTemplate: '<div>[header]</div>[description]<br />Størrelse: [width] x [height]<br />Billede [imagenumber] af [numberofimages]<br /><a href="[href]">Download billedet</a>'
    };

    var co3Gallery = jQuery(".imageList img").CreateGallery(settings);
  }
}

