/* Author: Westbrook Johnson

*/

var chart,
	dataSet = new Array(),
	colorSet = new Array('#98cc6a','#E86441','#ffcc00','#98cc6a','#E86441','#ffcc00','#98cc6a','#E86441','#ffcc00','#98cc6a','#E86441','#ffcc00','#98cc6a','#E86441','#ffcc00'),
	testJSON = {},
	dataTrail=location.hash;

$(document).ready(function() {
	if(dataTrail==''){
		dataTrail = $('.graph').attr('data-data');
	} else {
		dataTrail = ltrim(dataTrail,'#');
	}
	$("h1.home").lettering();
	
	$('footer article').children('a').hover(function(){
		$(this).siblings().find('a').css('text-decoration','underline');
	},function(){
		$(this).siblings().find('a').css('text-decoration','none');
	})
	
	$('.results article').hover(function(){
		$(this).find('.read-more').css('text-decoration','underline');
	},function(){
		$(this).find('.read-more').css('text-decoration','none');
	})
	
	$('.results article').click(function(e){
		e.preventDefault();
		window.location=$(this).find('.read-more').attr('href');
	})
	
	$(".sort dt a").click(function(e){
		e.preventDefault();
		$(this).parent().nextUntil('dt').toggle();
	});
	
	$('#container').css('top','0');
	$('header .damn a').click(function(e){
		e.preventDefault();
		var contTop = parseFloat($('#container').css('top')),
			dest = 0;
		if(contTop==0){
			dest = $('.damn.holder').outerHeight();
		}
		$('#container').animate({'top': dest},750);
	})
	$('.damn .close').click(function(e){
		e.preventDefault();
		$('#container').animate({'top':0},750);
	})
	$('.shots a').click(function(e){
		e.preventDefault();
		$('.shots a').removeClass('active');
		$(this).addClass('active');
		$('.shots img:eq(0)').attr('src',$(this).find('img').attr('data-full'));
	})
	
	$('.breakdown dl:not(.percents) dt:not(.main)').live('click',function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			focusBreakdown($(this),'dt');		
		}
	})
	
	$('.breakdown dl:not(.percents) dd:not(.main)').live('click',function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			focusBreakdown($(this),'dd');		
		}
	})
	
	$('.breakdown dl:not(.percents) .main').click(function(e){
		e.preventDefault();
		$('.breakdown dl:not(.percents) dd,.breakdown dl:not(.percents) dt').removeClass('current');
		$('.detail').removeClass('detail-in detail-out');
		resetPercents();
	})
	
	$('.detail p a').click(function(e){
		e.preventDefault();
		$('.detail p a').removeClass('current');
		$(this).addClass('current');
	})
	
	$('.lbs').click(function(e){
		focusBreakdown($('.breakdown dd.current'),'dd','no-chart');
	})
	
	$('.percent').click(function(){
		var total = 0,
			subCats = $('.percents dd'),
			subCount = subCats.length;
		while(subCount>0){	
			subCount--;
			total+=parseFloat($(subCats[subCount]).find('span').html());
		}
		subCount = subCats.length;
		while(subCount>0){
			subCount--;
			$(subCats[subCount]).html("<span>"+Math.round(parseFloat($(subCats[subCount]).find('span').html()) / total*100)+"%</span>");
		}
	})
	
	
	$('.percents dd').live('click',function(e){
		e.preventDefault();
		focusPercents($(this));
		chart.series[0].data[$('.percents dd').index($(this))].select();
	})
	$('.percents dt').live('click',function(e){
		e.preventDefault();
		focusPercents($(this));
		chart.series[0].data[$('.percents dt').index($(this))].select();
	})
	if($('.graph').length){
		getData();
	}
	$('.yearly').click(function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			dataTrail = ltrim(testJSON.main_chart.yearly_url,'/data?');
			getData('yearly');
			$('.timeline nav a').removeClass('current');
			$(this).addClass('current');
		}
	})
	$('.monthly').click(function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			dataTrail = ltrim(testJSON.main_chart.monthly_url,'/data?');
			getData('monthly');
			$('.timeline nav a').removeClass('current');
			$(this).addClass('current');
		}
	})
	$('.weekly').click(function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			dataTrail = ltrim(testJSON.main_chart.weekly_url,'/data?');
			getData();
			$('.timeline nav a').removeClass('current');
			$(this).addClass('current');
		}
	})
	$('.all-time').click(function(e){
		e.preventDefault();
		if(!$(this).hasClass('current')){
			dataTrail = ltrim(testJSON.main_chart.all_time_url,'/data?');
			getData();
			$('.timeline nav a').removeClass('current');
			$(this).addClass('current');
		}
	})
	$('.graph .arrow-left').click(function(e){
		e.preventDefault();
		dataTrail = ltrim(testJSON.main_chart.prev_url,'/data?');
		getData();
	})
	$('.graph .arrow-right').click(function(e){
		e.preventDefault();
		dataTrail = ltrim(testJSON.main_chart.next_url,'/data?');
		getData();
	})
});

