function addDOMLoadEvent(func) {//http://www.thefutureoftheweb.com/blog/2006/6/adddomloadevent
	/*@cc_on
		@if (@_jscript_version < 5.5)
			return;
	   @end
	@*/
   if (!window.__load_events) {
      var init = function () {
          if (arguments.callee.done) return; arguments.callee.done = true;
          if (window.__load_timer) {clearInterval(window.__load_timer);window.__load_timer = null;}
          for (var i=0;i < window.__load_events.length;i++) {window.__load_events[i]();}
          window.__load_events = null;
      };
      if (document.addEventListener) {document.addEventListener("DOMContentLoaded", init, false);}
      /*@cc_on @*/
      /*@if (@_win32)
          document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");
          var script = document.getElementById("__ie_onload");
          script.onreadystatechange = function() {
              if (this.readyState == "complete") {
                  init(); // call the onload handler
              }
          };
      /*@end @*/
      if (/WebKit/i.test(navigator.userAgent)) {
          window.__load_timer = setInterval(function() {
              if (/loaded|complete/.test(document.readyState)) {init();}
          }, 10);
      }
      window.onload = init;	window.__load_events = [];
   }
   window.__load_events.push(func);
};
var Preloader = {
	callbacks: [],
	images: [],
	loadedImages: [],
	imagesLoaded: 0,
	add: function(image){
		if (typeof image == 'string') this.images.push(image);
		if (typeof image == 'array' || typeof image == 'object') {
			for (var i=0; i< image.length; i++){
				this.images.push(image[i]);
			}
		}
	},
	onFinish: function(func){
		if (typeof func == 'function') this.callbacks.push(func);
		if (typeof func == 'array' || typeof func == 'object') {
			for (var i=0; i< func.length; i++){
				this.callbacks.push(func[i]);
			}
		}
	},
	load: function(){	
		for(var i=0; i<this.images.length; i++){ 
			this.loadedImages[i] = new Image();
			this.loadedImages[i].onload = function(){ Preloader.checkFinished.apply(Preloader); }
			this.loadedImages[i].src = this.images[i];
		}
	},
	checkFinished: function(){
		this.imagesLoaded++; 
		if (this.imagesLoaded == this.images.length) { this.fireFinish(); } 
	},
	fireFinish: function(){
		for (var i=0; i<this.callbacks.length; i++){
			this.callbacks[i]();
		}
		this.images = [];
		this.loadedImages = [];
		this.imagesLoaded = 0;
		this.callbacks = [];
	}
};
//
var Core = {};
Core.addClass = function(target, theClass)	{
	if (!Core.hasClass(target, theClass)) {
		if (target.className == "") {
			target.className = theClass;
		} else {
			target.className += " " + theClass;
		}
	}
};
Core.elemsByClass = function(tagName,theClass) {
	var elemArr = [];
	var matchedArr = [];
	var pattern = new RegExp("(^| )" + theClass + "( |$)");
	elemArr = document.getElementsByTagName(tagName);
	for(var i=0; i<elemArr.length; i++) {
		if(pattern.test(elemArr[i].className)) {
			matchedArr[matchedArr.length] = elemArr[i];
		}
	}
	return matchedArr;
};
Core.removeClass = function(target, theClass) {
	var pattern = new RegExp("(^| )" + theClass + "( |$)");
	target.className = target.className.replace(pattern, "$1");
	target.className = target.className.replace(/ $/, "");
};
Core.hasClass = function(target, theClass) {
	var pattern = new RegExp("(^| )" + theClass + "( |$)");
	if (pattern.test(target.className)) {
		return true;
	}
	return false;
};
Core.replaceClass = function(target, oldClass, newClass) {
	if(Core.hasClass(target, oldClass)) {
		Core.removeClass(target, oldClass);
		Core.addClass(target, newClass);
	}
};
// core GALLERY :
Core.getPageScroll = function() {
	var yScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // IE6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}
	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;		
};
Core.getPageSize = function() {
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all bar IE
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other IE's
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}
	if(yScroll < windowHeight){// for small pages with total height<viewport
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	if(xScroll < windowWidth){// for small pages with total width<viewport	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) ;
	return arrayPageSize;		
};
Core.elemsByRel = function(tagName, relName) {
	var elemArr = [];
	var matchedArr = [];
	elemArr = document.getElementsByTagName(tagName);
	for(var i=0; i<elemArr.length; i++) {
		if(elemArr[i].getAttribute("rel")==relName) {
			matchedArr[matchedArr.length] = elemArr[i];
		}
	}
	return matchedArr;
};
Core.scrubIt = function() {
	if(this.blur) this.blur();
};

// WINDOW events:
var WinEvents = {
	init : function() {
		
		var ie_6 = document.compatMode && document.all && !window.XMLHttpRequest ? true : false;
		var rel_links = Core.elemsByRel("a", "external");
		for(var i=0; i<rel_links.length; i++) {
			// exclude results:
			rel_links[i].onclick = WinEvents.extWinHandler;
			if(ie_6) { Core.addClass(rel_links[i], 'external'); }
		};
	},
	new_win : null,
	extWinHandler : function() {
		new_win = open(this.href, "newwin");
		if(new_win.focus) new_win.focus();
		return false;
	}
};
var customWin = null;
function winHandler(url, win, w, h, scrolls) {
	var posleft = (screen.width-w)/2;
	var postop = (screen.height-h)/2;
	var features = "width="+w+", height="+h+", scrollbars="+scrolls+", resizable=no, left="+posleft+", top="+postop;
	var pop_win = open(url, win, features);
	if(window.focus) pop_win.focus();
	var rVal = win.indexOf("polltarget")!= -1 ? true : false;
	return rVal; // returns true for forms
};
// CONTENT events :
Core.newElem = function(nodetype, p, id, c, t) {
	var e = document.createElement(nodetype);
	if(id) e.setAttribute("id", id);
	if(c) Core.addClass(e, c);
	if(t) {
		var txt = document.createTextNode(t);
		e.appendChild(txt);
	}
	if(p) p.appendChild(e);
	return e;
};
Core.hideElems = function() {
	var elems = arguments;
	if(elems.length) {
		if( elems.length == 1) {
			if( document.getElementById(elems)) {
				document.getElementById(elems).style.display = 'none';
			}
		} else {
			for(var i=0; i<elems.length; i++) {
				if( document.getElementById(elems[i]) ) {
					document.getElementById(elems[i]).style.display = 'none';
				}
			};
		}
	}
};
Core.newListLink = function(url, textnode_str, title_str, parentElem, extWin) {
	var objList = document.createElement("li");
	var objLink = document.createElement("a");
	objLink.setAttribute("href", url);
	if(title_str) {	objLink.setAttribute("title", title_str);	}
	if(extWin==true) {
		objLink.setAttribute("rel", "external");
		objLink.onclick = WinEvents.extWinHandler;
	}
	if(textnode_str!=null) {
		var textNode = document.createTextNode(textnode_str);
		objLink.appendChild(textNode);
	}
	objList.appendChild(objLink);
	parentElem.appendChild(objList);
	return objList;
};
var Detect = {};
Detect.getVersionIE = function() {
	// Detect versions 4-8
	if( this.isMSIE() ) {
		if(window.XDomainRequest) {
			return 8;
		} else if (document.documentElement && typeof document.documentElement.style.maxHeight!="undefined") {
			return 7;
		} else if (document.compatMode) {
			return 6;
		} else if (window.createPopup) {
			return 5.5;
		} else if (window.attachEvent) {
			return 5;
		} else {
			return 4;
		}
	}
	return false;
}
Detect.isMSIE = function() {
	return window.document.all ? true : false;
};
var Str = {};
Str.parseNum = function(str) {
	var pattern = new RegExp(/[1-9]+\d+\d|[1-9]+\d|[1-9]/);
	if( pattern.test(str) ) {
		return parseInt(pattern.exec(str));
	}	else {
		return 0;
	}
};
Str.trimWhitespace = function(str) {
	str = str.replace(new RegExp(/^\s+/),""); // START
	str = str.replace(new RegExp(/\s+$/),""); // END
	return str;
};
function scrubElems() {
	if(!document.getElementsByTagName) return;
	var pagelinks = document.getElementsByTagName("a");
	for(var i=0; i<pagelinks.length; i++) {pagelinks[i].onfocus = Core.scrubIt;}
	if(document.getElementsByTagName("input")) {
		var inputfields = document.getElementsByTagName("input");
		for(i=0; i<inputfields.length; i++) {
			if(inputfields[i].getAttribute("type") == "radio") {
				inputfields[i].onfocus = Core.scrubIt;
			}
		}
	}
};
function preloadItems() {
	if( Detect.isMSIE() && Detect.getVersionIE() <=6) {
		return false;	
	} else {
		var pageId = (document.body.id).toLowerCase();
		var assets = pageId=='p_portico' || pageId=='m_links' ? 'assets/' : '../assets/';
		var graphics = new Array (assets+'theme/headergrad.png', assets+'scroller/loading.gif');
		if(pageId) {
			Preloader.add(graphics);
			Preloader.load();
		}
	}
}
function initWinEvents() { WinEvents.init(); }
addDOMLoadEvent(scrubElems);
addDOMLoadEvent(initWinEvents);
addDOMLoadEvent(preloadItems);
