/*
* General DOM tools
*/

/**
* Javascript equivalent of php's empty() method
* @param mixed_var The var to be checked out
* @return boolean Whether the var exists or not
*/
function empty( mixed_var ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philippe Baumann
    // +      input by: Onno Marsman
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: LH
    // +   improved by: Onno Marsman
    // +   improved by: Francesco
    // *     example 1: empty(null);
    // *     returns 1: true
    // *     example 2: empty(undefined);
    // *     returns 2: true
    // *     example 3: empty([]);
    // *     returns 3: true
    // *     example 4: empty({});
    // *     returns 4: true
    
    var key;
    
    if (mixed_var === ""
        || mixed_var === 0
        || mixed_var === "0"
        || mixed_var === null
        || mixed_var === false
        || mixed_var === undefined
    ){
        return true;
    }
    if (typeof mixed_var == 'object') {
        for (key in mixed_var) {
            if (typeof mixed_var[key] !== 'function' ) {
              return false;
            }
        }
        return true;
    }
    return false;
}


/*
* Converts an object or array into a string in a very rudimentary way for debugging
* @param obj Objec tor array to be converted
* @return str String representing the inputted object
*/
function to_str(obj){
	str="";
	for(i in obj){
		str+= i+"="+obj[i]+"<br/>";
	}
	return str
}
/*
* Trace a string to a trace element for debugging
* @param str String to trace
*/
function trace(str){
	if(typeof line_num=="undefined"){
		line_num=0;
	}
	if(document.getElementById("trace")!=null){
		document.getElementById("trace").innerHTML+=line_num+": "+str+"<br/>";
		line_num++;
	}
	
}

/*
* Remove ALL child nodes from an element
* @param parent_node DOM element (e.g. <div>) to remove children from
*/
function removeChildNodes(parent_node){
	if ( parent_node.hasChildNodes() )	{
		while ( parent_node.childNodes.length >= 1 ){
			parent_node.removeChild( parent_node.firstChild );       
		} 
	}
}
/*
* Inserts a new paragraph into a DOM element
* @param parent_node DOM element (e.g. <div>) to insert <p> child into
* @param node_content Text to insert
*/
function appendParagraph(parent_node, node_content){
	var new_node = document.createElement("p");
	var new_text = document.createTextNode(node_content);
	new_node.appendChild(new_text);
	parent_node.appendChild(new_node);
}
