var Valraiso =
{
	namespace : function(name)
	{
		if ( !name || !name.length )
		{
			return null;
		}

		var current = window;
		var names = name.split(".");
		for ( var i = 0 ; i < names.length ; i++ )
		{
			current[names[i]] = current[names[i]] || {};
			current = current[names[i]];
		}
	},

	extend : function(obj, properties)
	{
		if ( !obj )
		{
			return;
		}

		for ( property in properties )
		{
			obj[property] = properties[property];
		}
	}
};

//--------------------------------------------------------------------------->

Valraiso.namespace('Valraiso.images');
Valraiso.images =
{
	toPNG: function(img)
	{
		img = EL(img);

		var src = img.getAttribute("source");

		var browser = Valraiso.net.Browser.Instance;

		if( browser.isMSIE && browser.majorVersion < 7 )
		{
			img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + src + ')';
			img.src=Valraiso.contextPath + '/common/img/none.gif';
		}
		else
		{
			img.src = src;
		}
	},

	changePNG: function(img, src)
	{
		var browser = Valraiso.net.Browser.Instance;

		if( browser.isMSIE && browser.majorVersion < 7 )
		{
			img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + src + ')';
		}
		else
		{
			img.src = src;
		}
	},

	createPNG : function(url)
	{
		var img = document.createElement('img');

		var browser = Valraiso.net.Browser.Instance;

		if( browser.isMSIE && browser.majorVersion < 7 )
		{
			img.src=Valraiso.contextPath + '/common/img/none.gif';
			img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + url + ')';
		}
		else
		{
			img.src=url;
		}

		return img;
	},

	renderPNG : function(url, parent)
	{
		if( parent != null )
		{
			parent = EL(parent);

			var img = Valraiso.images.createPNG(url);
			parent.appendChild(img);
		}
		else
		{
			var s = "<img ";

			var browser = Valraiso.net.Browser.Instance;

			if( browser.isMSIE && browser.majorVersion < 7 )
			{
				s += ' src="' + Valraiso.contextPath + '/common/img/none.gif"';
				s += 'style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + url + ')"';
			}
			else
			{
				s += 'src="' + url + '"';
			}

			s += ">";
			document.write(s);
		}
	},

	mouseOver : function(img, newsrc)
	{
		img = EL(img);

		img.save       = img.src;

		if( newsrc.toLowerCase().indexOf('.png') > -1 )
		{
			img.saveFilter = img.style.filter;
			Valraiso.images.changePNG(img, newsrc);
		}
		else
		{
			img.src = newsrc;
		}
	},

	mouseOut : function(img)
	{
		img = EL(img);

		img.src = img.save;

		if( img.saveFilter != null )
		{
			img.style.filter = img.saveFilter;
		}
	}
};

//--------------------------------------------------------------------------->

Valraiso.namespace('Valraiso.DOM');
Valraiso.DOM =
{
	toElement : function(e)
	{
		if ( typeof e == "string" )
		{
			return document.getElementById(e);
		}

		return e;
	},

	getClassNames : function(element)
	{
		return EL(element).className.split(/\s+/);
	},

	updateClassName : function(element, classNames)
	{
		EL(element).className = classNames.join(' ');
	},

	hasClassName : function(element, className)
	{
		var classes = Valraiso.DOM.getClassNames(element);
		for ( var i = 0 ; i < classes.length ; i++ )
		{
			if ( classes[i] == className )
			{
				return true;
			}
		}

		return false;
	},

	addClassName : function(element, className, multiply)
	{
		if ( Valraiso.DOM.hasClassName(element, className) )
		{
			return;
		}

		var classes = Valraiso.DOM.getClassNames(element);

		if ( multiply )
		{
			var l = classes.length;
			for ( var i = 0 ; i < l ; i++ )
			{
				classes.push(classes[i] + '-' + className);
			}
		}

		classes.push(className);
		Valraiso.DOM.updateClassName(element, classes);
	},

	removeClassName : function(element, className, multiply)
	{
		var classes = Valraiso.DOM.getClassNames(element);
		var newClasses 	= new Array();
		var reg = new RegExp('-?(' + className + '-|' + className + '$)');

		var i, j;
		for ( i = 0, j = 0; i < classes.length ; i++ )
		{
			if ( !multiply )
			{
				if ( classes[i]	!= className )
				{
					newClasses[j++] = classes[i];
				}
			}
			else
			{
				if ( !reg.test(classes[i]) )
				{
					newClasses[j++] = classes[i];
				}
			}
		}

		Valraiso.DOM.updateClassName(element, newClasses);
	}
};
var EL = Valraiso.DOM.toElement;

