/**
 * 
 * main.js
 * @author Yves Apsy
 * @version 0.1
 * 
 * 28/10/2009
 * 
 **/ 
 
var resizeInt;
var arIssues = Array();
var arQuotes = "";
var arTwitter = "";
var selectedIssue = 0;
var difIssue = 0;
var qtdeIssue = 0;
var qtdePages = 0;
var selectedPage = 1;
var comboTimer;
var overCombo = false;
var siteURL = "http://www.seamlessmind.com/";

function init(){
	//Bind function to the resize of the window to keep bg fullsized
	$(window).resize(function(){
		reorganizeBg();
	});
	//setInterval('$.address.title("Seamless_Mind")', 2000);

	loadQuotes();
	loadIssues();

	/*var imgIlustra = new Image();
	$(imgIlustra).load(function () {
		$(this).hide();
		$('#ilustra').append(this);
		$(this).css('position', 'absolute').css('left', '-1760px').show().animate( { left:"0" } , 1000, function(){
			//loadIssues();
		});

	}).attr('src', '_img/bg.jpg');*/
	$('#ilustra').flash(
		{ src: 'bg.swf', width: '100%', height: '100%'}
	);
	
}

function setPage(str){
	$.address.value(str);
}
function showComboList(){
	$("#h_combo_list").show(200);
}
function hideComboList(){
	//if(!overCombo)
	$("#h_combo_list").hide(200);
}

function showAbout(){
	$.scrollTo(0);
	$("#overAll").css('opacity', 0.0).show();
	$("#about").css('opacity', 0.0).show();
	$("#overAll").fadeTo(250, 0.5, function(){$("#about").fadeTo(500, 1);});
	
	pageTracker._trackPageview('/about');
}
function hideAbout(){
	$("#about").fadeOut(500, function(){$("#overAll").fadeOut(250);});
}

function checkAddress(){
	
	//Verifies parameters on address to set the visible issues
	
	arParams = $.address.pathNames();

	if (arParams.length > 0 && arParams[0] == "page"){
		if(arParams[1] > 0 && arParams[1] <= qtdePages){
			mountIssues(arParams[1], 1);
		}else{
			if(arParams[1] < 1 || arParams[1] == undefined) setPage('page/1');
			if(arParams[1] > qtdePages) setPage('page/'+qtdePages);
			return false;
		}
		
	}else if (arParams.length > 0 && parseInt(arParams[0],10) >= 2009){
		countID = 0;
		for (var i=1; i<arIssues.length; i++) {
			if(parseInt(arIssues[i].id,10) == parseInt(arParams[1],10)){
				countID++;
				if (arIssues[i].year != arParams[0]) {
					setPage(arIssues[i].year + '/' + arParams[0]);
					return false;
				}
			}
		};
		if(countID == 0){
			setPage('');
			return false;
		}
		mountIssues(arParams[1], 0);
	}else{
		mountIssues();
	}
	
	
	//mountIssues($.address.queryString(), 0);
	//mountIssues($.address.queryString(), 1);
}


function reorganizeBg(){
	//set minimum width to ilustra
	$("#ilustra").width(1043);
	$("#footer").width(1043);
	$("#overAll").width(1043);
	
	//verify higher object to use it as reference to set bg height
	if($("#issues").height() > $("#right").height()){
		ilustraHeight = $("#issues").height() + parseInt($("#content").css("top"),10) + 50;
		cutmarkHeight = $("#issues").height();
	}else{
		ilustraHeight = $("#right").height() + parseInt($("#content").css("top"),10) + 80;
		cutmarkHeight = $("#right").height();
	}
	
	//set bg heights
	$("#overAll").height(ilustraHeight + $("#footer").height());
	$("#footer").css("top", ilustraHeight);
	$("#ilustra").height(ilustraHeight);
	$("#cutmark").height(cutmarkHeight);
	
	//set ilustra width
	$("#footer").width($(document).width());
	$("#ilustra").width($(document).width());
	$("#overAll").width($(document).width());
}

