$(function() {
 $.homeSlideshowInit();
 $.galleryPageInit();
 $.contactPageInit();
 
 $('a[href^=http://], a[href^=https://], a[href$=.pdf], a[href$=.ppt], a[href$=.doc], a[href$=.dot]').click(function() {
   if (!$(this).attr('target')) {
     $(this).attr('target', '_blank');
   }
 });
});

$.homeSlideshowInit = function() {
  if (!$('#home-slides')[0]) {
    return false;
  }
  
  homeSlideshowImageCount = 4;
  homeSlideshowImageVersionsCount = 5;
  
  for (var i = 0; i < homeSlideshowImageVersionsCount; i++) {
    $.preloadImgs(['i/gallery/home/a-' + (i+1) + '.jpg']);
    $.preloadImgs(['i/gallery/home/b-' + (i+1) + '.jpg']);
    $.preloadImgs(['i/gallery/home/c-' + (i+1) + '.jpg']);
    $.preloadImgs(['i/gallery/home/d-' + (i+1) + '.jpg']);
  }
  
  slideshowPlay = function() {
    var i = Math.ceil(Math.random() * homeSlideshowImageCount);
    var cur = $('#home-slides-' + i).attr('src').substr(0, $('#home-slides-' + i).attr('src').length - 4).substr($('#home-slides-' + i).attr('src').length - 5, 1);
    var j = cur;
    while (j === cur) {
      j = Math.ceil(Math.random() * homeSlideshowImageVersionsCount);
    }
    
    var clone = $('#home-slides-' + i).clone();
    clone.attr('id', 'home-slides-' + i + '-replacement').css('z-index', '50');
    var url = clone.attr('src');
    clone.attr('src', url.substr(0, url.length-5) + j + '.jpg').appendTo('#home-slides');
    $('#home-slides-' + i).animate({opacity: 0}, 750, function() {
      $(this).attr('src', clone.attr('src')).css('opacity', '1');
      $('#home-slides-' + i + '-replacement').remove();
    });
    
    clearTimeout(homeSlideshowTimer);
    homeSlideshowTimer = setTimeout(slideshowPlay, 2750);
  };
  
  homeSlideshowTimer = setTimeout(slideshowPlay, 2750);
};

$.galleryPageInit = function() {
  if (!$('#gallery')[0]) {
    return false;
  }
  
  var navUnitWidth = 75;
  
  $('#gallery .gallery-item:first').addClass('gallery-item-selected').show();
  
  $('#gallery-nav-left, #gallery-nav-right').mouseenter(function() {
    if ($(this).is('#gallery-nav-left')) {
      if ($('#gallery-nav-inner').scrollLeft() === 0) {
        return false;
      }
    } else {
      if ($('#gallery-nav-inner').scrollLeft() === ($('#gallery-nav li').length - 10) * 75) {
        return false;
      }
    }
    $(this).addClass('hover');
  }).mouseleave(function() {
    $(this).removeClass('hover');
  }).click(function() {
    return false;
  });
  
  $('#gallery-nav-left').click(function() {
    if ($('#gallery-nav-inner').scrollLeft() === 0) {
      return false;
    }
    $('#gallery-nav-inner').scrollTo(0, {duration: 500});
    return false;
  }).addClass('disabled');
  
  $('#gallery-nav-right').click(function() {
    if ($('#gallery-nav-inner').scrollLeft() === ($('#gallery-nav li').length - 10) * 75) {
      return false;
    }
    $('#gallery-nav-inner').scrollTo('max', {duration: 500});
    return false;
  });
  
  $('#gallery-nav-next a').click(function() {
    var selected = $('#gallery-nav li.selected').eq(0);
    var index = $('#gallery-nav li').index(selected);
    if (index + 1 == $('#gallery-nav li').length) {
      return false;
    }
    
    $('#gallery-nav li').eq(index + 1).click();
    if (index == 9) {
      $('#gallery-nav-right').click();
    }
    return false;
  });
  
  $('#gallery-nav-back a').click(function() {
    var selected = $('#gallery-nav li.selected').eq(0);
    var index = $('#gallery-nav li').index(selected);
    if (index === 0) {
      return false;
    }
    
    $('#gallery-nav li').eq(index - 1).click();
    window.console.log(index);
    if (index == 8) {
      $('#gallery-nav-left').click();
    }
    return false;
  });
  
  $('#gallery-nav ul').width(navUnitWidth * $('#gallery-nav li').length + "px");
  
  $('#gallery-nav li').mouseenter(function() {
    $(this).addClass('hover');
  }).mouseleave(function() {
    $(this).removeClass('hover');
  }).click(function() {
    if ($(this).hasClass('selected')) {
      return false;
    }
    $('#gallery-nav li, #gallery-nav-circles li').removeClass('selected');
    $(this).addClass('selected');
    $('#gallery-nav-circles li').eq($('#gallery-nav li').index(this)).addClass('selected');
    $('#gallery .gallery-item').eq($('#gallery-nav li').index(this)).addClass('gallery-item-replacement');
    $('#gallery .gallery-item-selected').fadeOut(400, function() {
      $(this).removeClass('gallery-item-selected');
    });
    $('#gallery .gallery-item-replacement').removeClass('gallery-item-replacement').addClass('gallery-item-selected').fadeIn(1000);
    return false;
  });
};

$.contactPageInit = function() {
  if (!$('#contact')[0]) {
    return false;
  }
    
  $('input.default, textarea.default').actsAsDefault();
  
  $('#contact p.button a').click(function() {
    $('#contact form').submit();
    return false;
  });
  
  $('#contact form').submit(function() {
    var formValid = true;
    
    $('div.required input.text, div.required textarea').each(function() {
      if ($(this).hasClass('default') || $.trim($(this).val()).length < 1) {
        $(this).parent().addClass('error');
        formValid = false;
      }
      
      if ($(this).parent().hasClass('email') && !(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/).test($.trim($(this).val()))) {
        $(this).parent().addClass('error');
        formValid = false;
      }
    });
    
    if (!formValid) {
      if (!$('p.error')[0]) {
        $('#contact div.submit').append('<p class="error"><strong>Please fill in all the required fields above.</strong></p>');
      }
      
    }
    
    return formValid;
  });
};

$.preloadImgs = function(imgsToLoad) {
  for (var i = 0; i < imgsToLoad.length; i++) {
    $('<img />').css({overflow: 'hidden', visibility: 'hidden', height: 0, width: 0}).appendTo('body').attr('src', imgsToLoad[i]).load(function() {
      $(this).remove();
    });
  }
};

$.fn.actsAsDefault = function() {
  $(this).each(function() {
    var defaultValue = $(this).val();
    $(this).focus(function() {
      if ($(this).val() === defaultValue) {
        $(this).removeClass('default').val('');
      }
    }).blur(function() {
      if ($.trim($(this).val()) === '') {
        $(this).addClass('default').val(defaultValue);
      }
    });
  });
};