//--------------------------------------------------------------------------->

Valraiso.namespace("Valraiso.util");
Valraiso.util =
{
	trim : function(s)
	{
		if ( typeof s != "string" )
		{
			return s;
		}

		return s.replace(/^(\s*)([\W\w]*)(\b\s*$)/, '$2');
	},

	checkDate: function(value, format)
	{
		if( value == null || value.length == 0 || value.split('/').length != 3 )
		{
			return false;
		}

		var dayPart;
		var monthPart;
		var yearPart;

		if( format == null || format.split('/').length != 3 )
		{
			format = 'dd/mm/yyyy';
		}

		format          = format.toLowerCase();
		var formatParts = format.split('/');

		function identifyPart(parts, pattern)
		{
			for(var i = 0; i < parts.length ; i ++ )
			{
				if( formatParts[i].indexOf(pattern) > -1 )
				{
					return {index: i, length: formatParts[i].length};
				}
			}

			return null;
		}

		dayPart    = identifyPart(formatParts, 'dd'),
		monthPart  = identifyPart(formatParts, 'mm');
		yearPart   = identifyPart(formatParts, 'yy');

		var valueParts = value.split('/');
		var day        = valueParts[dayPart.index];
		var month      = valueParts[monthPart.index];
		var year       = valueParts[yearPart.index];

		if( day.length != dayPart.length || month.length != monthPart.length || year.length != yearPart.length )
		{
			return false;
		}

		var date        = new Date(year, parseInt(month, 10) - 1, day);
		var yearCompare = ( year.length == 2 ) ? date.getYear() : date.getFullYear();

		if( date.getDate() != parseInt(day, 10) || date.getMonth() != (parseInt(month, 10) - 1) || yearCompare != parseInt(year, 10) )
		{
			return false;
		}

		return true;
	},

	intToString : function(v, nbDigit)
	{
		var s 	= '' + v;
		if ( v < 0 )
		{
			return s;
		}

		var l = nbDigit - s.length;
		if ( l <= 0 )
		{
			return s;
		}

		// insert '0'
		for ( var i = 0; i < l; i++, s = '0' + s );

		return s;
	},

	changeOpacity: function(id, opacity)
	{
		/*
		if( slidePause )
		{
			setTimeout( function() { Valraiso.util.changeOpacity(id, opacity)} , 500);
			return;
		}
		*/

		if( EL(id) == null )
		{
			return;
		}

		var object = EL(id).style;
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
	},

	fading: function(id,opacStart,opacEnd,millisec)
	{
		if( EL(id) == null )
		{
			return;
		}

		//speed for each frame
		var speed = Math.round(millisec / 100);
		var timer = 0;

		//determine the direction for the blending, if start and end are the same nothing happens
		if(opacStart > opacEnd)
		{
			for(i = opacStart; i >= opacEnd; i--)
			{
				//setTimeout("Valraiso.util.changeOpacity('" + id + "'," + i + " )",(timer * speed));
				Valraiso.timer.TaskManager.Instance.addTask( "Valraiso.util.changeOpacity('" + id + "'," + i + " )",(timer * speed), 1);
				timer++;
			}
		}
		else if(opacStart < opacEnd)
		{
			for(i = opacStart; i <= opacEnd; i++)
			{
				//setTimeout("Valraiso.util.changeOpacity('" + id + "'," + i + " )",(timer * speed));
				Valraiso.timer.TaskManager.Instance.addTask( "Valraiso.util.changeOpacity('" + id + "'," + i + " )",(timer * speed), 1 );
				timer++;
			}
		}
	},

	checkEmail: function(val)
	{
		var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
		var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
		var regex = "^"+usr+"\@"+domain+"$";
		var myrxp = new RegExp(regex);

		return(myrxp.test(val));
	},

	addWindowOnload: function(func)
	{
		var windowonload = window.onload;

		window.onload = function()
		{
			if( windowonload != null )
			{
				windowonload();
			}

			func();
		}
	},

	addEnterEvent: function(elt, func)
	{
		if( elt == null )
		{
			return null;
		}

		elt = EL(elt);

		if( document.all )
		{
			elt.onkeydown = function() { if( event.keyCode == 13) func(event); };
		}
		else
		{
			elt.onkeydown = function(e) { if( e.keyCode == 13) func(e); };
		}
	},

	launchWhenBWisLoaded: function( bw, func)
	{
		if( typeof bw == 'string' )
		{
			bw = document.getElementById(bw);
		}

		if( !bw.selfclassName )
		{
			setTimeout( function() { Valraiso.util.launchWhenBWisLoaded( bw, func); }, 500);
			return;
		}

		func();
	}
};