function loadIssues(){
	//loads issues.xml and push all to an array
	$.ajax({
		type: "GET",
		url: "_xml/issues.xml",
		dataType: "xml",
		success: function(xml) {
			//on success creates the array
			arIssues = Array();
			arIssues.push({id:0, content:''});
			comboIssues = '';
			
			$(xml).find('issue').each(function(){
				
				//get XML values and set variables
				var id = $(this).attr('id');
				var tit = $(this).find('title').text();
				var dat = $(this).find('date').text();
				var cat = $(this).find('category').text();
				var des = $(this).find('description').text();
				var bid = $(this).find('blurbid').text();
				
				var newIssue = "";
				
				//Create issues HTML to push in Issues array
				newIssue += '<div class="issue" id="issue'+id+'">';
				newIssue += '<div class="i_desc">';
				datX = dat.split('/');
				dat2 = datX[0] + '. ' + getShortMonth(datX[1]) + ', ' + datX[2];
				newIssue += '<strong>Date</strong><br />'+dat2+'<br /><br /><br />';
				newIssue += '<strong>Category</strong><br />';
				
				//Split categories
				cat = cat.split(",");
				for(i=0;i<cat.length;i++){
					newIssue += cat[i] + '<br />';
				}
				
				if(parseInt(id,10) < 10) id2 = "0" + id; else id2 = id;
				if(parseInt(id2,10) < 100) id2 = "0" + id2;

				newIssue += '<br /><br /><br />';
				newIssue += '<strong>Share</strong><br /><a class="link_share" onclick="linkDelicious(\''+id2+'\')">Delicious</a><br /><a class="link_share" onclick="linkTwitter(\''+id2+'\')">Twitter</a><br /><a class="link_share" onclick="linkFacebook(\''+id2+'\')">Facebook</a><br /><br /><br />';
				newIssue += '<strong>'+des+'</strong><br /><br /><br />';
				newIssue += '<a class="link_download" onclick="pageTracker._trackPageview(\'/pdf/'+id2+'\')" href="pdf/'+id2+'.zip" target="_blank">Download PDF</a><br />';
				newIssue += '<a class="link_view" onclick="pageTracker._trackPageview(\'/issuu/'+id2+'\')" href="http://issuu.com/seamlessmind/docs/'+id2+'" target="_blank">View Online</a><br />';
				newIssue += '<a class="link_buy" onclick="pageTracker._trackPageview(\'/blurb/'+id2+'\')" href="http://www.blurb.com/bookstore/detail/'+bid+'" target="_blank">Buy on Blurb</a><br />';
				newIssue += '</div>';
				newIssue += '<div class="i_image" id="i_image_'+ id +'"></div>';
				newIssue += '<div class="i_cc" onclick="window.open(\'http://creativecommons.org/licenses/by-nc-sa/3.0/\');"></div>';
				newIssue += '</div>';
				
				
				//Fill the string for combobox
				dat3 = getLongMonth(datX[1]) + ' ' + datX[2];
				comboIssues += '<div id="h_combo_list_item" onclick="showIssue('+datX[2]+',\''+id2+'\')">' + id2 + '. '+tit+' ('+dat3+')</div>';
				
				//Push values on Issues array
				//arIssues.push({id:id, content: newIssue, year:datX[2], lkd:lkd, lkv:lkv, lkb:lkb});
				arIssues.push({id:id, content: newIssue, year:datX[2], text:des, bid:bid});
			});
			$("#h_combo_list").html(comboIssues);
			$("#h_combo").each(function(){
				$(this).mouseover(function(){
					clearTimeout(comboTimer);
					overCombo = true;
				}).mouseout(function(){
					clearTimeout(comboTimer);
					overCombo = false;
					comboTimer = setTimeout("hideComboList()", 500);
				});
			});

			//calculates issues and pages
			qtdeIssue = arIssues.length - 1;
			qtdePages = Math.ceil(qtdeIssue / 3);

			//Binds the address change to the function
			$.address.change(function(event) {
				checkAddress();
			});
			
			//Call the first time to check address
			checkAddress();
			
		}
	});
}
function showIssue(year, num){
	hideComboList();
	setPage(year + '/' + num);
}

