(function($) {
  
  // cufon font replacement
  Cufon.replace('h2');

  //DD_belatedPNG fix
  if (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1){
    var toFix = [];
    toFix.push('.nav-graphic');
    toFix.push('#search-toggle');
    toFix.push('#nav li li a');
    toFix.push('#tag');
    toFix.push('#ss-next');
    toFix.push('#ss-prev');
    toFix.push('#feat-member h4');
    toFix.push('#nav li li li li');
    toFix.push('#nav li li li ul');
    toFix.push('.blog #mast p a');
    toFix.push('.blog #main');
    toFix.push('.blog #main-body');
    DD_belatedPNG.fix(toFix.join(', '));
  }


  $(function() {
    //= = = = = = = = = = = = =
    // Logic for side navigation
    if (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1){
      $('#nav').fadeIn(150);
    }
    
    $('.cur-open .nav-toggle').addClass('open');
    
    $('.nav-toggle').click(function() {
      if ($(this).hasClass('open')) {
        $('.nav-toggle.open').removeClass('open');
        $(this).next('ul').slideUp(500);
      } else {
        $('#nav > li > ul > li > ul').slideUp(500);
        $('.nav-toggle.open').removeClass('open');
        $(this).next('ul').slideDown(500);
        $(this).addClass('open');
      }
    });

    
    //= = = = = = = = = = = = =
    // init colorbox
    $("a.colorbox, a[rel='photogroup']").colorbox({
      transition:   "elastic",
      maxWidth:     "90%",
      maxHeight:    "90%"
    });
    

    //= = = = = = = = = = = = = 
    // Show/hide search
    $('#search-toggle').click(function() {
      $('#search-form').toggle();
      $(this).parent().toggleClass('show-search');
      return false;
    });
    // $('#wrapper-main').click(function(e) {
    //   console.log($(this).attr('id'));
    //   $('#search-form').hide();
    //   $('#search').removeClass('show-search');
    // });


    //= = = = = = = = = = = = =
    // position full sized thumbnails based on width & height using negative margin
    // this is used mainly on the portfolio page
    $('#proj-thumbs li img.thumb-full').each(function() {
      var h = $(this).height();
      var w = $(this).width();
      var offsetMarginTop = (h/2)+3;
      var offsetMarginLeft = (w/2);
      $(this).css({ marginTop: -offsetMarginTop, marginLeft: -offsetMarginLeft });
    });
    
    
    //= = = = = = = = = = = = =
    //Homepage Feature
    $("#home-feature").multiSlideshow({
      startAt: "random"
    });


    //= = = = = = = = = = = = =
    //Newsletter signup validation
    $("form#newsletter-signup").submit(function() {
      var email        = $("input[name=email]", this).val(),
          emailFilter  = /^.+@.+\..+$/,
          illegalChars = /[\(\)\<\>\,\;\:\\\/\"\[\]]/;

      if (illegalChars.test(email) || !emailFilter.test(email)) {
        alert("Please enter a valid email address.");
        return false;
      }
    });
    
  }); //END doc ready

  ////
  // Slideshow plugin
  $.fn.multiSlideshow = function(options) {
    options = $.extend({
      delay:      4000,
      fadeLength: 500,
      startAt:    0
    }, options);

    return this.each(function() {
      var multi      = $(this),
          slideshows = $("#feat-imgs .ss", this),
          legend     = $("#img-desc", this),
          markers    = $("#ss-pager", legend),
          currentShow,
          currentSlide;

      // slideshow events
      multi
        // previous slide
        .bind("multi:prev", function() {
          if (currentSlide.prev().size() == 0) {
            multi.trigger("multi:prev:show");
          } else {
            multi.trigger("multi:goto:slide", currentSlide.prev());
          }
          return false;
        })
        // previous slideshow
        .bind("multi:prev:show", function() {
          var prevShow = currentShow.prev(".ss").size() > 0 ? currentShow.prev(".ss") : slideshows.last();
          multi.trigger("multi:goto:show", [prevShow, prevShow.find("img").last()]);
          return false;
        })
        // next slide
        .bind("multi:next", function() {
          if (currentSlide.next().size() == 0) {
            multi.trigger("multi:next:show");
          } else {
            multi.trigger("multi:goto:slide", currentSlide.next());
          }
          return false;
        })
        // next slideshow
        .bind("multi:next:show", function() {
            var nextShow = currentShow.next().size() > 0 ? currentShow.next() : slideshows.first();
          multi.trigger("multi:goto:show", nextShow);
          return false;
        })
        // goto a specific show
        .bind("multi:goto:show", function(e, show, slide) {
          // new activated tab 
          currentShow.data("infoCol").removeClass("cur");
          $(show).data("infoCol").addClass("cur");
          // set the new show & slide
          currentShow = $(show);
          $(this)
            .trigger("multi:create:markers", currentShow.data("size"))
            .trigger("multi:goto:slide", slide || currentShow.find("img:first-child"));
          return false;
        })
        // goto a specific slide
        .bind("multi:goto:slide", function(e, slide) {
          currentSlide.fadeOut(options.fadeLength);
          currentSlide = $(slide).fadeIn(options.fadeLength);
          $(this)
            .trigger("multi:update:marker", currentSlide.data("index"))
            .trigger("multi:update:legend", [currentSlide.attr("data-title"), currentSlide.attr("data-location")]);
          return false;
        })
        // update slide info
        .bind("multi:update:legend", function(e, title, loc) {
          legend.find(".title").text(title);
          legend.find(".loc").text(loc);
          return false;
        })
        // update the slide marker
        .bind("multi:update:marker", function(e, index) {
          $("span", markers)
            .removeClass("activeSlide")
            .eq(index)
            .addClass("activeSlide");
          return false;
        })
        // create the slide markers
        .bind("multi:create:markers", function(e, size) {
          markers.empty();
          for (var i = 0; i < size; i++) {
            markers.append("<span />");
          }
          return false;
        });

      // click events
      $("#ss-prev", this).click(function() {
        clearInterval(multi.data("timer"));
        multi.trigger("multi:prev");
        return false;
      });
      $("#ss-next", this).click(function() {
        clearInterval(multi.data("timer"));
        multi.trigger("multi:next");
        return false;
      });
      // $(".col", this).click(function(e) {
      //   if ($(e.target).is("a")) return;
      // 
      //   clearInterval(multi.data("timer"));
      //   multi.trigger("multi:goto:show", $(this).data("slideshow"));
      //   return false;
      // });
      $('.col').click(function() {
        window.location = $(this).children('p').children('.more').attr('href');
      });


      ////
      // Setup
      slideshows.each(function() {
        $(this).data("size", $(this).find("img").size());
        $(this).find("img").each(function(i) {
          $(this).data("index", i);
        });
      });

      // store references between slideshow <-> col
      $(".three-col .col").each(function(i) {
        slideshows.eq(i).data("infoCol", $(this));
        $(this).data("slideshow", slideshows.eq(i));
      });

      // hide all slides
      slideshows.css("top", 0).find("img").hide();

      // start in the right place
      if (options.startAt == "random") {
        var start = parseInt(Math.random() * slideshows.size());
      } else {
        var start = options.startAt;
      }
      currentShow = slideshows.eq(start);
      currentSlide = currentShow.find("img:first-child");
      multi.trigger("multi:goto:show", currentShow);

      // set the timer
      multi.data("timer", setInterval(function() {
        multi.trigger("multi:next");
      }, options.delay));
    });
  };
})(jQuery);