function getData () {
	$.ajax({
		url: 'http://less.vaesite.com/assets/php/chart_data.php',
		data: dataTrail,
		dataType: 'json',
		success: function(data){
			testJSON = data;
			var type = testJSON.main_chart.points.length;
			$('.bars').removeClass('set7 set28 set29 set30 set31 set12').addClass('set'+type);
			$('.timeline nav a').removeClass('current');
			if(type==7){
				$('.timeline nav .weekly').addClass('current');
			}else if (type==28 || type==29 || type==30 || type==31){
				$('.timeline nav .monthly').addClass('current');
			}else if (type==12){
				$('.timeline nav .yearly').addClass('current');
			}
			$('.timeline h1').html('<span>'+testJSON.main_chart.title.replace("of","of</span>"));
			location.hash=dataTrail;
			buildPoints();
		}
	})
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function buildChart(){
	chart = new Highcharts.Chart({
      chart: {
         renderTo: 'chart_div',
         plotBackgroundColor: null,
         plotBorderWidth: null,
         plotShadow: false,
      	 backgroundColor: '#29C3EC',
      	 plotBorderWidth: 0
      },
      title: {
         text: null
      },
      tooltip: {
        enabled: false
      },
      plotOptions: {
         pie: {
            allowPointSelect: true,
            cursor: 'pointer',
            dataLabels: {
               enabled: false
            },
			borderWidth: 0
         }
      },
       series: [{
         type: 'pie',
         name: 'Browser share',
         data: dataSet
      }],
      colors: colorSet,
	  credits: {
        enabled: false
      }
   });
}

function resetPercents() {
	$('.percents dd:gt(0),.percents dt:gt(0)').remove();
	$('.breakdown .percents dt:eq(0)').clone().insertBefore($('.breakdown .percents dt:eq(0)'));
	$('.breakdown .percents dd:eq(0)').clone().insertAfter($('.breakdown .percents dt:eq(0)'));
	var totalIn = parseFloat(testJSON.main_chart.in_total),
		totalOut = parseFloat(testJSON.main_chart.out_total),
		total = totalIn + totalOut;
	$('.breakdown .percents dt:eq(0)').html('In');
	$('.breakdown .percents dt:eq(1)').html('Out');
	$('.breakdown .percents dd:eq(0)').html('<span>'+Math.round(totalIn/total*100)+'%</span>');
	$('.breakdown .percents dd:eq(1)').html('<span>'+Math.round(totalOut/total*100)+'%</span>');
	dataSet= new Array();
	//colorSet = new Array('#fff','#000');
	dataSet[0]=new Array('IN',Math.round(totalIn/total*100));
	dataSet[1]=new Array('OUT',Math.round(totalOut/total*100));
	buildChart();
}

function focusPercents(element){
	$('.breakdown .percents dd,.breakdown .percents dt').removeClass('current');
	element.addClass('current').nextUntil('dt').addClass('current');
	element.prevUntil('dd').addClass('current');
}

function focusBreakdown(element,type,update) {
	if(typeof update === 'undefined'){
		update='chart';	
	}
	$('.detail p a').removeClass('current');
	$('.detail .lbs').addClass('current');
	$('.breakdown dl:not(.percents) dd,.breakdown dl:not(.percents) dt').removeClass('current');
	element.addClass('current').nextUntil('dt').addClass('current');
	element.prevUntil('dd').addClass('current');
	$('.detail').removeClass('detail-in detail-out');
	$('.detail').addClass('detail-'+element.closest('dl').attr('class'));
	$('.percents dd:gt(0),.percents dt:gt(0)').remove();
	var rootJSON = testJSON.details.in;
	if(element.closest('dl').hasClass('out')){
		rootJSON = testJSON.details.out;
	}
	var catNumb = element.closest('dl').find(type).index(element)-1,
		subCats = (typeof rootJSON.categories[catNumb].sub_categories === 'undefined')? 0 : rootJSON.categories[catNumb].sub_categories.length;
	$('.breakdown .percents dd').removeClass('current');
	$('.breakdown .percents dt').removeClass('current');
	dataSet=new Array();
	//colorSet = new Array();
	if(subCats==0){
		$('.breakdown .percents dd:eq(0)').html('<span>'+rootJSON.categories[catNumb].value+'</span>lbs');
		$('.breakdown .percents dt:eq(0)').html(rootJSON.categories[catNumb].title);
		dataSet[subCats]=new Array(rootJSON.categories[catNumb].title,parseFloat(rootJSON.categories[catNumb].value));
	}
	while(subCats>0) {
		subCats--;
		$('.breakdown .percents dd:eq(0)').html('<span>'+rootJSON.categories[catNumb].sub_categories[subCats].value+'</span>lbs');
		$('.breakdown .percents dt:eq(0)').html(rootJSON.categories[catNumb].sub_categories[subCats].title);
		if(subCats>0) {
			$('.breakdown .percents dt:eq(0)').clone().insertBefore($('.breakdown .percents dt:eq(0)'));
			$('.breakdown .percents dd:eq(0)').clone().insertAfter($('.breakdown .percents dt:eq(0)'));
		}
		/*if(subCats%2==0){
			colorSet[subCats]='#fff';
		} else {
			colorSet[subCats]='#000';
		}*/
		dataSet[subCats]=new Array(rootJSON.categories[catNumb].sub_categories[subCats].title,parseFloat(rootJSON.categories[catNumb].sub_categories[subCats].value));
	}
	if(update=='chart'){
		chart.destroy();
		buildChart();
	}
}

function setBreakdown(){
	var afterThisIn = $('.breakdown .in dd.main'),
		afterThisOut = $('.breakdown .out dd.main'),
		catsIn = (typeof testJSON.details.in.categories === 'undefined')? 0 : testJSON.details.in.categories.length,
		catsOut = (typeof testJSON.details.out.categories === 'undefined')? 0 : testJSON.details.out.categories.length;
	$('.breakdown .in dt:gt(1), .breakdown .in dd:gt(1), .breakdown .out dt:gt(1), .breakdown .out dd:gt(1)').remove(); 
	if(catsIn==0){
		$('.breakdown .in dt:eq(1), .breakdown .in dd:eq(1)').hide(); 
	} else {
		$('.breakdown .in dt:eq(1), .breakdown .in dd:eq(1)').show(); 
	}
	if(catsOut==0){
		$('.breakdown .out dt:eq(1), .breakdown .out dd:eq(1)').hide(); 
	} else {
		$('.breakdown .out dt:eq(1), .breakdown .out dd:eq(1)').show(); 
	}
	while(catsIn>0) {
		catsIn--;
		$('.breakdown .in dd:eq(1) span').html(testJSON.details.in.categories[catsIn].value);
		$('.breakdown .in dt:eq(1)').html(testJSON.details.in.categories[catsIn].title);
		if(catsIn>0) {
			$('.breakdown .in dd:eq(1)').clone().insertAfter(afterThisIn);
			$('.breakdown .in dt:eq(1)').clone().insertAfter(afterThisIn);
		}
	}
	while(catsOut>0) {
		catsOut--;
		$('.breakdown .out dd:eq(1) span').html(testJSON.details.out.categories[catsOut].value);
		$('.breakdown .out dt:eq(1)').html(testJSON.details.out.categories[catsOut].title);
		if(catsOut>0) {
			$('.breakdown .out dd:eq(1)').clone().insertAfter(afterThisOut);
			$('.breakdown .out dt:eq(1)').clone().insertAfter(afterThisOut);
		}
	}
}

function growBars(){
	var bars = $('.bar div:not(.tooltip)'),
		barsCount=bars.length;
	while(barsCount>0){
		barsCount--;
		$(bars[barsCount]).animate({'height':$(bars[barsCount]).attr('data-amount')/2+"%"},1000,function(){
			$(this).css('overflow','visible');
		});
	}
}

function buildPoints() {
	$('.bar:gt(0)').remove();
	var newBars = testJSON.main_chart.points.length,
		values = new Array(),
		max;
	$('.totals dd:eq(0) span, .breakdown .in .main span').html(testJSON.main_chart.in_total);
	$('.totals dd:eq(1) span, .breakdown .out .main span').html(testJSON.main_chart.out_total);
	resetPercents();
	var split = testJSON.main_chart.points[newBars-1].date.split('/'),
		d = new Date();
		d2 = new Date();
	d.setFullYear(split[2],split[0]-1,split[1]);
	if(d.getTime()>=d2.getTime() || testJSON.main_chart.points[newBars-1].date==0){
		$('.arrow-right').addClass('preload');
	} else {
		$('.arrow-right').removeClass('preload');
	}
	while(newBars>0){
		newBars--;
		split = testJSON.main_chart.points[newBars].date.split('/');
		d = new Date();
		d.setFullYear(split[2],split[0]-1,split[1]);
		switch(d.getDay()){
		case 0:
			d = "Sunday";
			break;
		case 1:
			d = "Monday";
			break;
		case 2:
			d = "Tuesday";
			break;
		case 3:
			d = "Wednesday";
			break;
		case 4:
			d = "Thursday";
			break;
		case 5:
			d = "Friday";
			break;
		case 6:
			d = "Saturday";
			break;	
		}
		$('.bar:first dt').html(d);
		$('.bar:first dd:even').html(testJSON.main_chart.points[newBars].date);
		values.push(testJSON.main_chart.points[newBars].in);
		$('.bar:first .in dd span').html(testJSON.main_chart.points[newBars].in);
		values.push(testJSON.main_chart.points[newBars].out);
		$('.bar:first .out dd span').html(testJSON.main_chart.points[newBars].out);
		if(newBars>0){
			$('.bars').prepend($('.bar:first').clone());
		}
	}
	max = Array.max(values);
	newBars = testJSON.main_chart.points.length;
	while(newBars>0){
		newBars--;
		if(max!=0){
			$('.bar:eq('+newBars+') .in').attr('data-amount',(testJSON.main_chart.points[newBars].in/max*100));
			$('.bar:eq('+newBars+') .out').attr('data-amount',(testJSON.main_chart.points[newBars].out/max*100));
		} else {
			$('.bar:eq('+newBars+') .in').attr('data-amount',0).css('height',0);
			$('.bar:eq('+newBars+') .out').attr('data-amount',0).css('height',0);
		}
	}
	growBars();
	setBreakdown();
}
 
Array.max = function( array ){
    return Math.max.apply( Math, array );
};
Array.min = function( array ){
    return Math.min.apply( Math, array );
};
 
 