function pageUp(){
	goPage = parseInt(selectedPage - 1,10);
	if(goPage < 1) goPage = 1;
	setPage('page/' + goPage);
	$.scrollTo(0);
}

function pageDn(){
	goPage = parseInt(selectedPage + 1,10);
	if(goPage > qtdePages) goPage = qtdePages;
	setPage('page/' + goPage);
	$.scrollTo(0);
}

function mountIssues(num, type){
	
	//parsing...
	if(type == 1){
		if(num == undefined) num = 1;
		if(num < 1){ 
			num = 1;
			setPage('page?1');
		}
		if(num > qtdePages){
			num = qtdePages;
			setPage('page?' + qtdePages);
		}
		selectedPage = parseInt(num,10);
		selectedIssue = qtdeIssue - ((selectedPage - 1) * 3);
	}else{
		if(num == undefined) num = qtdeIssue;
		selectedIssue = parseInt(num,10);
		selectedPage = Math.ceil((qtdeIssue + 1 - selectedIssue) / 3);
		//selectedPage = 0;
	}
	if(selectedIssue > qtdeIssue) selectedIssue = qtdeIssue;
	if(selectedIssue <= 0) selectedIssue = 1;

	//clear actual shown issues
	$("#issues").html('');
	
	//shows visible issues
	for(i=selectedIssue;i>=selectedIssue-2+(selectedIssue < 3 ? 3-selectedIssue:0);i--){
		$("#issues").append(arIssues[i].content);

		if(parseInt(arIssues[i].id,10) < 10) id2 = "0" + arIssues[i].id; else id2 = arIssues[i].id;
		if(parseInt(id2,10) < 100) id2 = "0" + id2;
		$("#i_image_" + i).flash(
			{ src: 'flash_highlight.swf', width: 550, height: 550, flashvars: { id: id2, blurb: arIssues[i].bid }}
		);
		//$("#i_image_" + i).html('<img src="_img/cover/'+id2+'.jpg" />');
	}
	
	arParams = $.address.pathNames();

	//refresh the page selection block
	page_num = '&nbsp;&nbsp;';
	for(i=1;i<=qtdePages;i++){
		page_num += '<a onclick="$.scrollTo(0);" href="#/page/'+i+'" class="page_num_link'+(i == selectedPage && arParams[0] == 'page' ? '_sel' : '')+'">'+i+'</a>&nbsp;&nbsp;';
	}
	pagesBlock = '<div id="pages"><div id="page_up" onclick="pageUp()"><img src="_img/page_left.gif" /></div><div id="page_num">'+page_num+'</div><div onclick="pageDn()" id="page_down"><img src="_img/page_right.gif" /></div></div>';
	$("#issues").append(pagesBlock);
	
	//update quotes
	mountQuotes();
}

function loadQuotes(){
	$.ajax({
		type: "GET",
		url: "_xml/quotes.xml",
		dataType: "xml",
		success: function(xml) {
			arQuotes = xml;
			mountQuotes();
		}
	});
}

