var ua={ie:function(){return this._ie;},firefox:function(){return this._firefox;},opera:function(){return this._opera;},safari:function(){return this._safari;},windows:function(){return this._windows;},osx:function(){return this._osx;},populate:function(){var agent=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso).(\d+\.\d+))|(?:Opera.(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))/.exec(navigator.userAgent);var os=/(Mac OS X;)|(Windows;)/.exec(navigator.userAgent);if(agent){ua._ie=agent[1]?parseFloat(agent[1]):NaN;ua._firefox=agent[2]?parseFloat(agent[2]):NaN;ua._opera=agent[3]?parseFloat(agent[3]):NaN;ua._safari=agent[4]?parseFloat(agent[4]):NaN;}else{ua._ie=ua._firefox=ua._opera=ua._safari=NaN;}
if(os){ua._osx=!!os[1];ua._windows=!!os[2];}else{ua._osx=ua._windows=false;}},adjustBehaviors:function(){onloadRegister(addSafariLabelSupport);if(ua.ie()<7){try{document.execCommand('BackgroundImageCache',false,true);}catch(ignored){}}}};

function addSafariLabelSupport(base){if(ua.safari()<500){var labels=(base||document.body).getElementsByTagName("label");for(i=0;i<labels.length;i++){labels[i].addEventListener('click',addLabelAction,true);}}}

function chain(u,v){var calls=[];for(var ii=0;ii<arguments.length;ii++){calls.push(arguments[ii]);}
return function(){for(var ii=0;ii<calls.length;ii++){if(calls[ii]&&calls[ii].apply(null,arguments)===false){return false;}}
return true;}}

function onloadRegister(handler){
	window.loaded?_runHook(handler):_addHook('onloadhooks',handler);}
function onafterloadRegister(handler){window.loaded?_runHook(handler):_addHook('onafterloadhooks',handler);}
function onbeforeunloadRegister(handler){_addHook('onbeforeunloadhooks',handler);}
function onunloadRegister(handler){_addHook('onunloadhooks',handler);}
function _onloadHook(){_runHooks('onloadhooks');window.loaded=true;}
function _runHook(handler){try{handler();}catch(ex){;}}
function _runHooks(hooks){
	var isbeforeunload=(hooks=='onbeforeunloadhooks');
	var warn=null;
	do{
		var h=window[hooks];
		if(!isbeforeunload){window[hooks]=null;}
		if(!h){break;}
		for(var ii=0;ii<h.length;ii++){
			if(isbeforeunload){
				warn=warn||h[ii]();
				alert(warn);
			}else{
				h[ii]();
			}
		}
		if(isbeforeunload){break;}
	}while(window[hooks]);if(isbeforeunload){if(warn){return warn;}else{window.loaded=false;}}}
function _addHook(hooks,handler){(window[hooks]?window[hooks]:(window[hooks]=[])).push(handler);}

function _bootstrapEventHandlers(){
	if(document.addEventListener){
		if(ua.safari()){
			var timeout=setInterval(function(){if(/loaded|complete/.test(document.readyState)){_onloadHook();clearTimeout(timeout);}},10);
		}else{
			document.addEventListener("DOMContentLoaded",_onloadHook,true);}
		}else{
			var src='javascript:void(0)';
			if(window.location.protocol=='https:'){src='//:';}
			document.write('<script onreadystatechange="if (this.readyState==\'complete\') {'+'this.parentNode.removeChild(this);_onloadHook();}" defer="defer" '+'src="'+src+'"><\/script\>');
		}
		window.onload=chain(window.onload,function(){
			_onloadHook();
			_runHooks('onafterloadhooks');});
		window.onbeforeunload=function(){
			return _runHooks('onbeforeunloadhooks');
		};
		window.onunload=chain(window.onunload,function(){_runHooks('onunloadhooks');});
}
ua.populate();
ua.adjustBehaviors();
_bootstrapEventHandlers();

