﻿//
// Accordian
//
jQuery.fn.accordian = function (triggerClass, containerClass) {
  //Set default open/close settings.
  jQuery(containerClass).hide();
  //jQuery(this.config.triggerClass + ':first').addClass('active').next().show();

  //On click.
  jQuery(triggerClass).click(function() {
    if(jQuery(this).next().is(':hidden')) {
      jQuery(triggerClass).removeClass('active').next().slideUp();
      jQuery(this).toggleClass('active').next().slideDown();
    }
    else {
      jQuery(triggerClass).removeClass('active').next().slideUp();
    }
    return false;
  });
}

//
// imageSlider
//
function imageSlider(sliderID, defaultSettings) {  
  var slider = jQuery("#" + sliderID);

  slider.extend({
      
  attachSlider: function(settings) {
    // Show the paging and activate its first link.
    $("." + settings.pagingClass).show();
    $("." + settings.pagingClass + " a:first").attr("class",settings.pagingActiveClass);//addClass(settings.pagingActiveClass);
        
    // Get size of the image, how many images there are, then determin the size of the image reel.
    var imageWidth = $("." + settings.windowClass).width();
    var imageSum = $("." + settings.imagereelClass + " " + settings.imagereelChildElement).size();
    var imageReelWidth = imageWidth * imageSum;
      
    // Adjust the image reel to its new size.
    $("." + settings.imagereelClass).css({"width" : imageReelWidth});
        
    // Rotation  and Timing Event.
    rotateSwitch = function() {
      play = setInterval(function() { // Set timer - this will repeat itself every 5 seconds.
        $active = $("." + settings.pagingClass + " a." + settings.pagingActiveClass).next(); // Set timer - this will repeat itself every 5 seconds.
        if ($active.length === 0) { // If paging reaches the end...
          $active = $("." +  settings.pagingClass + " a:first"); // go back to first.
        }
        rotate();
      }, settings.slideTimer); // Timer speed in milliseconds (5 seconds).
    };
     
    // On Hover.
    if (settings.autoSlide) {
      $("." + settings.imagereelClass +" " + settings.imagereelChildElement).hover(function() {
        clearInterval(play); // Stop the rotation.
      }, function() {
        rotateSwitch(); // Resume rotation timer.
      });
    }
      
    //Paging and Slider Function
    rotate = function(settings) {
      var triggerID = $active.attr("rel") - 1; // Get number of times to slide.
      var image_reelPosition = (triggerID * settings.imageWidth) + (settings.imageSpace * triggerID); // Determines the distance the image reel needs to slide.

      $("." + settings.pagingClass + " a").removeClass(settings.pagingActiveClass).attr("class", ""); // Remove all active class.
      $active.addClass(settings.pagingActiveClass).attr("class", settings.pagingActiveClass); // Add active class (the $active is declared in the rotateSwitch function).

      // Slider Animation.
      $("." + settings.imagereelClass).animate({
        left: -image_reelPosition
      }, settings.sildeSpeed);
    };
      
    // On click.
    $("." + settings.pagingClass + " a").click(function() {
      $active = $(this) // Activate the clicked paging.
        if (settings.autoSlide) {
          // Reset timer.
          clearInterval(play); // Stop the rotation.
        }
        
        rotate(settings); // Trigger rotation immediately.
          
        if (settings.autoSlide) {
          rotateSwitch() // Resume rotation timer.
        }
        return false;
      });
      
      if (settings.autoSlide) {
        rotateSwitch(); // Run function on launch.
      }
    }
  });
 
  slider.attachSlider(defaultSettings);
}