//--------------------------------------------------------------------------->

Valraiso.namespace('Valraiso.timer');
Valraiso.timer.TaskManager = function()
{
	this.initialize.apply(this, arguments)
};

Valraiso.timer.TaskManager.prototype =
{
	tasks:[],

	time: 0,

	initialize: function()
	{
		this.tasks = [];
		this.time  = 0;
	},

	updateTask: function(name, func, interval, nb)
	{
		for(var i = 0; i < this.tasks.length; i ++)
		{
			var t = this.tasks[i];

			if( t.name == name )
			{
				t.func = func;
				t.interval = interval;
				t.nb = nb;
				t.last = new Date().getTime();
				t.counter = 0;

				return;
			}
		}

		this.addTask( func, interval, nb, name);

	},

	addTask: function(func, interval, nb, name)
	{

		var t = {};

		t.func 		= func;
		t.interval 	= interval;
		t.nb 		= nb != null ? nb : 0;
		t.last 		= new Date().getTime();
		t.counter 	= 0;
		t.name 		= name;

		this.tasks.push(t);

	},

	pause: function ()
	{
		this.stopped = true;
	},

	resume : function()
	{
		this.stopped = false;
		this.startTime = new Date().getTime();
	},

	start: function ()
	{
		this.startTime = new Date().getTime();

		setInterval( function() {Valraiso.timer.TaskManager.Instance.loop() } , 150 );

		this.stopped = false;
	},

	restart: function ()
	{
		this.pause();
		this.initialize();
		this.start();
	},

	loop: function ()
	{
		var time = new Date().getTime();

		if( this.stopped )
		{
			return;
		}

		var tmp = [];

		for(var i = 0; i < this.tasks.length; i ++)
		{
			var t = this.tasks[i];

			if( t.nb > 0 && t.counter >= t.nb )
			{
				continue;
			}

			tmp.push(t);
		}

		this.tasks = tmp;

		for(var i = 0; i < this.tasks.length; i ++)
		{
			var t = this.tasks[i];

			if( time - t.last > t.interval )
			{
				if( typeof t.func == 'string' )
				{
					eval(t.func);
				}
				else
				{
					t.func();
				}
				t.last = time;
				t.counter++;
			}
		}
	}
};

Valraiso.timer.TaskManager.Instance = new Valraiso.timer.TaskManager();

//--------------------------------------------------------------------------->

Valraiso.namespace("Valraiso.net");
Valraiso.net.Browser = function()
{
	this.initialize.apply(this, arguments)
};

