var	patience = 0;
var pageFx;
var pageLoader;
var	mainTop;
var	evenementsBulles = new Array();
var canStartBulles = 0;

function	openPage(page)
{
	startPatience();
	switch(page)
	{
	case 'accueil':
		window.location = '/';
		break;
	default:
		window.location = '/?page=' + page;
		break;
	}
}

function startPatience()
{
	patience++;
	if (patience == 1)
	{
		$('chargement').setStyle('display', 'block');
		$('chargement').setOpacity(1);
	}
}

function stopPatience()
{
	patience--;
	if (patience == 0)
		$('chargement').setOpacity(0);
}

function setTitre(str)
{
	var	re = /([A-HJ-Za-hj-z0-9_]+)([A-HJ-Za-hj-z0-9_]i\w*)/g;
	var newstr;

	if (re.test(str))
		newstr = str.replace(re, '<span class="noir">$1</span><span class="orange">$2</span>');
	else
	{
		re = /(\w+)(\w{3})/g;
		newstr = str.replace(re, '<span class="noir">$1</span><span class="orange">$2</span>');
	}
	$('title').setHTML(newstr);
}

function getPage(url, name)
{
	if (pageLoader == null)
	{
		pageLoader = new Ajax
		(
			'http://www.cansii.com/contenu/' + url,
			{
				method: 'GET',
				encoding: 'iso-8859-1',
			    onComplete: function(response)
				{
					pageFx.stop();
					$('main').setHTML(response);
					if ($('main').getElement('h3'))
					{
						setTitre($('main').getElement('h3').innerHTML);
						document.title = 'CANSII - ' + $('main').getElement('h3').getText();
					}
					else
					{
						setTitre('Cansii');
						document.title = 'CANSII';
					}
					$('main').getElements('script').every
					(
						function(item, index)
						{
							if (!item.getProperty('src') || (item.getProperty('src') == ''))
							{
								if (window.execScript)
								{
									try
									{
										window.execScript(item.innerHTML);
									}
									catch(e){}
								}
								else
									window.setTimeout(item.innerHTML, 100);
							}
							else
							{
								if (window.execScript)
								{
									var xhr1;

									xhr1 = new Ajax('/' + item.getProperty('src'), {evalResponse: true, async: false, method: 'get'});
									xhr1.request();
								}
								else
								{
									var js;

									js = new Element('script', {'src': item.getProperty('src') , 'type':'text/javascript'});
									if (js)
										js.injectInside($(document.head));
								}
							}
							return true;
						}
					);
					stopPatience();
					pageFx.start( - $('main').getStyle('height').toInt(), mainTop);
				},
				onFailure: function()
				{
					clearPage();
					getPage('accueil.php', '/');
					stopPatience();
				},
				onCancel: function()
				{
					stopPatience();
					pageFx.start( - $('main').getStyle('height').toInt(), mainTop);
				},
				onRequest: function()
				{
					startPatience();
					pageFx.start(mainTop,  - $('main').getStyle('height').toInt());
				}
			}
		);
	}
	else
	{
		pageLoader.cancel();
		pageLoader.url = 'http://www.cansii.com/contenu/' + url;
	}
	if (pageFx == null)
	{
		pageFx = new Fx.Style('main', 'top', {duration: 500});
		mainTop = $('main').getStyle('top').toInt();
	}
	StopBulles();
	pageLoader.request();
	try {
		var pageTracker = _gat._getTracker("UA-9048173-1");
		pageTracker._trackPageview(name);
	} catch(err) {}
}

function	clearPage()
{
	StopBulles();
	$('main').setHTML('');
}

function	setContactEmail()
{
	var		chaine = 'mailto:';

	chaine += 'contact';
	chaine += '@';
	chaine += 'cansii.com';
	location.href = chaine;
}

