/**
* @version:			12 Oct 2006
* @requires:		prototype.js (with onDOMReady extension) and the scriptaculous library
*/

/******************************************************************************
 The Synergize Object 
******************************************************************************/
if(!Synergize){ var Synergize = {}; }



/******************************************************************************
 Synergize event functions
******************************************************************************/
Synergize.hasRequired 	= function() { 
	if (document.getElementById && document.getElementsByTagName) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className == '') ? '' : ' ') + 'has-dom';
		return true;
	};
	return false;
}();

Synergize.onbeforeload	= function() {
	if (this.hasRequired) {
		for (var module in this) {
			if(this[module]){
				if (this[module].onbeforeload){
					this[module].onbeforeload();
				};
			}	
		}
	}
	this.Debug.output('onbeforeload complete', 1);
	Event.stopObserving(window, 'load', Synergize.onbeforeload.bindAsEventListener(Synergize), false);
};

Synergize.onload = function() {
	this.Debug.output('onload fired', 1);
	Event.stopObserving(window, 'load', Synergize.onload.bindAsEventListener(Synergize), false);
	if (this.hasRequired) {		
		for (var module in Synergize) {		
			if(this[module]){
				if (this[module].onload) {
					this[module].onload();
				}
			}
		};
	}	
};

Synergize.onresize = function() {
	this.Debug.output('onresize fired', 1);
	if (this.hasRequired) {		
		for (var module in Synergize) {		
			if(this[module]){
				if (this[module].onresize) {
					this[module].onresize();
				}
			}
		};
	}	
};

Synergize.onscroll = function() {
	this.Debug.output('onscroll fired', 1);
	if (this.hasRequired) {		
		for (var module in Synergize) {		
			if(this[module]){
				if (this[module].onscroll) {
					this[module].onscroll();
				}
			}
		};
	}	
};

Synergize.onkeydown = function(e) {
	//this.Debug.output('onkeydown fired', 1);
	if (this.hasRequired) {		
		for (var module in Synergize) {		
			if(this[module]){
				if (this[module].onkeydown) {
					this[module].onkeydown(this.getKeyCode(e));
				}
			}
		};
	}	
};

Synergize.onkeyup = function(e) {
	//this.Debug.output('onkeyup fired', 1);
	if (this.hasRequired) {		
		for (var module in Synergize) {		
			if(this[module]){
				if (this[module].onkeyup) {
					this[module].onkeyup(this.getKeyCode(e));
				}
			}
		};
	}	
};



/******************************************************************************
 Synergize helper functions
******************************************************************************/
Synergize.Array = {
	exists: function(arr, val) {
		for (var i=0; i<arr.length; i++){
			if(arr[i] === val){
				return true;
			}
		}
		return false;
	},
	
	remove: function(arr, val) {
		for (var i=0; i<arr.length; i++){
			if(arr[i] === val){
				return (arr.splice(i, 1));
			}
		}
	},
	
	equal: function(arr1, arr2) {
		var matches = 0;
		for (var i=0; i<arr1.length; i++){
			for (var j=0; j<arr2.length; j++){
				if(arr1[i] == arr2[j]){
					matches++;
				}
			}
		}
		return (matches == arr1.length);
	}
};

Synergize.getKeyCode = function(e) {
	var keycode;
	if (window.event){
		keycode = window.event.keyCode;
	}
	else if (e){
		keycode = e.which;
	}
	return keycode;	
};

Synergize.checkBrowser = function(str){
	var agent = navigator.userAgent.toLowerCase();
	return (agent.indexOf(str.toLowerCase()) >= 0);
};

Synergize.isIE			= function(){
	return Synergize.checkBrowser('msie');
};

Synergize.checkPlatform = function(str){
	var platform = navigator.platform.toLowerCase();
	return (platform.indexOf(str.toLowerCase()) >= 0);
};

Synergize.windowSize = function() {
	var size = {};
	if (window.innerWidth) { // all except Explorer
		size.width = window.innerWidth;
		size.height = window.innerHeight;
	
	}
	else if (document.documentElement && document.documentElement.clientWidth) { // Explorer 6 Strict Mode	
		size.width = document.documentElement.clientWidth;
		size.height = document.documentElement.clientHeight;
	
	}
	else if (document.body) { // other Explorers
		size.width = document.body.clientWidth;
		size.height = document.body.clientHeight;
	}
	return size;
};


/******************************************************************************
 Synergize.Debug module
******************************************************************************/
Synergize.Debug = {
	debug: false,
	e: null,
	count: 0,
	
	onbeforeload: function() {
		if (this.debug) {
			this.e = document.createElement('div');
			document.body.appendChild(this.e);
			this.e.style.position			= Synergize.isIE ? 'absolute': 'fixed';	//IE doesn't get fixed positioning
			this.e.style.top 				= '15px';
			this.e.style.right 				= '15px';
			this.e.style.width 				= '400px';
			this.e.style.backgroundColor	= '#eee';
			this.e.style.border 			= '1px solid #ddd';
			this.e.style.padding 			= '10px';
			this.e.style.zIndex				= 10000;
			this.e.style.opacity 			= .8;								//Safari and Mozilla
			this.e.style.filter				= 'alpha(opacity=80)';				//IE
			
			var a = document.createElement('a');
			a.innerHTML = 'Clear Debug Output';
			a.href = '#Clear';
			a.e = document.createElement('div');
			a.onclick = function() {
				this.e.innerHTML = '';
				return false;
			};
			this.e.appendChild(a);
			this.e = this.e.appendChild(a.e);
		};
	},
	
	output: function() {
		if (this.debug && this.e != null) {
			html = arguments[0];
			if (arguments.length==2) {
				html = '<strong>'+html+'</strong>';
			}
			var c = ++this.count;
			c = ((c<100) ? '0': '') + ((c<10) ? '0': '') + c;			
			this.e.innerHTML = '<hr />' + c + ': &nbsp; ' + html + this.e.innerHTML;
		};
	}
};



/******************************************************************************
 Synergize.Cookie module
******************************************************************************/
Synergize.Cookie = {
	domain: location.hostname.replace(/^www\./,''),

	set: function(name, value, days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},

	get: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},

	toss: function(name) {
		set(name,"",-1);
	}
}



/******************************************************************************
 Synergize observe
******************************************************************************/
Event.onDOMReady(function(){ Synergize.onbeforeload(); });
Event.observe(window, 'load', Synergize.onload.bindAsEventListener(Synergize), false);
Event.observe(window, 'resize', Synergize.onresize.bindAsEventListener(Synergize), false);
Event.observe(window, 'scroll', Synergize.onscroll.bindAsEventListener(Synergize), false);
Event.observe(document, 'keydown', Synergize.onkeydown.bindAsEventListener(Synergize), false);
Event.observe(document, 'keyup', Synergize.onkeyup.bindAsEventListener(Synergize), false);