Valraiso.net.Browser.prototype =
{
	navigator : null,
	platform : null,
	userAgent : null,

	isWin32	: false,
	isLinux	: false,
	isMac	: false,

	isGecko		: false,
	isFirefox 	: false,
	isNetscape 	: false,
	isMSIE		: false,
	isSafari	: false,
	isOpera		: false,

	code : null,
	name : null,

	majorVersion 	: 0,
	minorVersion 	: 0,
	minorVersion2 	: 0,
	version		: "",

	/**
	 * The engine inner object
	 */
	_Engine : function()
	{
		/**
		 * The engine code
		 * (Mozilla, Opera, ...)
		 */
		this.code = navigator.appCodeName;

		/**
		 * The engine version : version + platform + ...
		 */
		this.versionString	= navigator.appVersion;
		this.version 		= parseFloat(this.versionString);

		/**
		 * The name of the client that implements this engine.
		 */
		this.clientName	= navigator.appName;
	},

	//-------------------------------------------->

	/**
	 * Creates a new declared Browser
	 */
	initialize : function()
	{
		this.navigator	= window.navigator;
		this.Engine 	= new this._Engine();
		this.platform	= navigator.platform;
		this.userAgent	= navigator.userAgent;

		this.isWin32	= (this.platform.indexOf("Win32") >= 0);
		this.isLinux	= (this.platform.indexOf("Linux") >= 0);
		this.isMac	= (this.platform.indexOf("Mac") >= 0);

		this.isGecko 	= (this.userAgent.indexOf("Gecko/") >= 0);
		this.isFirefox 	= (this.userAgent.indexOf("Firefox/") >= 0);
		this.isNetscape = (this.userAgent.indexOf("Netscape/") >= 0);
		this.isMSIE	= (this.userAgent.indexOf("MSIE") >= 0);
		this.isSafari	= (this.userAgent.indexOf("Safari/") >= 0);
		this.isOpera	= (this.userAgent.indexOf("Opera") >= 0);
		if( this.isOpera )
		{
			this.isMSIE = false;
		}

		this.code = this.Engine.code;
		if ( this.isGecko )	this.code = "Gecko";
		if ( this.isFirefox ) 	this.code = "Firefox";
		if ( this.isNetscape ) 	this.code = "Netscape";
		if ( this.isMSIE )	this.code = "MSIE";
		if ( this.isSafari )	this.code = "Safari";
		if ( this.isOpera )	this.code = "Opera";

		this.name = this.Engine.clientName;
		if ( this.isFirefox ) 	this.name = "Mozilla Firefox";
		if ( this.isSafari ) 	this.name = "Safari"
		if ( this.isOpera ) 	this.name = "Opera"

		/**
		 * The version of the browser
		 */
		this.version = "" + this.Engine.version;

		//------------------------------------
		// Detect the version of the browser
		//------------------------------------

		if ( this.code )
		{
			var reg = new RegExp(this.code + '/?\\s?;?([\\d.]*)');
			var res = this.userAgent.match(reg);

			if ( res.length == 2 )
			{
				this.version = res[1];

				res = this.version.match(/\d+/g);
				this.majorVersion	= (res[0] ? parseInt(res[0]) : 0);
				this.minorVersion  	= (res[1] ? parseInt(res[1]) : 0);
				this.minorVersion2	= (res[2] ? parseInt(res[2]) : 0);
			}
		}
	}
};
Valraiso.net.Browser.Instance = new Valraiso.net.Browser();

//--------------------------------------------------------------------------->

Valraiso.namespace('Valraiso.CSS');
Valraiso.CSS =
{
	appendNavigatorInformations : function ()
	{
		var list = document.getElementsByTagName("html");
		if ( list != null && list.length > 0 )
		{
			// presume that only one html tag has been declared
			var html = list.item(0);

			// get the browser
			var browser = Valraiso.net.Browser.Instance;
			var classNames = Valraiso.DOM.getClassNames(html);

			classNames.push(browser.isGecko 	? "Gecko" 	: "NotGecko");
			classNames.push(browser.isFirefox 	? "Firefox" 	: "NotFirefox");
			classNames.push(browser.isNetscape 	? "Netscape" 	: "NotNetscape");
			classNames.push(browser.isSafari 	? "Safari" 	: "NotSafari");
			classNames.push(browser.isOpera 	? "Opera" 	: "NotOpera");
			classNames.push(browser.isMSIE 		? "MSIE" 	: "NotMSIE");

			if( browser.isMSIE )
			{
				classNames.push("MSIE" + browser.majorVersion);
			}

			Valraiso.DOM.updateClassName(html, classNames);
		}
	}
};
Valraiso.CSS.appendNavigatorInformations();

//--------------------------------------------------------------------------->

Valraiso.namespace("Valraiso.CSS.events");
Valraiso.CSS.events =
{
	overOn : function(element, multiply)
	{
		Valraiso.DOM.addClassName(element, "over", multiply);
	},

	outOf : function(element, multiply)
	{
		Valraiso.DOM.removeClassName(element, "over", multiply);
	},

	clickOn : function(element, multiply, toggleSelect)
	{
		if ( Valraiso.DOM.hasClassName(element, "clicked") )
		{
			Valraiso.DOM.removeClassName(element, "clicked", multiply);
		}
		else
		{
			Valraiso.DOM.addClassName(element, "clicked", multiply);
		}

		if ( toggleSelect )
		{
			Valraiso.CSS.events.toggleSelect();
		}
	},

	toggleSelect : function()
	{
		var selects = document.getElementsByTagName('select');

		if( selects.length == 0 )
		{
			return;
		}

		var visibility = (selects[0].style.visibility == 'hidden') ? 'visible' : 'hidden';

		for(var i = 0; i < selects.length ; i ++)
		{
			selects.item(i).style.visibility = visibility;
		}
	},

	showSelect : function()
	{
		var selects = document.getElementsByTagName('select');

		if( selects.length == 0 )
		{
			return;
		}

		for(var i = 0; i < selects.length ; i ++)
		{
			selects.item(i).style.visibility = 'visible';
		}
	},

	hideSelect : function()
	{
		var selects = document.getElementsByTagName('select');

		if( selects.length == 0 )
		{
			return;
		}

		for(var i = 0; i < selects.length ; i ++)
		{
			selects.item(i).style.visibility = 'hidden';
		}
	}
};

