// linkHandler
// 
// Author: Jason Anderson
// Date: Feb 09, 2009
//
// Captures events triggered by user clicking on
// document link, and routes it to corresponding ajax
// call and/or javascript function
//
// Any link handled in this manner is assumed to be internal,
// or otherwise not require a page load.
//

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function handleLinkEvent(clickEvent) {

	// stop the event in case you want to rebind a link
	// that just got clicked (e.g. comments)
	//clickEvent.stopPropagation();

	var href = clickEvent.currentTarget.href;
	
	var params = new Object();
	var dest = new Array("");
	
	if(hasDestination(href)) {
		dest = href.substring(href.indexOf("#")+1).split("/");
	}
	
	if(hasParams(href)) {
	
		var paramStrs;
		if(hasDestination(href)) {
			paramStrs = (href.substring(href.indexOf("?")+1,href.indexOf("#"))).split("&");
		} else {
			paramStrs = (href.substring(href.indexOf("?")+1)).split("&");
		}
		
		var keyvals;
		for(var i=0; i<paramStrs.length; i++) {
			keyvals = paramStrs[i].split("=");
			params[""+keyvals[0]] = keyvals[1];
		}
	}
	
	processParams(params,clickEvent.currentTarget);
	processDestination(dest, clickEvent.currentTarget);
	
	// tell browser not to process link as usual
	return false;
}

function processParams(params, target) {

	var jQTarget = $(target);
	
	for(var param in params) {
		switch(param) {
			default:
				break;
		}
	}
}

function processDestination(dest, target) {
	var jQTarget = $(target);

	var indx = 0;
	switch(dest[indx]) {
		
		default:
			return true;
			break;
	}
	
}

function hasParams(hrefStr) {
	return hrefStr.indexOf("?") >= 0;
}

function hasDestination(hrefStr) {
	return hrefStr.indexOf("#") >= 0;
}

function isEmail(str) {
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  var isEmail = (!r1.test(str) && r2.test(str));
  return isEmail;
}

function checkForm(email) {
	var e = isEmail(email);
	var t = $('#tos-checkbox').is(':checked');
	if(!e && !t) {
		alert("Please provide a valid email address and agree to the terms.");
	} else if (!e) {
		alert("Please provide a valid email address.");
	} else if (!t) {
		alert("You have to agree to the terms.");
	} else {
		$("#emailSubmit").val('Registering...').attr('disabled','disabled').animate({opacity: 0.4},250);
		$("#emailSubmit").after('<img style="position:relative;top:3px;margin-left:8px;" src="http://c.ak.static-rootmusic.com/images/common/ajax-loader-white.gif">');
		return true;
	}
	return false;
}

function displayIEMessage() {
	// build window DOM and show
	var ie_overlay = $("<div id='ie-overlay'></div>");
	var message = $("<div id='upgrade-browser'></div>");
	message.append("<h3>Attention Internet Explorer users</h3>");
	message.append("<p>RootMusic makes use of several cutting-edge web technologies &mdash;<br />sometimes Internet Explorer doesn&rsquo;t speak the most up-to-date web lingo.<br />We are continuously building in additional IE-specfic support, but<br />we <strong>strongly recommend</strong> upgrading to a newer browser:</p>");
	var browser_list = $("<div id='browser-list'></div>");
	browser_list.append("<a id='browser-get-firefox' href='http://www.getfirefox.com/' target='_blank' title='Get Firefox 3.6'>Firefox 3.6</a>").append("<a id='browser-get-chrome' href='http://www.google.com/chrome' target='_blank' title='Get Google Chrome'>Google Chrome</a>").appendTo(message);
	message.append("<a id='no-browser-upgrade' title='Just continue'>No, thanks &mdash; get started now</a>");
	ie_overlay.append(message);
	$("body").append(ie_overlay);
	ie_overlay.css({height: $('html').outerHeight()+'px'});
	
	// disable animation actions ?
	
	// install handler to remove self
	$("#no-browser-upgrade").click(function(e) {
		ie_overlay.hide();
	});
}

function logoutAndRedirect() {
	if(confirm('This will log you out from both Facebook and RootMusic.')){ 
		FB.logout(function(response) {
			window.location = "/logout";
		});
	}
	return false;
}
