
function php_serialize(a){
	var a_php = "";
	var total = 0;
	for (var key in a)
	{
		++ total;
		a_php = a_php + "s:" +
		String(key).length + ":\"" + String(key) + "\";s:" +
		String(a[key]).length + ":\"" + String(a[key]) + "\";";
	}
	a_php = "a:" + total + ":{" + a_php + "}";
	return a_php;
}

function Coord() {
	this.x = 0;
	this.y = 0;
}


function copyNode(from, to) {
	var newNode = document.getElementById(from).cloneNode(true);

	newNode.id = '';
	document.getElementById(to).appendChild(newNode);

	return newNode;
}


function getPagePosition(element) {
	var coord = new Coord();

	while (element.offsetParent) {
		coord.x += element.offsetLeft;
		coord.y += element.offsetTop;
		element = element.offsetParent;
	}

	return coord;
}


function addEventListener(type, func) {
	if (document.addEventListener) {
		document.addEventListener(type, func, false);
	} else {
		document.attachEvent(type, func);
	}
}


function removeEventListener(type, func) {
	if (document.removeEventListener) {
		document.removeEventListener(type, func, false);
	} else {
		document.detachEvent(type, func);
	}
}


function isInDiv(element, id) {
	while (element.offsetParent) {
		if (element.id == id) {
			return true;
		}
		element = element.offsetParent;
	}
	return false;
}

function createHiddenElement(name, value) {
	var element = document.createElement('input');

	element.type = 'hidden';
	element.name = name;
	element.value = value;

	return element;
}

/* below are some useful javascript functions for playing around with classes */

/* uses javascript and css to hide all elements on a page with a given className 
   by adding the classname "hidden" to the element */
function hide_class(className, tag, container) {
    container = container || document; tag = tag || '*'; // set default values for container and tag
    var elementsToHide = getElementsByClassName(className, container, tag);
    for (var i = 0; i < elementsToHide.length; i++) {
        addClass(elementsToHide[i], 'hidden');
    }
}

/* used in conjuntion with hide_class(); shows all elements on a page with a given className 
   by removing the classname "hidden" from the element */
function show_class(className, tag, container) {
    container = container || document; tag = tag || '*'; // set default values for container and tag
    var elementsToShow = getElementsByClassName(className, container, tag);
    for (var i = 0; i < elementsToShow.length; i++) {
        removeClass(elementsToShow[i], 'hidden');
    }
}

/* CSS-related javascript functions
   by Fred Bird http://fredbird.org
   License : Public Domain
   file version 16/09/2005 09:30:45 */

/* returns whether a DOM object has a certain class */
function hasClass(object, cName) {
    return new RegExp('\\b' + cName + '\\b').test(object.className);
}

/* returns whether the DOM object has a set of classes
   classes = array of class names */
function hasClasses(object, classes) {
    for (var i = 0; i < classes.length; i++) {
        if (!hasClass(object, classes[i])) return false;
    }
    return true;
}

/* adds a class to a DOM object */
function addClass(object, cName) {
    if (!hasClass(object, cName)) {
        object.className += (object.className) ? ' ' + cName : cName;
    }
    return true;
}

/* removes a class from a DOM object */
function removeClass(object, cName) {
    if (!hasClass(object, cName)) return false;
    var rep = (object.className.match(' ' + cName)) ? ' ' + cName : cName;
    object.className = object.className.replace(rep, '');
    return true;
}

/* swap two classes for a DOM object, whatever provided order */
function swapClasses(object, class1, class2) {
    if (hasClass(object, class1)) {
        removeClass(object, class1);
        addClass(object, class2);
        return true;
    }
    if (hasClass(object, class2)) {
        removeClass(object, class2);
        addClass(object, class1);
        return true;
    }
    return false;
}

/* sets class 'to' to the DOM object obj, removes class 'from' if necessary */
function switchClass(object, to, from) {
    if (hasClass(object, from)) removeClass(object, from);
    addClass(object, to);
    return true;
}

/* returns an array of DOM objects having the provided class name
   within object 'container' and with tag name 'tag'
   some code from http://www.webmasterworld.com/forum91/1757.htm (unbugged) */
function getElementsByClassName(className, container, tag) {
    container = container || document; tag = tag || '*'; // default container to document and tag to *
    var all = container.all || container.getElementsByTagName(tag);
    var found = new Array();
    for (var i = 0; i < all.length; i++) {
        var element = all[i];
        if (hasClass(all[i], className)) {
            found.push(all[i]);
        }
    }
    return found;
}

function toggle_box(id){

	var box = document.getElementById(id);
	var image = document.getElementById("img_"+id);
	if(box.style.display == "block"){
		box.style.display = "none";
		image.src = "images/public/button_up.jpg";
	}
	else {
		box.style.display = "block";
		image.src = "images/public/button_down.jpg";
	}
	
}

function obj_to_str(o) {
	var s;
	for(var k in o) {
		s += k + ': ' + o[k] + ', ';
	}
	return s;
}

function objkeys_to_str(o) {
	var s;
	for(var k in o) {
		s += k + ', ';
	}
	return s;
}

function g(id) {
	return document.getElementById(id);
}

function is_a(object, constructorFunction) {
  while (object != null) {
    if (object == constructorFunction.prototype)
     {return true}
	 object = object.__proto__;
  }
  return false;
}

