// -- sogeo.js
// -- (c) 2010 SoGeo except where indicated

(function(){

function $(eid) { return (typeof eid == "string") ? document.getElementById(eid) : eid; }
function $opc(eid, opcp) {
	eid = $(eid); if(null == eid) return; opcp = Math.min(100, opcp);
	eid.style.opacity = opcp / 100; eid.style.filter = "alpha(opacity=" + opcp + ")";
}
function $evt(eid, evt, lamb) {
	eid = $(eid); if(null == eid) return;
	if(eid.addEventListener)
		eid.addEventListener(evt, lamb, false);
	else if(eid.attachEvent)
		eid.attachEvent("on" + evt, lamb);
}

/*
 * JavaScript Pretty Date
 * Copyright (c) 2008 John Resig (jquery.com)
 * Licensed under the MIT license.
 */
function prettyDate(time){
	var date = new Date((time || "").replace(/-/g,"/")),
		diff = (((new Date()).getTime() - date.getTime()) / 1000),
		day_diff = Math.floor(diff / 86400);
			
	if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
		return;
			
	return day_diff == 0 && (
			diff < 60 && "just now" ||
			diff < 120 && "1 minute ago" ||
			diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
			diff < 7200 && "1 hour ago" ||
			diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
		day_diff == 1 && "Yesterday" ||
		day_diff < 7 && day_diff + " days ago" ||
		day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
}



function MiniXHR(url, callback) {
	function CreateNative() {
		var xhr = null;
		if(window.XMLHttpRequest) {
			try { xhr = new XMLHttpRequest(); } catch(e){}
		}
		if((null == xhr) && window.ActiveXObject) {
			try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){}
			if(null == xhr)
				try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){}
		}
		return xhr;
	}

	var xhr = CreateNative();
	if(null == xhr) callback(null);

	xhr.onreadystatechange = function() {
		if(xhr.readyState != 4) return;
		callback(xhr);
	};

	xhr.open("GET", url);
	xhr.send();
}


function Linkify(t) {
	var url=/\(?\bhttp(s)?:\/\/[-A-Za-z0-9+&@#\/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#\/%=~_()|]/g;
	return t.replace(url, function(c){return"<a target='_blank' href='"+c+"'>External Link</a>"});
}

function HandleTweets(xhr) {
	var nest = $("twoot");
	var twoot = eval(xhr.responseText);

	for(var fiep=0; fiep < Math.min(2, twoot.length); ++fiep) {
		var twuut = twoot[fiep];

		var tp = document.createElement("p");
		tp.innerHTML = Linkify(twuut.text) + " ";

		var moreLink = document.createElement("a");
		moreLink.className = "more";
		moreLink.setAttribute("rel", "bookmark");
		moreLink.href = "http://twitter.com/sogeo/statuses/" + twuut.id;
		
		var dtt = document.createElement("time");
		dtt.setAttribute("datetime", twuut.created_at);
		dtt.setAttribute("pubdate", "pubdate");
		dtt.innerHTML = prettyDate(twuut.created_at) || "several weeks ago";
		moreLink.appendChild(dtt);
		tp.appendChild(moreLink);

		var atc = document.createElement("article");
		atc.appendChild(tp);

		nest.appendChild(atc);
	}
}

function HandleBlog(xhr) {
	var gib = $("news");
	var items = xhr.responseXML.getElementsByTagName("channel")[0].getElementsByTagName("item");

	for(var fiep=0; fiep < Math.min(2, items.length); ++fiep) {
		var blob = items[fiep];

		function TagVal(tag) { return blob.getElementsByTagName(tag)[0].firstChild.data; }

		var th = document.createElement("h1");
		th.innerHTML = TagVal("title");

		var tp = document.createElement("p");
		tp.innerHTML = TagVal("description").replace(/<[^>]*>/g, "").substr(0, 70) + "&hellip; ";

		var moreLink = document.createElement("a");
		moreLink.className = "more";
		moreLink.setAttribute("rel", "bookmark");
		moreLink.href = TagVal("link");
		moreLink.innerHTML = "read more";
		tp.appendChild(moreLink);

		var atc = document.createElement("article");
		atc.appendChild(th);
		atc.appendChild(tp);

		gib.appendChild(atc);
	}
}

var photoDefs = [
	{ user: "spinelli", loc: "Nice, France" },
	{ user: "roberto", loc: "Venice, Italy" },
	{ user: "marre", loc: "Las Palmas, Spain" },
	{ user: "nischt", loc: "Nordrhein-Westfalen, Germany" },
	{ user: "rotgans", loc: "Le Penon, France" },
	{ user: "hoite", loc: "Melkweg, Amsterdam, Netherlands" },
	{ user: "loe", loc: "Privas, France" },
	{ user: "michiel", loc: "Tokyo, Japan" }
];

function RandomPhoto() {
	var picframe = $("photo");
	if(null == picframe) return;

	var picix = (Math.floor((Math.random() * photoDefs.length) + 1));
	var picDef = photoDefs[picix - 1];

	var l = new Image();
	l.alt = "";
	l.onload = function() {
		$opc(l, 0);
	
		l = picframe.appendChild(l);

		var paraloca = document.createElement("p");
		paraloca.innerHTML = (picDef.user.length ? (picDef.user + " @ ") : "") + picDef.loc;
		picframe.appendChild(paraloca);

		(function f(o) {
			$opc(l, o);
			if(o < 100) setTimeout(function(){ f(o + 8); }, 50);
		})(0);
	};

	l.src = "/img/photos/base" + picix + ".jpg";
}

function OnLoad() {
	// DOMContentLoaded and load both get here
	if(true === OnLoad.ready) return;
	OnLoad.ready = true;

	// feeds
	MiniXHR("/feeds/twit.json", HandleTweets);
	MiniXHR("/feeds/blog.xml", HandleBlog);

	// dem thar pics
	RandomPhoto();

	// usp grid
	var usps = ["vibrant", "geoaware", "onthego", "plugplay"];
	for(var uk in usps) {
		(function(usp) {
			$evt("usp_" + usps[uk], "click", function(ev) {
				location.href = "/whatwedo/" + usp + "/";
			});
		})(usps[uk]);
	}
	
}
OnLoad.ready = false;

// init
if(window.addEventListener) {
	window.addEventListener("DOMContentLoaded", OnLoad, false);
	window.addEventListener("load", OnLoad, false);
}
else if(window.attachEvent)
	window.attachEvent("onload", OnLoad);


// -- publics
window.SendSogeoMail = function(darex,sub) {
	var dare = ([['pi','et^er'],['m^ic','hiel'],['recr','uit^ment'],['a','nn^a']])[darex].join('').replace(/\^/g,'');
	sub = (sub && sub.length) ? ("?subject=" + encodeURIComponent(sub)) : "";
	window.location = ['mai','lt#o:',dare,String.fromCharCode(0x20<<1),'sog#eocomp','any.c','om'].join('').replace(/\#/g,'') + sub;
}

})();