function ZoomImage(e)
{
	var		evt;
	var		elm;
	var		image;
	var		fond;
	var		x, y, w, h;
	var		imgZoomer;

	if (e)
		evt = e;
	else
		evt = window.event;
	if (evt.srcElement)
		elm = evt.srcElement;
	else
		elm = evt.target;
	fondImage = new Element
	(
		'div',
		{
			'id':'FondImage',
			'style':
			{
				'position':'absolute'
			}
		}
	);
	fondImage.injectTop($(document.body));
	fondImage.setStyles
	(
		{
			'position':'absolute',
			'top':0,
			'left':0,
			'right':0,
			'bottom':0,
			'z-index':99,
			'background-color':'black',
			'opacity':0
		}
	);
	image = new Element
	(
		'img',
		{			
			'src':$(elm).src,
			'id':'ImageFull',
			'style':
			{
				'position':'absolute',
				'opacity':0
			},
			'events':
			{
				'click':function() {UnZoomImage();}
			}
		}
	);
	image.injectTop($(document.body));
	w = image.getStyle('width').toInt();
	h = image.getStyle('height').toInt();
	if (w > window.getWidth())
	{
		h *= window.getWidth() / w;
		w = window.getWidth();
	}
	if (h > window.getHeight())
	{
		w *= window.getHeight() / h;
		h = window.getHeight()
	}
	x = (window.getWidth() - w) / 2;
	y = (window.getHeight() - h) / 2;
	imgZoomer = new Fx.Elements
	(
		[image, fondImage],
		{
			duration: 500,
			transition: Fx.Transitions.linear
		}
	);
	image.setStyles
	(
		{
			'position':'absolute',
			'z-index':100,
			'top':elm.getTop(),
			'left':elm.getLeft(),
			'width':elm.getCoordinates().width,
			'height':elm.getCoordinates().height,
			'opacity':1
		}
	);
	imgZoomer.start
	({
		'0':
		{
			'top':[elm.getTop(), y],
			'left':[elm.getLeft(), x],
			'width':[elm.getCoordinates().width, w],
			'height':[elm.getCoordinates().height, h]
		},
		'1':
		{
			'opacity':[0, .8]
		}
	});
}

function UnZoomImage(e)
{
	var		evt;
	var		elm;
	var		image;
	var		fond;
	var		imgZoomer;

	if (e)
		evt = e;
	else
		evt = window.event;
	if (evt.srcElement)
		elm = evt.srcElement;
	else
		elm = evt.target;
	fondImage = $('FondImage');
	image = $('ImageFull');
	imgZoomer = new Fx.Elements
	(
		[image, fondImage],
		{
			duration: 500,
			transition: Fx.Transitions.linear,
			onComplete:function()
			{
				fondImage.remove();
				image.remove();
			},
			onCancel:function()
			{
				fondImage.remove();
				image.remove();
			}
		}
	);
	imgZoomer.start
	({
		'0':
		{
			'opacity':[.8, 0]
		},
		'1':
		{
			'opacity':[.8, 0]
		}
	});
}

function LigneDeBulle(x, y, compteur, precedent, index)
{
	var EstUneLigne;
	var EstUnMenu = false;
	var centreBulleX, centreBulleY;
	var diametreMax = 100;
	var probas;
	var tirageTypeLigne;
	var typeLigne;
	var hMax, wMax;
	var decote;
	
	hMax = $('main').getCoordinates().height;
	wMax = $('main').getCoordinates().width;
	decote = ((Math.min(hMax, wMax) - diametreMax) / diametreMax);
	EstUneLigne = (Math.random() * 5) > (compteur - decote);
	if ((hMax < (y + 1.6 * diametreMax) && (wMax < (x + 1.6 * diametreMax))))
		EstUneLigne = false;
	if (!EstUneLigne)
	{
		// On doit dessiner une bulle
		switch(precedent)
		{
		case 'v':
			centreBulleX = x;
			centreBulleY = Math.floor(y + diametreMax / 2);
			break;
		case 'h':
			centreBulleX = Math.floor(x + diametreMax / 2);
			centreBulleY = y;
			break;
		case 'd':
			centreBulleX = Math.floor(x + 1.41 / 4 * diametreMax);
			centreBulleY = Math.floor(y + 1.41 / 4 * diametreMax);
			break;
		}
		if (index)
		{
			// Ici on doit dessinner une bulle de menu
			if (!HasCollisionBulle(centreBulleX, centreBulleY, diametreMax))
				EstUnMenu = true;
			else
			{
				if ((hMax > (y + 1.6 * diametreMax) || (wMax > (x + 1.6 * diametreMax))))
					// Finalement on dessine une ligne
					EstUneLigne = true;
			}
		}
	}
	if (EstUneLigne)
	{
		// On doit choisir le type de ligne à dessiner
		// Les probabilités dépendent de la bulle finale
		switch(index)
		{
		case 5:
			probas = [2, 7, 0];
			break;
		case 4:
			probas = [1, 4, 1];
			break;
		case 3:
			probas = [2, 1, 1];
			break;
		case 2:
			probas = [1, 1, 4];
			break;
		case 1:
			probas = [2, 0, 7];
			break;
		default:
			probas = [2, 1, 1];
			break;
		}
		tirageTypeLigne = Math.random() * (probas[0] + probas[1] + probas[2]);
		if (tirageTypeLigne < probas[0])
			typeLigne = 'd';
		if ((tirageTypeLigne >= probas[0]) && (tirageTypeLigne < (probas[0] + probas[1])))
			typeLigne = 'h';
		if (tirageTypeLigne >= (probas[0] + probas[1]))
			typeLigne = 'v';
		if ((typeLigne != 'v') && (wMax < (x + 1.2 * diametreMax)))
			typeLigne = 'v';
		if ((typeLigne == 'v') && (hMax < (y + 1.8 * diametreMax)))
			typeLigne = 'h';
		if ((typeLigne != 'h') && (hMax < (y + 1.2 * diametreMax)))
			typeLigne = 'h';
		if ((typeLigne == 'h') && (wMax < (x + 1.8 * diametreMax)))
			typeLigne = 'v';
		DrawLigneBulle(x, y, diametreMax, compteur, typeLigne, index);
	}
	else
		DrawBulle(x, y, centreBulleX, centreBulleY, diametreMax, EstUnMenu, index);
}

