function getById(el) {
	return document.getElementById(el);
}

function getByTag(par,el) {
	var par = (par == '') ? document.body : par;
	return par.getElementsByTagName(el);
}

function addClass(obj,newClass) {
	if(!obj.className.match(new RegExp(newClass)))
		obj.className+=(obj.className.length>0? " ": "") + newClass;
}
	
function removeClass(obj,oldClass) {
	obj.className=obj.className.replace(new RegExp("( ?|^)"+oldClass+"\\b"), "");
}

function setLinks(linkTags){
	var linkCollection = [];
	for (var j = 0; linkTags[j]; j++) {
		linkCollection[j] = getByTag('',linkTags[j]);
		for (var i = 0; linkCollection[j][i]; i++) {
			if(/bookmark|external|corporate|sponsor/.test(linkCollection[j][i].getAttribute('rel'))) {
				linkCollection[j][i].onclick = function(e) {
					if (!e) var e = window.event;
					if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey)
						return true;
					window.open(this.href);
					return false;
				}
			}
		}
	}
}

function initMenu() {
	var projects = getById('projects');
	if(!projects) return;
	var caller = getByTag(projects,'h3')[0];
	if(!caller) return;
	var ulColl = getByTag(projects,'ul');
	if(!ulColl[0]) return;
	for(var i = 0; ulColl[i]; i++) {
		addClass(ulColl[i],'hidden');
	}
	var strongColl = getByTag(projects,'strong');
	for(var i = 0; strongColl[i]; i++) {
		var ul = getByTag(strongColl[i].parentNode,'ul')[0];
		strongColl[i].ul = ul;
	}

	new Menu(projects,caller,ulColl[0],strongColl);
}

function Menu(container,caller,layer,togglers) {
	this.container = container;
	this.caller = caller;
	this.layer = layer;
	this.togglers = togglers;

	this.makeDynamic();
}

Menu.prototype.makeDynamic = function () {
	this.container.onmouseover = function (that) {
		return function (e) {
			that.show(e);
			return false;
		}
	}(this);
	this.container.onmouseout = function (that) {
		return function (e) {
			that.hide(e);
			return false;
		}
	}(this);
	for(var i = 0; this.togglers[i]; i++) {
		if(this.togglers[i].ul) {
			this.togglers[i].onclick = function (that) {
				return function () {
					that.toggle(this);
					return false;
				}
			}(this);
		}
	}
}

Menu.prototype.show = function (e) {
	removeClass(this.layer,'hidden');
}

Menu.prototype.hide = function (e) {
	addClass(this.layer,'hidden');
}

Menu.prototype.toggle = function (obj) {
	if(/hidden/.test(obj.ul.className))
		removeClass(obj.ul,'hidden');
	else
		addClass(obj.ul,'hidden');
}

function initToggles() {
	var togglersArray = [];
	if(getById('agencyCall')&&getById('agency'))
		togglersArray[togglersArray.length] = ["agencyCall","agency",'full'];
	if(getById('addressPercheCall')&&getById('addressSaintGermain'))
		togglersArray[togglersArray.length] = ["addressPercheCall","addressSaintGermain",''];
	if(getById('addressParisCall')&&getById('addressParis11'))
		togglersArray[togglersArray.length] = ["addressParisCall","addressParis11",''];
	for(var i = 0; togglersArray[i]; i++) {
		new Toggler(togglersArray[i][0],togglersArray[i][1],togglersArray[i][2],togglersArray);
	}
}



function Toggler(toggler,tgt,tpe,togglersArray) {
	this.toggler = document.getElementById(toggler);
	this.tgt = document.getElementById(tgt);
	this.tpe = tpe;
	this.ml = 0;
	this.togglersArray = togglersArray;
	var a = document.createElement('a');
	a.setAttribute('href','#');
	a.className = 'closer';
	a.appendChild(document.createTextNode('X'));
	this.tgt.appendChild(a);
	this.closer = a;
	addClass(this.tgt,'toggable');
	if(this.tpe!="full") {
		var x = this.toggler.offsetLeft - this.toggler.parentNode.offsetLeft;
		this.tgt.style.marginLeft = x + 'px';
	}
	this.makeToggable();
}

Toggler.prototype.makeToggable = function () {
	this.toggler.onclick = function (that) {
		return function (e) {
			that.toggle(e);
			return false;
		}
	}(this);
	this.closer.onclick = function (that) {
		return function (e) {
			that.toggle(e);
			return false;
		}
	}(this);
}

Toggler.prototype.toggle = function (e) {
	e = e ? e : window.event;
	for(var i = 0; this.togglersArray[i]; i++) {
		var id = this.togglersArray[i][1];
		if(id!=this.tgt.id)
		removeClass(document.getElementById(id),'shown');
	}
	if(/shown/.test(this.tgt.className)) 
		removeClass(this.tgt,'shown');
	else
		addClass(this.tgt,'shown');
}

function fixLowIe() {
	var proj = document.getElementById('projects');
	if(!proj) return;
	proj.onmouseover = function () {
		addClass(this,'hover');
	}
	proj.onmouseout = function () {
		removeClass(this,'hover');
	}
}

/* Init
-------------------- */
var init = function() {
	if (arguments.callee.done) return;
	arguments.callee.done = true;
	if(!document.getElementsByTagName)
		return;
	addClass(getById('page'),'scripted');
	setLinks(['a','area']);
	initMenu();
	initToggles();
	//setAgency();
	/*@cc_on @*/
	/*@if (@_win32)
	newerThanIe6 = eval('document.getElementsByTagName("body")[0].currentStyle.minWidth');
	if (!newerThanIe6) {
		fixLowIe();
	}
	/*@end @*/
}

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init, null);
}
else if (/WebKit/i.test(navigator.userAgent)) {
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			clearInterval(_timer);
			init();
		}
	}, 10);
}
else {
	/*@cc_on @*/
	/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			init();
		}
	};
	/*@end @*/
}
window.onload = init;
