// Adjust viewport for iOS devices when rotating
if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i)) {
	var viewportmeta = document.querySelectorAll('meta[name="viewport"]')[0];
	if (viewportmeta) {
		viewportmeta.content = 'width=device-width, minimum-scale=1.0, maximum-scale=1.0';
		document.body.addEventListener('gesturestart', function() {
			viewportmeta.content = 'width=device-width, minimum-scale=0.25, maximum-scale=1.6';
		}, false);
	}
}

if (navigator.userAgent.match(/MSIE 7/i)) {
	(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
}

$(function() {

	//open off-site links in new window
	$('a[href^="http://"]').attr("target", "_blank");
	$('a[href^="https://"]').attr("target", "_blank");
	$('a[href*=".pdf"]').attr("target", "_blank");

	//adjustments for IE7
	if($('html').hasClass('ie7')) {

		//fixing submit buttons for IE7
		$('input.search[type="submit"]').attr('value', '');
	}

	$('header.global nav.main-nav > ul > li.selected').next().addClass('adjacent');

	$('aside section h1').click(function() {
  		$(this).next().slideToggle('slow', function() {
    		// Animation complete.
  		});
  		$(this).find('span.toggle').toggleClass('closed');
	});

	//read more
	$('article a.more').click(function() {
		$(this).hide();
		$(this).parent().find('div.more').show();
	});

	//industry focus charts
	$('ul.chart-list li a').click(function(e) {
		e.preventDefault();

		var chartID, chart, popupVisible = false;

		if (!($(this).hasClass('deactivated'))) {
			$(this).parent().siblings().find('a').addClass('deactivated');

			// get chart id
			chartID = $(this).attr('href');
			chart = 'section' + chartID;

			// show full chart popup
			$(chart).removeClass('hidden');
			popupVisible = true;

			// clicking on 'x' closes popup
			$(chart).find('span.close').click(function() {
				closePopup();
			});

			setTimeout(outsideClick, 500);
		}

		function closePopup() {
			$(chart).addClass('hidden');
			popupVisible = false;
			$('ul.chart-list li a').removeClass('deactivated');
		}

		function outsideClick() {
			$('div.container').click(function() {
				if (popupVisible) closePopup();
			});

			$(chart).click(function(e) {
				e.stopPropagation();
			});
		}
	});


	//transactions page
	$('.transactions form.filter input').change(onFilterChanged);
	
	// set page to 1
	$(".transactions form.filter input[name=page]").val("1");
		
	if($('body').hasClass('transactions')) {
		$(window).bind('hashchange', onHashChanged);
	}

	function onHashChanged(evt) {
		evt.preventDefault();	
		syncFiltersToHash();
		loadTransactionFilter();
	}
	
	function syncFiltersToHash() {
		var hashParts = '';
		if(location.hash) hashParts = location.hash.substr(1).split("&");
		
		// clear all filters
		$('.transactions form.filter input').attr('checked', false);
		$(".transactions form.filter input[name=page]").val(1); // have to assume page 1 until overwritten below
		
		if(location.hash == '#!') return;		
		
		for (var j = 0; j < hashParts.length; j++) {
			subsetParts = hashParts[j].split("=");
			subsetValues = subsetParts[1].split(",");
			for (var k = 0; k < subsetValues.length; k++) {
				if (subsetParts[0] == "v") {
					$(".transactions form.filter input[name=chk-vertical_expertise-" + subsetValues[k] + "]").attr({checked:"checked"});
				} else if (subsetParts[0] == "i") {
					$(".transactions form.filter input[name=chk-industry_sectors-" + subsetValues[k] + "]").attr({checked:"checked"});
				} else if (subsetParts[0] == "t") {
					$(".transactions form.filter input[name=chk-transaction_types-" + subsetValues[k] + "]").attr({checked:"checked"});
				} else if (subsetParts[0] == "p") {
					$(".transactions form.filter input[name=page]").val(subsetValues[k]);
				}
			}
		}
	}
	
	function onFilterChanged(e) {
		if(typeof(e) == 'object' && e.type == 'change') { 
			$(".transactions form.filter input[name=page]").val(1);
		}
		
		//build hash
		var hash = "";
		var hashParts = new Array();
		var v = new Array();
		var i = new Array();
		var t = new Array();
		var p = $(".transactions form.filter input[name=page]").val();
		
		$(".transactions form.filter input[type=checkbox]:checked").each(function(){
			nameParts = $(this).attr('name').split('-');
			if (nameParts[1].substr(0,1) == "v") {
				v[v.length] = nameParts[2];
			} else if (nameParts[1].substr(0,1) == "i") {
				i[i.length] = nameParts[2];
			} else if (nameParts[1].substr(0,1) == "t") {
				t[t.length] = nameParts[2];
			}
		});		
		
		if (p != 1) hashParts[hashParts.length] = "p=" + p;
		if (v.length) hashParts[hashParts.length] = "v=" + v.join(",");
		if (i.length) hashParts[hashParts.length] = "i=" + i.join(",");
		if (t.length) hashParts[hashParts.length] = "t=" + t.join(",");
		if (hashParts.length) hash = "#" + hashParts.join("&"); else hash = '#!'; // using #! to prevent page scroll
		location.hash = hash;
	}

	//load hash
	if (location.hash) {
		syncFiltersToHash();
		loadTransactionFilter();
	}

	function loadTransactionFilter() {
		/*
		$("div#transaction-container").addClass('spinner').html("");
		var spinner = new Spinner({
			lines: 10, // The number of lines to draw
			length: 9, // The length of each line
			width: 4, // The line thickness
			radius: 10, // The radius of the inner circle
			color: "#bbb", // #rbg or #rrggbb
			speed: 1, // Rounds per second
			trail: 50, // Afterglow percentage
			shadow: false // Whether to render a shadow
		}).spin();
		document.getElementById("transaction-container").appendChild(spinner.el);
		*/
		$.ajax({
			url  : '/ajax/transactions.php',
			type : 'POST',
			data : $(".transactions form.filter").serialize(),
			success : function(data) {
				$('div#transaction-container').html('<div class="wrapper clearfix">' + data + '</div>');
				syncFiltersToHash();
			}
		});
	}

	$('div.pagination a').live('click', function(e){
		var page = $(".transactions form.filter input[name=page]").val() - 0;
		page = ($(this).hasClass('reverse')) ? page - 1 : page + 1;
		$(".transactions form.filter input[name=page]").val(page);
		onFilterChanged();
		loadTransactionFilter();
	});

	//glossary
	var definitions = $('ul.definition-list').html(), definitionID;

	$('ul.definition-list').remove();
	$('aside.glossary > .wrapper').prepend('<ul class="definition-list">' + definitions + '</ul>');
	$('aside.glossary > .wrapper').prepend('<span class="close">&times;</span>');
	$('ul.definition-list li').hide();
	$('aside.glossary span.close').hide();

	$('aside.glossary nav.content-nav ul li a').click(function(e) {
		e.preventDefault();

		definitionID = $(this).attr('href');
		var visibles = $(definitionID).parent().siblings(':visible');

		if ($(visibles).length > 0) {
			toggleClose('hide');
			$(visibles).slideUp('normal', function() {
				$(definitionID).parent().slideDown();
				toggleClose('show');
			});
		} else {
			$(definitionID).parent().slideDown();
			toggleClose('show');
		}
	});

	$('aside.glossary span.close').click(function() {
		toggleClose('hide');
		$(definitionID).parent().slideUp();

	});

	function toggleClose(toggle) {
		if(toggle == 'show') {
			$('aside.glossary span.close').fadeIn();
		} else {
			$('aside.glossary span.close').fadeOut();
		}
	}

	//firm news
	$("form.filter.dropdown select[name=year]").change(function(){
		location.href = "./?year=" + $(this).val();
	});
	
	Backgrounder.ready();
});

var Backgrounder = (function(){
    var load_count = 0;
    var current_background_index = 0;
    var backgrounds = [];
    var last_used_background = '';
    var time_fade_ms = 2000;
    var time_between_transitions_ms = 10000;
    var dom_ready = false;
    
    function set_backgrounds($backgrounds) {
    	log("set_backgrounds");
    	// pass a list of backgrounds and starts the cycle
		backgrounds = $backgrounds;
		if(backgrounds.length == 0) return;
		if(dom_ready) backgrounds_load();
	}
	
	function ready() {
		dom_ready = true;
		if(backgrounds.length > 0) backgrounds_load();		
	}
	
	function backgrounds_load() {
		for(var i = 0; i < backgrounds.length; i++) {
			$('body').append('<img src="'+backgrounds[i].src+'" id="background_'+i+'" style="display:none;" />');
			$('img#background_' + i).load(on_background_loaded);
		}
	}
	
    function on_background_loaded(evt) {
    	log("on_background_loaded");
		load_count++;
		$(evt.target).remove();
		if(load_count == backgrounds.length) {
			log("on_background_loaded: loaded");
			// background images are cached now
			setTimeout('Backgrounder.start()', time_between_transitions_ms);
		}
    }
    
    function next_background_index() {
    	log("next_background_index");
    	if(current_background_index + 1 >= backgrounds.length) 
    		return 0;
    	else
    		return current_background_index + 1;
    }
    
    function force_resize() {
		var docHeight = Math.max($(document).height(), $(window).height());
		var docWidth = Math.max($(document).width(), $(window).width());
		
		log('doc: ' + docWidth + 'x' + docHeight);
		log('win: ' + $(window).width() + 'x' + $(window).height());
		
		//$('div.background-top').css('width', docWidth + 'px');
		$('div.background-top').css('height', docHeight + 'px');
		
		//$('div.background-bottom').css('width', docWidth + 'px');
		$('div.background-bottom').css('height', docHeight + 'px');
    }
    
    function start() {
    	// are we on the home page?
    	log("start");
    	if(!$('body').hasClass('home')) return;
    	force_resize();
    	$(window).resize(force_resize);	
    	next_background();

		$('body.home > div.container').css('background-image','none');
		$('.ie body.home > div.container').css('filter','');
		$('.ie body.home > div.container').css('-ms-filter','');
	}
	
	function set_background_divs() {
		if($('html').hasClass("ie7") || $('html').hasClass("ie8")) {
			log("set_background_divs: ie");
			$('div.background-top').css('filter', 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + backgrounds[current_background_index].src + '", sizingMethod="scale")');
			$('div.background-top').css('-ms-filter', '"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+ backgrounds[current_background_index].src +'\', sizingMethod=\'scale\');"');	
	
			$('div.background-bottom').css('filter', 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + backgrounds[next_background_index()].src + '", sizingMethod="scale")');
			$('div.background-bottom').css('-ms-filter', '"progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+ backgrounds[next_background_index()].src +'\', sizingMethod=\'scale\');"');
		} else {
			$('div.background-top').css('background-image', 'url(' + backgrounds[current_background_index].src + ')');
			$('div.background-bottom').css('background-image', 'url(' + backgrounds[next_background_index()].src + ')');
		}
	}
	
	function next_background() {
		log("next_background");	
		set_background_divs();
		$('div.background-top').show();
		$('div.background-top').fadeOut(time_fade_ms);		
		setTimeout('Backgrounder.next_background()', time_between_transitions_ms);
		setTimeout('Backgrounder.set_cookie()', time_fade_ms * 0.5);		
		current_background_index = next_background_index();	
	}
	
	function log(msg) {
		try {
			console.log(msg);
		} catch(e) { }
	}
	
	function set_cookie() {
		document.cookie = 'last_background=' + escape(backgrounds[current_background_index].src) + ';path=/;domain=.'+window.location.hostname+';';
	}
	
	function set_last_used_background($last_used_background) {
		if(backgrounds.length == 0) {
			throw 'use set_backgrounds first';
			return;
		}
		
		last_used_background = $last_used_background;
		
		for(var i = 0; i < backgrounds.length; i++) {
			if(backgrounds[i].src == $.trim(last_used_background)) {
				current_background_index = i;
				return;
			}
		}
	}
        
    return {
    	// public methods
    	set_backgrounds:set_backgrounds,
    	set_last_used_background:set_last_used_background,
    	next_background: next_background,
    	start: start,
    	set_cookie: set_cookie,
    	ready: ready
    };
}());
