// 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 showAddShowDialog() {
	$("#editor-modal-layer").fadeIn();
}

function processDestination(dest, target) {

	var jQTarget = $(target);

	var indx = 0;
	switch(dest[indx]) {
		case 'info-bio':
			if($("#editor-main-bio").is(":hidden")) {
				$("#editor-main-bio").show().siblings().hide();
				$("#submenu-info-bio").addClass("active").parent().siblings().children("a").removeClass("active");
				$("#editor-main-hover-layer").slideDown('fast').click(function(eventObj) {
					eventObj.stopPropagation();
				});
			} else {
				$("#editor-main-hover-layer").slideUp('fast', function() {
					$("#editor-main-bio").hide();
					$("#submenu-info-bio").removeClass("active");
				});
			}
			break;
		case 'info-media':
			if($("#editor-main-media").is(":hidden")) {
				$("#editor-main-media").show().siblings().hide();
				$("#submenu-info-media").addClass("active").parent().siblings().children("a").removeClass("active");
				$("#editor-main-hover-layer").slideDown('fast').click(function(eventObj) {
					eventObj.stopPropagation();
				});
			} else {
				$("#editor-main-hover-layer").slideUp('fast',function() {
					$("#editor-main-media").hide();
					$("#submenu-info-media").removeClass("active");
				});
			}
			break;
		case 'info-contact':
			if($("#editor-main-contact").is(":hidden")) {
				$("#editor-main-contact").show().siblings().hide();
				$("#submenu-info-contact").addClass("active").parent().siblings().children("a").removeClass("active");		
				$("#editor-main-hover-layer").slideDown('fast').click(function(eventObj) {
					eventObj.stopPropagation();
				});
			} else {
				$("#editor-main-hover-layer").slideUp('fast',function() {
					$("#editor-main-contact").hide();
					$("#submenu-info-contact").removeClass("active");
				});
			}
			break;
		case 'close-info':
			$("#editor-main-hover-layer").slideUp('fast',function() {
					$("#editor-main-bio").hide();
					$("#editor-main-contact").hide();
					$("#editor-main-media").hide();
					$(".active",".editor-submenu").removeClass("active");
			});
			break;
		case 'launch-css':
			if(_Controller) {
				_Controller.setMode('css');
				try { console.log('css mode set.'); } catch(e) {}
			}
		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 {
		return true;
	}
	return false;
}

function displayIEMessage() {
	// build window DOM and show
	var ie_window = $("<div id='upgrade-browser'></div>");
	ie_window.append("<h3>Attention Internet Explorer users</h3>");
	ie_window.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 <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>").append("<a id='browser-get-safari' href='http://www.apple.com/safari/download' target='_blank' title='Get Safari 4'>Safari 4</a>").appendTo(ie_window);
	ie_window.append("<a id='no-browser-upgrade' title='Just continue'>No, thanks &mdash; get started now</a>");
	$("#home-introduction-action").append(ie_window);
	
	// disable animation actions ?
	
	// install handler to remove self
	$("#no-browser-upgrade").click(function(e) {
		ie_window.fadeOut(function() {
			// re-enable animation scripts ?
		});
	});
}
