$(document).ready(function(){

  var curr_slide = 1;
  var slide_width = $("#carousel_inner li").width();
  var slide_count = $("#carousel_inner li").size();
  
  $("#carousel_inner").css("position","absolute");
  $("#carousel_inner").css("top","0px");
  $("#carousel_inner").css("left","0px");
  var total_width = slide_width * slide_count;
  $("#carousel_inner").css("width",total_width);
  
  $("#carousel_inner li").css("float","left");
  $("#curr_slide #curr_1").addClass("here");
  $(".photos").each(function(){
    $(this).children(".thumbs").children("a:first").addClass("here");
  });
  
  $("#carousel_inner").css({"left" : "-"+slide_width+"px"});
  $("#carousel_inner li:first").before($("#carousel_inner li:last"));
  
  prepControls();
  prepCurrSlideNav(slide_count);
  
  $(".next").click(function(){
    curr_slide++;
    if (curr_slide == slide_count + 1){
      curr_slide = 1;
    }
    $("#curr_slide a").removeClass("here");
    $("#curr_slide #curr_"+curr_slide).addClass("here");
    moveSlidesLeft(1,slide_width,200);
    resetSlides();
  });
  
  $(".prev").click(function(){
    curr_slide--;
    if (curr_slide == 0){
      curr_slide = slide_count;
    }
    $("#curr_slide a").removeClass("here");
    $("#curr_slide #curr_"+curr_slide).addClass("here");
    moveSlidesRight(1,slide_width,200,0);
    resetSlides();
  });
  
  $(".thumbs a").click(function(event){
    event.preventDefault();
    $(this).siblings().removeClass("here");
    $(this).addClass("here");
    var link = $(this).attr("href");
    $(this).parent().siblings(".big").attr("src",link);
  });
  
  $("#curr_slide a").click(function(event){
    event.preventDefault();
    var which_one = $(this).attr("id").split("_")[1];
    var slide_diff = which_one - curr_slide;
    curr_slide = curr_slide + slide_diff;
    if (curr_slide > slide_count) {
      curr_slide = slide_count - curr_slide;
    }
    
    if (slide_diff == 0) {
      null;
    } else if (slide_diff > 0) {
      moveSlidesLeft(slide_diff,slide_width,100);
    } else {
      moveSlidesRight(slide_diff,slide_width,100,1);
    }
    $("#curr_slide a").removeClass("here");
    $("#curr_slide #curr_"+curr_slide).addClass("here");
    resetSlides();
  });
  
});


// FUNCTIONS

function prepControls() {
  $("#carousel").prepend("<p id='controls'></p>");
  $("#controls").append("<span class='prev'>&laquo; Left</span>");
  $("#controls").append("<span class='next'>Right &raquo;</span>");
}

function prepCurrSlideNav(slide_count) {
  $("#carousel_inner").after("<div id='curr_slide_wrap'></div>");
  $("#curr_slide_wrap").append("<ul id='curr_slide'></ul>");
  for (var i=1; i<slide_count+1; i++) {
    $("#curr_slide").append("<li></li>");
    $("#curr_slide li:last").append("<a></a>");
    $("#curr_slide a:last").attr("id","curr_"+i);
    $("#curr_slide a:last").attr("href","#");
  }
  $("#curr_slide a:first").addClass("here");
  var li_width = $("#curr_slide li").width() + 5; // 5 extra for each li's right margin of 5px
  var how_many_li = $("#curr_slide li").size();
  var li_width_total = li_width * how_many_li;
  $("#curr_slide").css("width",li_width_total);
}

function moveSlidesLeft(how_many,slide_width,speed) {
  for (var i=0; i<how_many; i++){
    $("#carousel_inner").animate({"left" : "-="+slide_width+"px"},speed,function(){
      $("#carousel_inner li:last").after($("#carousel_inner li:first"));
      $("#carousel_inner").css({"left" : "-"+slide_width+"px"});
    });
  }
}

function moveSlidesRight(how_many,slide_width,speed,make_negative) {
  if (make_negative == 1) {
    var how_many = how_many * -1; // change negative number to positive
  }
  for (var i=0; i<how_many; i++){
    $("#carousel_inner").animate({"left" : "+="+slide_width+"px"},speed,function(){
      $("#carousel_inner li:first").before($("#carousel_inner li:last"));
      $("#carousel_inner").css({"left" : "-"+slide_width+"px"});
    });
  }
}

function resetSlides() {
  $(".photos").each(function(){
    var thumb_src = $(this).children(".thumbs").children("a:first").attr("href");
    $(this).children(".big").attr("src",thumb_src);
    $(this).children(".thumbs").children("a").removeClass("here");
    $(this).children(".thumbs").children("a:first").addClass("here");
  });
}