//
// infiniteCarousel
//
jQuery.fn.infiniteCarousel = function() {
  
  // hack
  if(window.playsliders == undefined) {
     window.playsliders = [];
  }
    //get slider index
    slider = window.playsliders.length;

  function repeat(str, num) {
    return new Array(num + 1).join(str);
  }

  return this.each(function() {
    var $wrapper = $('> div', this).not("#topSlidePageing").css('overflow', 'hidden'),
        $slider = $wrapper.find('> ul'),
        $items = $slider.find('> li'),
        $single = $items.filter(':first'),
        $pageing = $("#topSlidePageing"),

        singleWidth = $single.outerWidth(), 
        visible = Math.ceil($wrapper.innerWidth() / singleWidth ), // note: doesn't include padding or border
        currentPage = 1,
        pages = Math.ceil($items.length / visible);  

    if (($items.length % visible) != 0) {
      $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
      $items = $slider.find('> li');
    }

    $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
    $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
    $items = $slider.find('> li'); // reselect

    $wrapper.scrollLeft(singleWidth * visible);

    // Rotation and Timing Event.
    function rotateSwitch() {

//HER OPST�R SLIDERPROBLEMET. playslider findes
      window.playsliders[slider] = setInterval(function() { // Set timer - this will repeat itself every 5 seconds.
        if(currentPage >= pages) {
          gotoPage(1);
        }
        else {
          gotoPage(Number(currentPage + 1));
        }
      }, 7000); // Timer speed in milliseconds (5 seconds).
    };



    function gotoPage(page) {
      var dir = page < currentPage ? -1 : 1,
          n = Math.abs(currentPage - page),
          left = singleWidth * dir * visible * n;
            
        $wrapper.filter(':not(:animated)').animate({
        scrollLeft : '+=' + left
      }, 500, function () {
        if (page == 0) {
          $wrapper.scrollLeft(singleWidth * visible * pages);
          page = pages;
        } else if (page > pages) {
          $wrapper.scrollLeft(singleWidth * visible);
          // reset back to start position
          page = 1;
        } 
        
        currentPage = page;

        $("#topSlidePageing a").attr("class", "");

        var links = $("#topSlidePageing a");
        for (var i = 0; i < links.length; i++) {
          if($(links[i]).attr("rel") == currentPage) {
            $(links[i]).attr("class", "topPageActive");
          }
        }
      });   
      
      return false;
    }

    var count = $("#topSlider .infiniteCarouselWrapper ul li").not(".cloned").length;

    for(var i = 0; i < count; i++) {
      $("<a href='#' rel='" + Number(i+1) + "' >&nbsp;&nbsp;</a>").click(function() {
        clearInterval(window.playsliders[slider]); 
        var tmp = gotoPage(Number($(this).attr("rel")));
        rotateSwitch();
        return tmp;
      }).appendTo("#topSlidePageing");
    }

    $("#topSlidePageing a:first").attr("class", "topPageActive");
    rotateSwitch();

    jQuery('a.back', this).click(function () {
      return gotoPage(currentPage - 1);
    });
        
    jQuery('a.forward', this).click(function () {
      return gotoPage(currentPage + 1);
    });
        
    // create a public interface to move to a specific page.
    jQuery(this).bind('goto', function (event, page) {
      gotoPage(page);
    });
    
    jQuery(this).bind('next', function () {
      gotoPage(currentPage + 1);
    });
  });
}

//
// infiniteCarousel news
//
jQuery.fn.infiniteCarouselNews = function() {
  function repeat(str, num) {
    return new Array(num + 1).join(str);
  }

  return this.each(function() {
    var $wrapper = $('> div', this).not("#newsSlidePageing").not(".newsprenext").css('overflow', 'hidden'),
        $slider = $wrapper.find('> ul'),
        $items = $slider.find('> li'),
        $single = $items.filter(':first'),
        $pageing = $("#newsSlidePageing"),

        singleWidth = $single.outerWidth(), 
        visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
        currentPage = 1,
        pages = Math.ceil($items.length / visible);  

    if (($items.length % visible) != 0) {
      $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
      $items = $slider.find('> li');
    }

    $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
    $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
    $items = $slider.find('> li'); // reselect

    $wrapper.scrollLeft(singleWidth * visible);

    function gotoPage(page) {
      var dir = page < currentPage ? -1 : 1,
          n = Math.abs(currentPage - page),
          left = singleWidth * dir * visible * n;
            
        $wrapper.filter(':not(:animated)').animate({
        scrollLeft : '+=' + left
      }, 500, function () {
        if (page == 0) {
          $wrapper.scrollLeft(singleWidth * visible * pages);
          page = pages;
        } else if (page > pages) {
          $wrapper.scrollLeft(singleWidth * visible);
          // reset back to start position
          page = 1;
        } 
        
        currentPage = page;
      });   
      
      return false;
    }

    var count = $("#topSlider .infiniteCarouselWrapper ul li").not(".cloned").length;

    $("#topSlidePageing a:first").attr("class", "topPageActive");

    jQuery('a.back', this).click(function () {
      return gotoPage(currentPage - 1);
    });
        
    jQuery('a.forward', this).click(function () {
      return gotoPage(currentPage + 1);
    });
        
    // create a public interface to move to a specific page.
    jQuery(this).bind('goto', function (event, page) {
      gotoPage(page);
    });
    
    jQuery(this).bind('next', function () {
      gotoPage(currentPage + 1);
    });
  });
}