//--------------------------------------------------------------------------->
Valraiso.namespace('Valraiso.form');
Valraiso.form =
{
	isEmpty: function(element)
	{
		var value = Valraiso.form.getFieldValue(element);

		if( value == null )
		{
			return true;
		}

		return false;
	},

	checkDate: function(element, format)
	{
		var value = Valraiso.form.getFieldValue(element);

		if( value == null )
		{
			return false;
		}

		return Valraiso.util.checkDate(value, format);
	},

	getFieldValue: function(element)
	{
		element = EL(element);

		var value;

		if( element == null )
		{
			return null;
		}

		switch(element.type)
		{
			case 'password':
			case 'textarea':
			case 'text':
			{
				value = element.value;
				break;
			}
			case 'select-one':
			{
				value = Valraiso.form.select.getSelectedValue(element);
				break;
			}

			case 'radio':
			{
				for(var i = 0; i < element.options.length; i ++)
				{
					if( element.options[i].checked )
					{
						value = element.options[i].value;
					}
				}

				break;
			}

			default:
				if( typeof element == 'object' )
				{
					for(var i = 0; i < element.length ; i ++ )
					{
						if( element[i].checked )
						{
							value = element[i].value;
						}
					}
				}
				break;
		}

		if( value == null || value.length == 0 )
		{
			return null;
		}

		return value;
	},

	clearContent: function(element)
	{
		element = EL(element);

		if( element == null )
		{
			return;
		}

		if( !element.save)
		{
			element.save  = element.value;
		}

		if( !element.save || element.value == element.save )
		{
			element.value = '';
		}
	},

	restoreContent: function(element)
	{
		element = EL(element);

		if( element == null )
		{
			return;
		}

		if( element.save && element.value == '')
		{
			element.value = element.save;
		}
	}
};

Valraiso.namespace('Valraiso.form.select');
Valraiso.form.select =
{
	getSelectedOption : function (element)
	{
            element = EL(element);
            if ( element.selectedIndex < 0 )
            {
                    return null;
            }
            return element.options[element.selectedIndex];

	},

	getSelectedValue : function (element)
	{
		return Valraiso.form.select.getSelectedOption(element).value;
	},

	getSelectedText : function (element)
	{
		return Valraiso.form.select.getSelectedOption(element).text;
	},

	setSelectedValue : function (element, value)
	{
		for(var i = 0; i < EL(element).options.length ; i ++)
		{
			var opt = EL(element).options[i];

			if( opt.value == value )
			{
				//EL(element).selectedIndex = i;
                                opt.selected = true;
				break;
			}
		}
	},

	clear : function(element)
	{
		element = EL(element);
		while ( element.firstChild != null )
		{
			element.removeChild( element.firstChild );
		}
	},

	appendOption : function(element, value, text)
	{
		element = EL(element);

		var o = document.createElement ("option");
		o.setAttribute("value", value);
		o.appendChild( document.createTextNode(text) );

		element.appendChild(o);
	},

	appendDisabledOption : function(element, text)
	{
		element = EL(element);

		var o = document.createElement ("optgroup");
		o.setAttribute("label", text);
		o.className = "optdisabled";

		element.appendChild(o);
	},

	appendOptions : function (element, data, clear)
	{
		element = EL(element);

		if( clear )
		{
			Valraiso.form.select.clear(element);
		}

		for(value in data)
		{
			Valraiso.form.select.appendOption(element, value, data[value]);
		}
	},



	appendDisabledOptions : function (element, data, clear, disabledList)
	{
		element = EL(element);

		if( clear )
		{
			Valraiso.form.select.clear(element);
		}

		for(value in data)
		{
			if( disabledList[value] )
			{
				Valraiso.form.select.appendDisabledOption(element, data[value]);
			}
			else
			{
				Valraiso.form.select.appendOption(element, value, data[value]);
			}
		}
	}
};