function mountTwitter(twitters){
	var imgs = "";
	var txts = "";
	//i =0;
	for (var i=0; i<twitters.length; i++){
		var username = twitters[i].user.screen_name;
		var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
			return '<a href="'+url+'" target="_blank">'+url+'</a>';
		}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
			return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'" target="_blank">'+reply.substring(1)+'</a>';
		});

		txts += '<div style="clear:both"></div>';
		txts += '<div id="r_twitter_photo"><img src="' + twitters[i].user.profile_image_url + '" /><br /></div>';
		txts += '<div id="r_twitter_text"><span>'+status+'</span> <a target="_blank" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'">'+relative_time(twitters[i].created_at)+'</a><br /></div>';

		//imgs = '<img src="' + twitters[i].user.profile_image_url + '" /><br />';
		//txts += '<span>'+status+'</span> <a target="_blank" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'">'+relative_time(twitters[i].created_at)+'</a><br />';
	}
	txts += '<div style="clear:both"></div>';

	$("#r_twitter_posts").html(txts);
	//$("#r_twitter_photo").html(imgs);
	//$("#r_twitter_text").html(txts);
}

function mountQuotes(){
	if(typeof(arQuotes) != "object") loadQuotes();
	var rand = Math.floor(Math.random() * ($(arQuotes).find('quote').length ))+ 1;
	$(arQuotes).find("quote[id='"+rand+"']").each(function(){
		var id = $(this).attr('id');
		var txt = '"' + $(this).find('text').text() + '"';
		var aut = $(this).find('author').text();
		$("#r_quote_text").fadeOut('normal', function(){
			$(this).html(txt).fadeIn('normal')
			reorganizeBg();
		});
		$("#r_quote_author").fadeOut('normal', function(){
			$(this).html(aut).fadeIn('normal')
		});
	});	
}

function linkTwitter(str) {
	var thisIssueURL = siteURL + '#/' + arIssues[parseInt(str,10)].year + '/' + str;
	twitterText = arIssues[parseInt(str,10)].text;
		
	urlToGo = "http://twitter.com/home?status=" + encodeURIComponent(twitterText + " " + thisIssueURL);
	window.open(urlToGo);
	
	pageTracker._trackPageview('/share/twitter/'+str);
}

function linkFacebook(str) {
	var thisIssueURL = siteURL + '#/' + arIssues[parseInt(str,10)].year + '/' + str;
	var thisSiteTitle = "Seamless_Mind";
	urlToGo = 'http://www.facebook.com/sharer.php?u='+encodeURIComponent(thisIssueURL)+'&t='+encodeURIComponent(thisSiteTitle);
	window.open(urlToGo);
	
	pageTracker._trackPageview('/share/facebook/'+str);
}

function linkDelicious(str) {
	var thisIssueURL = siteURL + '#/' + arIssues[parseInt(str,10)].year + '/' + str;
	urlToGo = "http://del.icio.us/post?url=" + thisIssueURL;
	window.open(urlToGo);
	
	pageTracker._trackPageview('/share/delicious/'+str);
}



var traceint;
function trace(txt){
	clearTimeout(traceint);
	if($("#debugText").length == 0) $('body').append('<div id="debugText" style="display:none;position:absolute;z-index:1000;left:0;top:0;background:#000;color:#fff;"></div>');
	if ($("#debugText").is(':hidden')) {
		$("#debugText").css('opacity', 0).show();
	}
	$("#debugText").fadeTo("slow", 0.90);
	$("#debugText").append(txt + "<br />");
	//traceint = setTimeout("detrace()", 3000);
}

function detrace(){
	clearTimeout(traceint);
	$("#debugText").fadeOut(100, function(){$(this).html("");});
}

function relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000,10);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  if (delta < 60) {
    return 'less than a minute ago';
  } else if(delta < 120) {
    return 'about a minute ago';
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60,10)).toString() + ' minutes ago';
  } else if(delta < (120*60)) {
    return 'about an hour ago';
  } else if(delta < (24*60*60)) {
    return 'about ' + (parseInt(delta / 3600,10)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
    return '1 day ago';
  } else {
    return (parseInt(delta / 86400,10)).toString() + ' days ago';
  }
}

function getShortMonth(num){
	arShortMonth = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'];
	return (arShortMonth[num -1]);
	
}

function getLongMonth(num){
	arLongMonth = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	return (arLongMonth[num -1]);
}