//
//  Mosaic
//
jQuery(function() {
  jQuery.mosaic = {
    defaults: {
      animation  : "fade",
      speed      : 150,
      overlay    : ".mosaic-overlay",
      backdrop   : ".backdrop"
    }
  };

  jQuery.fn.extend({
    mosaic: function(settings) {
      settings = jQuery.extend({}, jQuery.mosaic.defaults, settings);

      jQuery(settings.overlay).hide();

      jQuery(settings.backdrop).each(function(i, item) {
        jQuery.data(item, 'settings', settings);

        jQuery(item).mouseenter(mouseOver).mouseleave(mouseOut);
        var newstext = jQuery(item).children("a").children(".backdrop").children(".newstext");
        jQuery(newstext).css("bottom", - jQuery(newstext).height());
      });
    }
  });

  function mouseOver() {
    var item = jQuery(this).children(".anchor").children(".backdrop").children(".newstext");

    jQuery(item).clearQueue();

    jQuery(item).css("bottom", -(jQuery(item).height() + 16)).show();
    
    jQuery(item).animate({"bottom":0}, 150);
  }

  function mouseOut() {
    var item = jQuery(this).children(".anchor").children(".backdrop").children(".newstext");

    jQuery(item).clearQueue();

    jQuery(item).animate({"bottom":-(jQuery(item).height() + 16)}, 150, function() {
      jQuery(this).hide();
    });
  }

  /*function settingsMosaic(element) {
    return element.data('settings');
  }*/
});

//
// Watermark
//
jQuery(function() {
    jQuery.waterMark = {
        defaults: {
            waterClass: 'watermark',
            valueAttribute: 'title'
        }
    };

    jQuery.fn.extend({
        waterMark: function(settings) {
            settings = jQuery.extend({}, jQuery.waterMark.defaults, settings);

            return this.each(function(i, item) {
                jQuery.data(item, 'settings', settings);
                jQuery(item.form).submit(jQuery.proxy(submit, item));

                item = jQuery(item);
                if (item.val().length && item.val() != item.attr(settings.valueAttribute))
                    item.removeClass(settings.waterClass);
                else {
                    item.val(item.attr(settings.valueAttribute));
                    item.addClass(settings.waterClass);
                }
            }).focus(focus).blur(blur);
        }
    });

    function submit() {
        var item = jQuery(this);
        if (item.val() == item.attr(settings(item).valueAttribute))
            item.val('');
    }

    function focus() {
        var item = jQuery(this);
        if (item.hasClass(settings(item).waterClass)) {
            item.val('');
            item.removeClass(settings(item).waterClass);
        }
    }

    function blur() {
        var item = jQuery(this);
        if (!item.val().length) {
            item.addClass(settings(item).waterClass);
            item.val(item.attr(settings(item).valueAttribute));
        }
    }

    function settings(element) {
      if(element.data('settings') == null || element.data('settings') == undefined) {
        return {waterClass: 'watermark',valueAttribute: 'title'}
      }
      else {
        return element.data('settings');
      }
    }
});
