$(document).ready(function(){
	global.init()
	pagination.init();
	photo_nav.init();
});


// !GLOBAL
var global = {};

global.init = function() {
	if ($.browser.safari) {
		$('body').addClass('webkit');
		global.browser = "webkit";
	}
	
	// FIXME: Have to sniff for Chrome (I know), but it returns true when checking for backfaceVisibility, but doesn't actually support it
	// Naughty Chrome!
	global.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
	
	global.backface = getStyleProperty('backfaceVisibility');
	
	if (!global.chrome && global.backface) {
		$('body').addClass('backfaceVisibility');
	}
	
	// Add transition class to body if they're supported
	global.transitions = getStyleProperty('transition');
	if (global.transitions) { $('body').addClass('transitions'); }
	
	$(".news .post img, .photography .post").not(".callout").before($("<div>").attr('class', 'img_overlay'));
	
	// Check if border image CSS property is supported.
	if (typeof getStyleProperty('borderImage') == 'string') {
		$('.design').addClass('border-image');
	}
};

// !PAGINATION
var pagination = {};

pagination.init = function() {
	pagination.wrapper = $("#pagination");
	pagination.current = 1;
	pagination.total = 1;
	pagination.button = pagination.wrapper.find("li.next a");

	// Remove any previous page links
	pagination.wrapper.find("li:not(.next)").remove();
	
	if ($(pagination.button).length) {
		pagination.button.text("Load More Posts");
		pagination.button.parent().addClass("ajax");
	} else {
		pagination.wrapper.remove();
	}
	
	pagination.button.click(function(e) {
		$.ajax({
			url: $(this).attr("href") + '.json',
			dataType: "json",
			beforeSend: function() {
				pagination.button.html("Loading...")
			},
			success: function(request){
				// Set pagination vars
				pagination.current = request.response.pagination.current;
				pagination.next = pagination.current +1;
				pagination.total = request.response.pagination.total;
				
				// Create HTML element for next page results
				div = $(innerShiv("<div>" + request.response.html + "</div>",false)).css('opacity', 0).attr("id", "page"+pagination.current);
				div.find(".news .post img").before($("<div>").attr('class', 'img_overlay'));
				// Insert new content
				$(pagination.wrapper).before(div);
				
				// Show new content
				$(div).animate({'opacity' : 1}, 1000);
				
				// Do we have any more pages to display?
				if (pagination.next <= pagination.total) {
					pagination.button.html("Load More Posts").attr({"href" : "/blog/page/"+pagination.next});
				} else {
					pagination.wrapper.remove();
				}
				
				// Check if border image CSS property is supported.
				if (typeof getStyleProperty('borderImage') == 'string') {
					div.find('.design').addClass('border-image');
				}
			}
		});
		e.preventDefault();
	});
};

// !PHOTO ALBUM NAVIGATION
var photo_nav = {};

photo_nav.init = function() {
	// create the nav
	var photo_navigation = $('<nav>').attr('class', 'photo-nav').html("<ul></ul>").appendTo('.photography article');
	var photo_list = $(".photography article .post ul");
	
	photo_list.find('li').each(function(i, value) {
		// add id to li
		i++;
		$(this).attr('id', 'image-'+i);
		
		// create link and li for nav
		var link = $('<a>').attr('href', '#image-'+i);
		$("<li>").html(link).appendTo(photo_navigation.find("ul"));
		
		i++;
	});
	
	photo_navigation.find('li:first-child').addClass('current');
	var current = photo_navigation.find('.current');
	
	// Key press events
	$(document).keydown(function(e){
		if (event.target.nodeName != "INPUT" && event.target.nodeName != "TEXTAREA") {
			switch(e.keyCode) {
				case 37: //left arrow
					moveImages(photo_navigation.find('.current').prev().find('a'));
					break;
				case 39: //right arrow
					moveImages(photo_navigation.find('.current').next().find('a'));
					break
			}
		}
	});
	
	photo_navigation.find('a').each(function() {
		$(this).click(function(e) {
			e.preventDefault();
			moveImages($(this))
		});
	});
	
	function moveImages(link) {
		var target = link.attr('href');
		
		// there is either a next / prev image
		if (target) {
			photo_navigation.find('.current').removeClass('current');
			link.parent().addClass('current');
			var target_pos = $(target).position();
			
			if ($('body').hasClass('transitions')) {
				photo_list.css('margin-left', '-'+target_pos.left+'px');
			} else {
				photo_list.animate({
					marginLeft: '-'+target_pos.left
				}, 500);
			}
		}
	}
};

// !CHECK CSS SUPPORT
var getStyleProperty = (function(){
 
  var prefixes = ['Moz', 'Webkit', 'Khtml', 'O', 'Ms'];
  var _cache = { };
 
  function getStyleProperty(propName, element) {
    element = element || document.documentElement;
    var style = element.style,
        prefixed,
        uPropName;
 
    // check cache only when no element is given
    if (arguments.length == 1 && typeof _cache[propName] == 'string') {
      return _cache[propName];
    }
    // test standard property first
    if (typeof style[propName] == 'string') {
      return (_cache[propName] = propName);
    }
 
    // capitalize
    uPropName = propName.charAt(0).toUpperCase() + propName.slice(1);
 
    // test vendor specific properties
    for (var i=0, l=prefixes.length; i<l; i++) {
      prefixed = prefixes[i] + uPropName;
      if (typeof style[prefixed] == 'string') {
        return (_cache[propName] = prefixed);
      }
    }
  }
 
  return getStyleProperty;
})();

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-241775-1']);
_gaq.push(['_setDomainName', '.realmacsoftware.com']);
_gaq.push(['_trackPageview']);
(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
 
 // !INNERSHIV
 // http://jdbartlett.github.com/innershiv
window.innerShiv = (function() {
	var d, r;
	
	return function(h, u) {
		if (!d) {
			d = document.createElement('div');
			r = document.createDocumentFragment();
			/*@cc_on d.style.display = 'none';@*/
		}
		
		var e = d.cloneNode(true);
		/*@cc_on document.body.appendChild(e);@*/
		e.innerHTML = h;
		/*@cc_on document.body.removeChild(e);@*/
		
		if (u === false) return e.childNodes;
		
		var f = r.cloneNode(true), i = e.childNodes.length;
		while (i--) f.appendChild(e.firstChild);
		
		return f;
	}
}());
