if (!SITE){var SITE = new Object();};
SITE.hasRequired 	= function() { 
	if (document.getElementById && document.getElementsByTagName) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className=='')?'':' ')+'has-dom';
		return true;
	};
	return false;
}();
SITE.hasFlash		= function() {
	var flashVersion = 0;
	var required = 8;
	var m = 16; // maximum version to test for
	var ua = navigator.userAgent.toLowerCase();
	if (navigator.plugins && navigator.plugins.length) {
		var p = navigator.plugins['Shockwave Flash'];
		if (typeof p == 'object') {
			for (var i=m;i>=3;i--) {
				if (p.description && p.description.indexOf(i + '.') != -1) { flashVersion = i; break; };
				};
			};
		}
	else if (window.ActiveXObject && window.print) {
		var found = false;
		for (var i=m; i>=3 && !found; i--) {
			try {
				found = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + i + "');");
				if(found) { flashVersion = i; };
				}
			catch(e) {};
			};
		};
	if (required<=flashVersion) {
		var html = document.getElementsByTagName('html')[0];
		html.className += ((html.className=='')?'':' ')+'has-flash';
		return true;
		};
	return false;
}();
SITE.onload	= function() {if (this.hasRequired) { for (var module in this) { if (this[module].onload) { this[module].onload(); };};};};
SITE.onresize = function() {if (this.hasRequired) { for (var module in this) { if (this[module].onresize) { this[module].onresize(); };};};};

/******************************************************************************
 ActiveContent
 
 Adapted from AC_RunActiveContent.js 
 Copyright 2006 Adobe Systems, Inc. All rights reserved.
 
 ******************************************************************************/
 