var curtainVisible = false;

function showCurtain ()
{
	var curtain = document.getElementById ("curtain");
	if (curtain == null)
	{
		var body       = document.body;
		var bodyHeight = body.offsetHeight;
		var bodyWidth  = document.width;

                if (typeof bodyWidth == 'undefined')
                {
                    bodyWidth = body.offsetWidth;
                }

                if (screen.availWidth > bodyWidth)
                    bodyWidth = screen.availWidth;

                if (screen.availHeight > bodyHeight)
                    bodyHeight = screen.availHeight;

		curtain    = document.createElement ("div");
		curtain.id = "curtain";

		with (curtain.style)
		{
			width           = bodyWidth + "px";
			height          = bodyHeight + "px";
			display         = "none";
			backgroundColor = "black";
			position        = "absolute";
			top             = 0;
			left            = 0;
			opacity         = 0.7;
			MozOpacity      = 0.7;
			filter          = "alpha(opacity=70)";
			zIndex          = 12;
		}

		document.body.appendChild (curtain);
	}

        curtainVisible = true;
	curtain.style.display = "block";
        Valraiso.CSS.events.hideSelect();
}

function hideCurtain ()
{
	var curtain = document.getElementById ("curtain");
	if (curtain != null)
	{
		curtain.style.display = "none";
                curtainVisible = false;
                Valraiso.CSS.events.showSelect();
	}
}
function toggleCurtain ()
{
	if (curtainVisible) hideCurtain();
        else showCurtain();
}

function affichePopUp (nom)
{
      var popup = EL (nom);
      var pos   = getDocumentScroll();

      popup.style.display = 'block';
      popup.style.top     = (pos.y + 150) + "px";

      toggleCurtain();

      return false;
}

function closePopUp(nom)
{
    var popup = document.getElementById(nom);
    popup.style.display = 'none';

    hideCurtain();
}

function getDocumentScroll()
{
    var scroll = {};

    scroll.x = 0;
    scroll.y = 0;

    if (typeof window.pageYOffset == 'number')
    {
        scroll.y = window.pageYOffset;
        scroll.x = window.pageXOffset;
    }
    else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
    {
        scroll.y = document.body.scrollTop;
        scroll.x = document.body.scrollLeft;
    }
    else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
    {
        scroll.y = document.documentElement.scrollTop;
        scroll.x = document.documentElement.scrollLeft;
    }

    return scroll;
}

function toggleExpanders(index, prefix)
{
	var opened = null;
	var opened_idx = null;
	var closed = document.getElementById(prefix + index);

	var i = 0;
	while (true)
	{
		var s = document.getElementById(prefix + i);

		if (!s) break;

		if (s.offsetHeight > 0)
		{
			opened = s;
			opened_idx = i;
			break;
		}

		i++;
	}

	if (opened == closed) return;

	var steps = 10;

	var coh = 0;

	if( opened != null )
	{
		coh = opened.offsetHeight;
	}

	var doh = -coh;
	var soh = doh / steps;

	var cch = 0;
	var dch = firstElement(closed).offsetHeight;
	var sch = dch / steps;

	function doResize (closed, opened, i)
	{
		coh += soh;
		cch += sch;

		closed.style.height = Math.round (cch) + 'px';

		if( opened != null )
		{
			opened.style.height = Math.round (coh) + 'px';
		}

		if (i < steps)
		{
			setTimeout (function(){doResize(closed, opened, i+1)}, 10);
		}
	}

	function firstElement(node)
	{
		if( node == null )
		{
			return null;
		}

		for(var i = 0; i < node.childNodes.length ; i ++ )
		{
			if( node.childNodes[i].nodeType != 1 )
			{
				continue;
			}

			return node.childNodes[i];
		}

		return null;
	}

	doResize (closed, opened, 1);

	var title = document.getElementById(prefix + 'title_' + index);
	if ( title )
	{
		Valraiso.DOM.addClassName(title, "replier", true);
		if ( opened )
		{
			title = document.getElementById(prefix + 'title_' + opened_idx);
			if ( title )
			{
				Valraiso.DOM.removeClassName(title, "replier", true);
			}
		}
	}

	var ctx = new Object();
	ctx.closed 	= closed;
	ctx.opened 	= opened;
	ctx.closed_idx	= index;
	ctx.opened_idx	= opened_idx;
	return 	ctx;
}


