function addCSSClass(el, className, noclassName)
{
	if(typeof(noclassName) != "undefined")
		var noclassName = noclassName;
	else
		var noclassName = '';
		
	var classes = el.className.split(" ");
	var newclass = new Array();
	if(classes)
	{
		for(var i=0; i<classes.length; i++)
		{
			if(classes[i] != className && classes[i] != noclassName)
			newclass.push(classes[i]); 
		}
	}
	newclass = newclass.join(" ")+" "+className;
	el.className = newclass;
	return;
}

function removeCSSClass(el, className)
{
	var classes = el.className.split(" ");
	var newclass = new Array();
	if(classes)
	{
		for(var i=0; i<classes.length; i++)
		{
			if(classes[i] != className)
			newclass.push(classes[i]); 
		}
	}
	newclass = newclass.join(" ");
	el.className = newclass;
	return;
}

function getElementPosition(elem)
{
	var w = elem.offsetWidth;
	var h = elem.offsetHeight;
    	var l = 0;
    	var t = 0;
    	while (elem)
    	{
     	l += elem.offsetLeft;
        	t += elem.offsetTop;
        	elem = elem.offsetParent;
    	}
    	return {"left":l, "top":t, "width": w, "height":h};
}

function serializeArray (variable) {
    switch (typeof variable) {
		case 'number':
		if (Math.round(variable) == variable)
			return 'i:'+variable+';';
		else
			return 'd:'+variable+';';
		case 'boolean':
			if (variable == true)
				return 'b:1;';
			else
				return 'b:0;';
		case 'string': return 's:'+variable.length+':"'+variable+'";';
		case 'object':
			r = 'a:'+variable.length+':{';
			for(i=0; i < variable.length; i++)
				r+= serializeArray(i)+serializeArray(variable[i]);
			r += '}';
			return r;
        default:
			return 's:0:"";';
			return r;
    }
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