function DrawLigneBulle(x, y, diametreMax, compteur, typeLigne, index)
{
	var image;
	var src;
	var diametre;
	var delai;
	var imgs = ['Images/Diagonale1.png', 'Images/Horizontale.png', 'Images/Verticale.png'];
	var effet;
	var newX, newY;
	
	diametre = Math.ceil(Math.random() * diametreMax * 9 / 10 + diametreMax / 10);
	delai = Math.random() * 100 + 450;
	image = new Element('img', {'class':'Bulle', 'style': {'display':'none'}});
	switch(typeLigne)
	{
	case 'v':
		image.src = imgs[2];
		newX = x;
		newY = y + diametre;
		break;
	case 'h':
		image.src = imgs[1];
		newX = x + diametre;
		newY = y;
		break;
	case 'd':
		image.src = imgs[0];
		newX = Math.floor(x + diametre * 1.41 / 2);
		newY = Math.floor(y + diametre * 1.41 / 2);
		break;
	}
	image.injectTop($('main'));
	IE6Fixes();
	image.setStyles
	(
		{
			'position':'absolute',
			'display':'block',
			'bottom':y,
			'left':x,
			'width':0,
			'height':0
		}
	);
	effet = new Fx.Styles
	(
		image,
		{
			duration: delai,
			transition: Fx.Transitions.linear,
			onStart:function()
			{
				evenementsBulles.include(effet);
			},
			onCancel:function()
			{
				evenementsBulles.remove(effet);
			},
			onComplete: function()
			{
				evenementsBulles.remove(effet);
				if (typeLigne == 'd')
					image.setStyles({'height':diametreMax, 'width':diametreMax, 'clip':'rect(' + Math.ceil((diametreMax - diametre) * 1.41 / 2) + 'px ' + Math.ceil(diametre * 1.41 / 2) + 'px auto auto)'});
				if (typeLigne == 'v')
					image.setStyles({'height':diametreMax, 'width':diametreMax, 'clip':'rect(' + Math.ceil(diametreMax - diametre) + 'px 2px auto auto)'});
				if (typeLigne == 'h')
					image.setStyles({'height':diametreMax, 'width':diametreMax, 'clip':'rect(' + Math.ceil(diametreMax - 2) + 'px ' + Math.ceil(diametre) + 'px auto auto)'});
				LigneDeBulle(newX, newY, compteur + 1, typeLigne, index);
				if ((Math.random() * compteur) < .2)
					LigneDeBulle(newX, newY, compteur + 1, typeLigne, null);
			}
		}
	);
	if (canStartBulles == 1)
	{
		switch(typeLigne)
		{
		case 'v':
			effet.start({'width':[0, diametreMax], 'height':[0, diametre]});
			break;
		case 'h':
			effet.start({'width':[0, diametre], 'height':[0, diametreMax]});
			break;
		case 'd':
			effet.start({'width':[0, Math.ceil(diametre * 1.41 / 2)], 'height':[0, Math.ceil(diametre * 1.41 / 2)]});
			break;
		}
	}
}

