/****************************************************
 * Copyright © Boa Technology. All Rights Reserved. *
 * Updated by: Matt Wiggins, 08-Dec-2010            *
 *                                                  *
 * High five!                                       *
 ****************************************************
/                                                  */
var boatechnology = boatechnology || {};

/****************************** 
 * Toolkit.                   *
 *                            *
 ******************************
/                            */
boatechnology.Toolkit = (function() {
	var public = {};
	var background;
	var close;
	var loader;
	
	/* public */
	public.init = function() {
		_buildFramework();
		_getAnchors();
	};
	
	public.open = function(e) {
		var source;
		if(!e) var e = window.event;
		if(e.target) source = e.currentTarget;
		else if(e.srcElement) {
			source = e.srcElement;
			if(source.nodeName.toLowerCase() == "img") source = source.parentNode;
		}
		
		if(typeof(source) == 'undefined') return;
		
		var rel = source.getAttribute('rel').replace('boa:', '');
		var parts = rel.split('_');
		var path = 'http://boatechnology.com/toolkit/' + parts [0] + '/' + parts[1] + '.html';
		
		var alpha = 0;
		background.style.display = 'block';
		fadeIn = function() {
			alpha += 5;
			if(alpha >= 85) {
				loader.src = path;
				loader.style.display = 'block';
				close.style.display = 'block';
			} else {
				_setOpacity(background, alpha);
				setTimeout(arguments.callee, 33);
			}
		}();
	}
	
	public.close = function(e) {
		var alpha = 85;
		loader.style.display = 'none';
		close.style.display = 'none';
		fadeOut = function() {
			alpha -= 5;
			if(alpha <= 0) {
				loader.src = '';
				background.style.display = 'none';
			} else {
				_setOpacity(background, alpha);
				setTimeout(arguments.callee, 33);
			}
		}();
	}
	
	/* private */
	_setOpacity = function(elm, n) {
		with(elm.style) {
			opacity = n/100;
			MozOpacity = n/100;
			filter = 'alpha(opacity=' + n + ')';
		}
	}
	
	_buildFramework = function() {
		background = document.createElement('div');
		with(background.style) {
			position = 'fixed';
			top = '0px';
			left = '0px';
			width = '100%';
			height = '100%';
			backgroundColor = '#000';
			zIndex = '49997';
			display = 'none';
		}
		document.body.appendChild(background);
		_setOpacity(background, 0);
		
		close = document.createElement('div');
		with(close.style) {
			position = 'fixed';
			top = '50%';
			left = '50%';
			width = '50px';
			height = '21px';
			marginTop = '-212px';
			marginLeft = '410px';
			backgroundImage = 'url(http://www.boatechnology.com/apis/toolkit-close.gif)';
			zIndex = '49998';
			display = 'none';
			cursor = 'pointer';
		}
		document.body.appendChild(close);
		
		if (close.addEventListener) close.addEventListener('click', public.close, false);
		else if (close.attachEvent) close.attachEvent('onclick', public.close);
		
		loader = document.createElement('iframe');
		with(loader.style) {
			position = 'fixed';
			top = '50%';
			left = '50%';
			width = '934px';
			height = '388px';
			marginTop = '-192px';
			marginLeft = '-467px';
			backgroundImage = 'url(http://www.boatechnology.com/apis/toolkit-bg.gif)';
			zIndex = '50000';
			display = 'none';
		}
		loader.frameBorder = 0;
		loader.allowTransparency = true;
		document.body.appendChild(loader);
	};
	
	_getAnchors = function() {
		var arrAnchors = document.getElementsByTagName('a');
		
		for(var i = 0; i < arrAnchors.length; i++) {
			try {
				var rel = arrAnchors[i].getAttribute('rel').substr(0, 4);
			} catch(e) {
				var rel = '';
			}
			
			if(rel == 'boa:') {
				if (arrAnchors[i].addEventListener) arrAnchors[i].addEventListener('click', public.open, false);
				else if (arrAnchors[i].attachEvent) arrAnchors[i].attachEvent('onclick', public.open);
			}
		}
	}
	
	return public;
})();

/****************************** 
 * Cross-browser DOMReady.    *
 *                            *
 ******************************
/                            */
(function() {

    var DomReady = window.DomReady = {};
    var userAgent = navigator.userAgent.toLowerCase();
    var browser = {
    	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
    	safari: /webkit/.test(userAgent),
    	opera: /opera/.test(userAgent),
    	msie: (/msie/.test(userAgent)) && (!/opera/.test( userAgent )),
    	mozilla: (/mozilla/.test(userAgent)) && (!/(compatible|webkit)/.test(userAgent))
    };    

	var readyBound = false;	
	var isReady = false;
	var readyList = [];

	function domReady() {
		if(!isReady) {
			isReady = true;
	        if(readyList) {
	            for(var fn = 0; fn < readyList.length; fn++) {
	                readyList[fn].call(window, []);
	            }
            
	            readyList = [];
	        }
		}
	};

	function addLoadEvent(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				if (oldonload) {
					oldonload();
				}
				func();
			}
		}
	};

	function bindReady() {
		if(readyBound) {
		    return;
	    }
		readyBound = true;
		if (document.addEventListener && !browser.opera) {
			document.addEventListener("DOMContentLoaded", domReady, false);
		}
		if (browser.msie && window == top) (function(){
			if (isReady) return;
			try {
				document.documentElement.doScroll("left");
			} catch(error) {
				setTimeout(arguments.callee, 0);
				return;
			}
		    domReady();
		})();
		if(browser.opera) {
			document.addEventListener( "DOMContentLoaded", function () {
				if (isReady) return;
				for (var i = 0; i < document.styleSheets.length; i++)
					if (document.styleSheets[i].disabled) {
						setTimeout( arguments.callee, 0 );
						return;
					}
	            domReady();
			}, false);
		}
		if(browser.safari) {
		    var numStyles;
			(function(){
				if (isReady) return;
				if (document.readyState != "loaded" && document.readyState != "complete") {
					setTimeout( arguments.callee, 0 );
					return;
				}
				if (numStyles === undefined) {
	                var links = document.getElementsByTagName("link");
	                for (var i=0; i < links.length; i++) {
	                	if(links[i].getAttribute('rel') == 'stylesheet') {
	                	    numStyles++;
	                	}
	                }
	                var styles = document.getElementsByTagName("style");
	                numStyles += styles.length;
				}
				if (document.styleSheets.length != numStyles) {
					setTimeout( arguments.callee, 0 );
					return;
				}
			
				domReady();
			})();
		}
	    addLoadEvent(domReady);
	};

	DomReady.ready = function(fn, args) {
		bindReady();
		if (isReady) {
			fn.call(window, []);
	    } else {
	        readyList.push( function() { return fn.call(window, []); } );
	    }
	};
	bindReady();
})();

/****************************** 
 * Rock!                      *
 *                            *
 ******************************
/                            */
DomReady.ready(function() {
	boatechnology.Toolkit.init();
});