SITE.ActiveContent = {
	AC_AddExtension:function(src, ext)
	{
	  if (src.indexOf('?') != -1)
		return src.replace(/\?/, ext+'?'); 
	  else
		return src + ext;
	},
	
	AC_Generateobj:function(objAttrs, params, embedAttrs) 
	{ 
	  var str = '<object ';
	  for (var i in objAttrs)
		str += i + '="' + objAttrs[i] + '" ';
	  str += '>';
	  for (var i in params)
		str += '<param name="' + i + '" value="' + params[i] + '" /> ';
	  str += '<embed ';
	  for (var i in embedAttrs)
		str += i + '="' + embedAttrs[i] + '" ';
	  str += ' ></embed></object>';
	
	  document.write(str);
	},
	
	AC_FL_RunContent:function()
	{
	  var ret = this.AC_GetArgs (arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
	  this.AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	},
	
	AC_SW_RunContent:function(arguments)
	{
	  var ret = this.AC_GetArgs(arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000", null);
	  this.AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	},
	
	AC_GetArgs:function(args, ext, srcParamName, classid, mimeType)
	{
	  var ret = new Object();
	  ret.embedAttrs = new Object();
	  ret.params = new Object();
	  ret.objAttrs = new Object();
	  for (var i=0; i < args.length; i=i+2){
		var currArg = args[i].toLowerCase();    
		switch (currArg){	
		  case "classid":
			break;
		  case "pluginspage":
			ret.embedAttrs[args[i]] = args[i+1];
			break;
		  case "src":
		  case "movie":	
			args[i+1] = this.AC_AddExtension(args[i+1], ext);
			ret.embedAttrs["src"] = args[i+1];
			ret.params[srcParamName] = args[i+1];
			break;
		  case "onafterupdate":
		  case "onbeforeupdate":
		  case "onblur":
		  case "oncellchange":
		  case "onclick":
		  case "ondblClick":
		  case "ondrag":
		  case "ondragend":
		  case "ondragenter":
		  case "ondragleave":
		  case "ondragover":
		  case "ondrop":
		  case "onfinish":
		  case "onfocus":
		  case "onhelp":
		  case "onmousedown":
		  case "onmouseup":
		  case "onmouseover":
		  case "onmousemove":
		  case "onmouseout":
		  case "onkeypress":
		  case "onkeydown":
		  case "onkeyup":
		  case "onload":
		  case "onlosecapture":
		  case "onpropertychange":
		  case "onreadystatechange":
		  case "onrowsdelete":
		  case "onrowenter":
		  case "onrowexit":
		  case "onrowsinserted":
		  case "onstart":
		  case "onscroll":
		  case "onbeforeeditfocus":
		  case "onactivate":
		  case "onbeforedeactivate":
		  case "ondeactivate":
		  case "type":
		  case "codebase":
			ret.objAttrs[args[i]] = args[i+1];
			break;
		  case "width":
		  case "height":
		  case "align":
		  case "vspace": 
		  case "hspace":
		  case "class":
		  case "title":
		  case "accesskey":
		  case "name":
		  case "id":
		  case "tabindex":
			ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
			break;
		  default:
			ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
		}
	  }
	  ret.objAttrs["classid"] = classid;
	  if (mimeType) ret.embedAttrs["type"] = mimeType;
	  return ret;
	}
};

/******************************************************************************
 XMLHttpRequest Handler
 

 ******************************************************************************/
SITE.Request = 
{
	get		: function(url) // [target[,callback[,args]]]
	{
		this._request('GET',arguments);
	},
	
	post	: function(url)  //  [target[,callback[,args]]]
	{
		this._request('POST',arguments);
	},
	
	form	: function(form) //  [target[,callback[,args]]]
	{
		if (form.onsubmit)
		{
			if (!form.onsubmit())
			{
				return false;
			};
		};
		var method = (form.method && form.method.toUpperCase()=='POST')?'POST':'GET';
		var url = form.action;
		url += (url.indexOf('?')!=-1)?'&':'?';
		var query = [];
		
		for (var i=0; i<form.elements.length;i++)
		{
			var e = form.elements[i];
			if (e.name!='')
			{ 
				switch(e.nodeName)
				{
					case 'INPUT':
						if 
						(
							e.type.match(/(submit|image|cancel|reset)/) || 
							(e.type.match(/(checkbox|radio)/) && !e.checked)
						)
						{
							continue;
						};
						query[query.length] = escape(e.name) + '=' + escape(e.value);
					break;
					
					case 'TEXTAREA':
						query[query.length] = escape(e.name) + '=' + escape(e.value);
					break;
					
					case 'SELECT':
						query[query.length] = escape(e.name) + '=' + escape(e.options[e.selectedIndex].value);
					break;
				};
			};
		};
		arguments[0] = url + query.join('&');
		this._request(method,arguments);
	},
	
	_request	: function(type,args) // PRIVATE: Use get(), post() or form() instead
	{
		var envelope = {};
		var request = false;
		
		/*@cc_on @*/
		/*@if (@_jscript_version >= 5)
		try { request = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) {
			try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (E) { request = false; };
			};
		@end @*/
		if (!request && typeof XMLHttpRequest!='undefined')
		{
			request = new XMLHttpRequest();
		};
		if (!request)
		{
			return;
		};
		
		envelope.request = request;
		
		var url = args[0] + ((args[0].indexOf('?')!=-1)?'&':'?')+(new Date()).getTime();
		var query = null;
		
		if (type=='POST')
		{
			var uri = url.split('?');
			url = uri[0];
			query = uri[1];
		}
		
		envelope.ram = {};
		if (args[1] && args[1]!=null) { envelope.ram.target = args[1]; };
		if (args[2]) { envelope.ram.callback	= args[2]; };
		if (args[3]) { envelope.ram.args		= args[3]; };
		
		envelope.request.open(type,url,true);
		if (type=='POST')
		{
			envelope.request.setRequestHeader("Method","POST " + url + " HTTP/1.1");
			envelope.request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		}
		envelope.request.send(query);
		
		if (envelope.ram.target || envelope.ram.callback)
		{
			envelope.request.onreadystatechange = function()
			{
				if (envelope.request.readyState==4 && envelope.request.status==200)
				{
					if (envelope.ram.target)
					{
						var target = envelope.ram.target;
						var content = envelope.request.responseText;
						if (SITE.IE && (target.nodeName == 'TBODY' || target.nodeName == 'TABLE'))
						{
							SITE.IE.fixInnerHTML(target, content);
						}
						else
						{
							target.innerHTML = content;
						}
					};
					if (envelope.ram.callback)
					{
						if (envelope.ram.args)
						{
							envelope.ram.callback(envelope.ram.args);
						}
						else
						{
							envelope.ram.callback();
						};
					};
				};
			};
		};
	}
};

/******************************************************************************
 Event Handler / Normalizer
 
 ******************************************************************************/
 
SITE.Event = 
{
	
	addEvent	: function(e, eventType, listener) 
	{
		var elems = new Array();
		(e.push)? elems=e:elems.push(e);
		for (var i=0; i<elems.length; i++) {
			var el = elems[i];
			if(el!=null){
				if(el.addEventListener){
					//W3C standards
					el.addEventListener(eventType, listener, true);
					//return true;
				}else if(el.attachEvent) {
					//IE
					var r = el.attachEvent("on"+eventType, listener);
					//return r;
				}else{
					//return false;
				}
			}
		}
	},
	
	removeEvent		: function(e, eventType, listener) 
	{
		
		var elems = new Array();
		(!e.length)? elems.push(e):elems=e;
		for (var i=0; i<elems.length; i++) {
			var e = elems[i];
			if(e!=null){
				if(typeof window.detachEvent != "undefined") {
					//IE
					e.detachEvent("on"+eventType, listener);
				}else{
					//W3C standards
					e.removeEventListener(eventType, listener, false);
				}
			}
		}
	},
		
	getEventSource 	: function (e)
	{
		//normalize events
		var evt;
		if(typeof window.attachEvent != "undefined") {
			//IE
			e = window.event;
		}
		//normalize events target
		var source;
		if(typeof e.srcElement != "undefined") {
			//IE
			source = e.srcElement;
		}else{
			//W3C standards
			source = e.target;
		}
		/* For most browsers, targ would now be a link element; Safari however
	   returns a text node so we need to check the node type to make sure */
		if (source.nodeType == 3) {
			source = source.parentNode;
		}
		return source;
	}
};

/******************************************************************************
 Links Utils
 
 ******************************************************************************/
SITE.Links = 
{
	onload		: function()
	{
		if (!SITE.hasRequired) { return; };
		
		var links = document.getElementById("content").getElementsByTagName("a");
		var url = document.location.href;
		var base_url = url.substring(0, url.lastIndexOf("/") + 1);
		var glossary_list = new Array();	
 		for (var i=0; i<links.length; i++) {
			if(!links[i].href == false){
				if (links[i].href.indexOf(base_url) == -1 && links[i].href.indexOf("javascript") == -1 && links[i].childNodes[0].nodeType == 3) {
					//links[i].target = "_blank";
					links[i].className += ((links[i].className=='')?'':' ') + "external";
				}
				if (links[i].href.indexOf("?HID=14&L=") > -1 && links[i].rel.indexOf("glossary") == -1){
					//links[i].removeAttribute("href");
					links[i].href += "#" + ((!links[i].title)? links[i].innerHTML : links[i].title);
					links[i].className += ((links[i].className=='')?'':' ') + "glossary";
					glossary_list.push(links[i]);
				}
			}
	 	}
		if(glossary_list.length > 0) SITE.Tooltip.initialize(glossary_list);
	}
};

/******************************************************************************
 Animation
 
 ******************************************************************************/
 
SITE.Anim =
{
	fade		: function(id, startOpacity, endOpacity, speed)
	{
		var deltaOpacity = Math.abs(endOpacity - startOpacity) + 1;
		this.setOpacity(id, startOpacity);
		for(i=0; i<deltaOpacity; i++){
			opacity = (startOpacity > endOpacity)? startOpacity--: startOpacity++;
			setTimeout("SITE.Anim.setOpacity('"+id+"',"+opacity+")", i*speed);
		}
	}, 
	
	setOpacity	: function(id, opacity)
	{	
		e = document.getElementById(id);
		e.style.opacity = (opacity/100);
   		e.style.MozOpacity = (opacity/100);
    	e.style.KhtmlOpacity = (opacity/100);
    	e.style.filter = "alpha(opacity=" + opacity + ")";
	}
}

/******************************************************************************
 Tooltip
 
 ******************************************************************************/
 
SITE.Tooltip = 
{
	name : "tooltip",
	offsetX : 15,
	offsetY : 15,
	tip : null,

	onload 	: function ()
	{
	
		if (!document.getElementById) return;
		this.tip = document.getElementById (this.name);
	},
	
	initialize 	: function (elems)
	{
	
		if (!document.getElementById) return;
		SITE.Event.addEvent(elems, "mouseover", SITE.Tooltip.onMouseOver);
	},
	
	onMouseOver		: function (evt)
	{
		var source = SITE.Event.getEventSource(evt);
		SITE.Tooltip.getDefinition(source);
		SITE.Tooltip.show();
		SITE.Event.addEvent(source, "mousemove", SITE.Tooltip.onMouseMove);
		SITE.Event.addEvent(source, "mouseout", SITE.Tooltip.onMouseOut);	
	},
	
	onMouseOut		: function (evt)
	{
		var source = SITE.Event.getEventSource(evt);
		SITE.Tooltip.hide();
		SITE.Event.removeEvent(source, "mousemove", SITE.Tooltip.onMouseMove);
		SITE.Event.removeEvent(source, "mouseout", SITE.Tooltip.onMouseMove);
	},
	
	onMouseMove		: function (evt)
	{
		var position = SITE.Tooltip.getMousePosition(evt);
		SITE.Tooltip.move(position.x, position.y);
	},
	
	getMousePosition 	: function (evt) 
	{
		
		var position = new Object();
		if (!evt) var evt = window.event;
		if (evt.pageX || evt.pageY) {
			position.x = evt.pageX;
			position.y = evt.pageY;
		}
		else if (evt.clientX || evt.clientY) {
			position.x = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			position.y = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
		return position;
	},
	
	getDefinition		: function(source)
	{
		var term = (!source.title)? source.innerHTML : source.title;
		var url = "ajxGlossary.asp?term=" + term;
		this.tip.innerHTML	= '<h5>'+term+'</h5>Loading&#8230;';
		SITE.Request.get(url, this.tip);
	},
	
	show 	: function () 
	{
		if (!this.tip) return;
		SITE.Anim.fade(this.name, 0, 100, 5);
		this.tip.style.display = "block";
	},
	
	hide 	: function () 
	{
		if (!this.tip) return;
		this.tip.style.display = "none";
		this.tip.innerHTML = "";
	},
	
	move	: function(x, y)
	{
		this.tip.style.top = (y + this.offsetY) + "px";
		this.tip.style.left = (x + this.offsetX) + "px";
	}
};

/******************************************************************************
 Slideshow
 
 ******************************************************************************/
SITE.slideshow = {
	
	slides : [],
	
	create : function (id_slide, arr_images, num_frequence, num_speed, num_delay)
	{	
	
		if (document.getElementById (id_slide)) {
			this.slides[id_slide] = {elem:document.getElementById (id_slide), images:arr_images, index:0, currentImage:null,f:num_frequence, s:num_speed,d:num_delay};}
	},
	
	play : function (id_slide, arr_images, num_frequence, num_speed, num_delay)
	{
		if (this.slides[id_slide]) {
				
				var oSlide = this.slides[id_slide];
				setTimeout("SITE.slideshow.loadImage('" + id_slide + "')", oSlide.d);
				
		} else if(arr_images && num_frequence && num_speed && num_delay){
			
			this.create(id_slide, arr_images, num_frequence, num_speed, num_delay);
			this.play(id_slide);
		}
	},
	
	loadImage : function (id_slide)
	{
		
		var oSlide = this.slides[id_slide];
		var imgloader = new Image();
		imgloader.onload = function(){SITE.slideshow.onImageLoaded(id_slide);}	
		oSlide.loader = imgloader;
		oSlide.loader.style.zIndex = 10000;
		imgloader.src = oSlide.images[oSlide.index];
	},
	
	onImageLoaded : function (id_slide)
	{
		var oSlide = this.slides[id_slide];	
		var id = oSlide.elem.id + "__" + oSlide.index;
		oSlide.elem.style.width = oSlide.loader.width + "px";
		oSlide.elem.style.height = oSlide.loader.height + "px";
		oSlide.elem.appendChild(oSlide.loader);
		oSlide.loader.style.zIndex = 10000;
		oSlide.loader.id = id;
		SITE.Anim.fade(id, 0, 100, oSlide.s);			
				
		setTimeout("SITE.slideshow.onImageInit('"+id_slide+"')", oSlide.s*100);
	},
	
	onImageInit : function(id_slide)
	{
		var oSlide = this.slides[id_slide];
		if(oSlide.currentImage){oSlide.elem.removeChild(oSlide.currentImage);}
		oSlide.currentImage = oSlide.loader;
		oSlide.currentImage.zIndex = 9999;
		oSlide.index = (oSlide.index < oSlide.images.length-1)? oSlide.index+1 : 0;

		setTimeout("SITE.slideshow.loadImage('" + id_slide + "')", oSlide.f);
	}
};

/******************************************************************************/
window.onload	= function() { SITE.onload(); };