function DrawBulle(x, y, centreBulleX, centreBulleY, diametreMax, EstUnMenu, index)
{
	var image;
	var diametre;
	var delai;
	var effet;
	var menu;
	
	delai = Math.random() * 100 + 450;
	image = new Element('img', {'class':'Bulle', 'style': {'display':'none'}});
	image.src = 'Images/Cercle.png';
	image.injectTop($('main'));
	IE6Fixes();
	image.setStyles
	(
		{
			'position':'absolute',
			'display':'block',
			'bottom':centreBulleY,
			'left':centreBulleX,
			'width':0,
			'height':0
		}
	);
	if (EstUnMenu)
	{
		diametre = diametreMax;
		menu = $('menu').getElements('a')[index].clone();
		menu.addClass('Bulle');
		image.addClass('BulleMenu');
		image.id = 'Bulle' + index;
		image.src = 'Images/CercleBlanc.png';
		image.setStyle('z-index', 79);
		image.addEvent('mouseover', function(){image.src = 'Images/CercleNoir.png'});
		image.addEvent('mouseout', function(){image.src = 'Images/CercleBlanc.png'});
		menu.addEvent('mouseover', function(){image.src = 'Images/CercleNoir.png'});
		menu.addEvent('mouseout', function(){image.src = 'Images/CercleBlanc.png'});
	}
	else
	{
		diametre = Math.ceil(Math.random() * diametreMax / 2 + diametreMax / 5);
		centreBulleX = x + (centreBulleX - x) * diametre  /diametreMax;
		centreBulleY = y + (centreBulleY - y) * diametre  /diametreMax;
	}
	effet = new Fx.Styles
	(
		image,
		{
			duration: delai,
			transition: Fx.Transitions.linear,
			onStart:function()
			{
				evenementsBulles.include(effet);
			},
			onCancel:function()
			{
				evenementsBulles.remove(effet);
			},
			onComplete: function()
			{
				evenementsBulles.remove(effet);
				CreerBulle(centreBulleX, centreBulleY, 0);
				if (EstUnMenu)
				{
					menu.injectAfter(image);							
					if (menu.getStyle('width').toInt() > diametreMax)
						menu.setStyle('font-size', '.8em');
					menu.setStyles({'position':'absolute', 'bottom':Math.floor(centreBulleY - menu.getCoordinates().height / 2) + 'px', 'left':Math.floor(centreBulleX - menu.getCoordinates().width / 2) + 'px', 'z-index':80});
					image.addEvent('click', function() {menu.onclick()});
				}
				else
				{
					if (diametre <= diametreMax / 2)
						image.src = 'Images/PetitCercle.png';
				}
			}
		}
	);
	if (canStartBulles == 1)
		effet.start({'width':[0, diametre], 'height':[0, diametre], 'bottom':[y, centreBulleY - diametre / 2], 'left':[x, centreBulleX - diametre / 2]});
}


function	CreerBulle(x, y, d)
{
	var image;
	
	if (d == 0)
		d = Math.random() * 30 + 20;
	image = new Element
	(
		'img',
		{
			'src':'Images/PetitCercle.png',
			'class':'Bulle',
			'style':
			{
				'display':'none'
			}
		}
	);
	image.injectTop($('main'));
	IE6Fixes();
	image.setStyles
	(
		{
			'position':'absolute',
			'display':'block',
			'bottom':y,
			'left':x,
			'width':d,
			'height':d
		}
	);
	Bulle(x, y, image);
}
function	Bulle(x, y, image)
{
	var dx, dy;
	var effet;
	var duree;
	var d;
	var f;
	
	dx = Math.random() * 100 - 50;
	dy = Math.random() * 100 - 50;
	duree = Math.random() * 200 + 900;
	if (((dy + y + 50) >= $('main').getCoordinates().height) || ((dy + y) < 50))
		dy = -dy;
	if (((dx + x + 50) >= $('main').getCoordinates().width) || ((dx + x) < 50))
		dx = -dx;
	effet = new Fx.Styles
	(
		image,
		{
			duration: duree,
			transition: Fx.Transitions.linear,
			onStart:function()
			{
				evenementsBulles.include(effet);
			},
			onCancel:function()
			{
				evenementsBulles.remove(effet);
			},
			onComplete: function()
			{
				evenementsBulles.remove(effet);
				if (Math.random() * 10 < 1)
				{
					d = image.getStyle('width').toInt();
					image.remove();
					f = Math.random();
					if ((f * d) > 5)
						CreerBulle(x + dx, y + dy, d * f);
					if (((1 - f) * d) > 5)
						CreerBulle(x + dx, y + dy, d * (1 - f));
				}
				else
					Bulle(x + dx, y + dy, image);
			}
		}
	);
	if (canStartBulles == 1)
		effet.start({'left':[x, x + dx], 'bottom':[y, y + dy]});
}
function StopBulles()
{
	canStartBulles = 2;
	for (i = evenementsBulles.length; i > 0; i--)
	{
		try
		{
			evenementsBulles[i - 1].stop();
			evenementsBulles[i - 1].remove();
		}
		catch(e){}
	}
}
function InitBulles()
{
	var cmd;
	var image;
	var childs;

	image = new Element
	(
		'img',
		{			
			'src':'Images/CercleBlanc.png',
			'id':'Bulle0',
			'class':'Bulle BulleMenu',
			'style':
			{
				'display':'none'
			},
			'events':
			{
				'mouseover': function(){image.src = 'Images/CercleNoir.png'},
				'mouseout': function(){image.src = 'Images/CercleBlanc.png'},
				'click': function()
				{
					StopBulles();
					childs = $('main').getElements('[class^=Bulle]');
					for (i = childs.length; i > 0; i--)
					{
						try
						{
							childs[i - 1].remove();
						}
						catch(e){}
					}
					InitBulles();
					StartBulles();
				}
			}
		}
	);
	image.injectTop($('main'));
	IE6Fixes();
	image.setStyles
	(
		{
			'position':'absolute',
			'display':'block',
			'width':100,
			'height':100,
			'bottom':'0px',
			'left':'0px',
			'z-index':81
		}
	);
	cmd = $('menu').getElement('a').clone();
	cmd.addEvent('mouseover', function(){image.src = 'Images/CercleNoir.png'});
	cmd.addEvent('mouseout', function(){image.src = 'Images/CercleBlanc.png'});
	cmd.injectAfter(image);
	cmd.setStyles({'position':'absolute', 'bottom':Math.floor(50 - cmd.getCoordinates().height / 2), 'left':Math.floor(50 - cmd.getCoordinates().width / 2), 'z-index':82});
}

function StartBulles()
{
	var menus;
	
	canStartBulles = 1;
	menus = $('menu').getElements('a');
	for (i = 1; i < menus.length; i++)
		LigneDeBulle((menus.length - i + 1) * 10 + 20, i * 10 + 20, 0, 0, i);
}

function HasCollisionBulle(x, y, diametreMax)
{
	var	bRslt = false;
	var bulles;
	var	i;
	var x2, y2;
	var dist;
	var dmin = 1000;
	
	bulles = $('main').getElements('img[class$=BulleMenu]');
	for (i = 0; (i < bulles.length) && !bRslt; i++)
	{
		x2 = bulles[i].getStyle('left').toInt();
		y2 = bulles[i].getStyle('bottom').toInt();
		dist = Math.pow(Math.pow(x - (x2 + diametreMax / 2), 2) + Math.pow(y - (y2 + diametreMax / 2), 2), .5);
		dmin = Math.min(dmin, dist);
		if (dist < 100)
			bRslt = true;
	}
	return bRslt;
}

function IE6Fixes()
{
	var imgs;
	
	if (/MSIE (5|6)/.test(navigator.userAgent))
	{
		imgs = $('main').getElements('img');
		for (i = 0; i < imgs.length; i++)
		{
			if (/\.png$/.test(imgs[i].src.toLowerCase()))
				imgs[i].src = imgs[i].src.substr(0, imgs[i].src.length - 3) + 'gif';
		}	
	}	
}