function trim (str) { return str.toString().replace(/^\s+|\s+$/g, ''); }
function parseJSON(str) {
    try {
        return (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(str.toString())) &&
            eval('(' + str.toString() + ')');
    } catch (e) {
    	e=null;
        return false;
    }
}

function $(id)
{
	try {
		var tmp = document.getElementById(id);
	}
	catch (err) {
		return null;
	}
	if (tmp) {
		return tmp;
	} else {
		return null;
	}
}

function createCookie(name, value, days)
{
	var expires = "";
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    expires = "; expires="+date.toGMTString();
    }
  document.cookie = name+"="+value+expires+"; path=/";
  delete date;
  date=null;
  expires=null;
}

function readCookie(name)
{
  var ca = document.cookie.split(';');
  var nameEQ = name + "=";
  for(var i=0, len = ca.length; i < len; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  }
  len = null;
   ca = null;
   nameEQ = null;
   c=null;
  return false;
}

function eraseCookie(name)
{
  createCookie(name, "", -1);
}


function getToken(app,name) {
//return readCookie(name);
return app.authToken;
}

function setToken(app,name,val) {
//createCookie(name,val);
if (name == "auth") {
app.authToken = val;
}
if (name == "error") {
app.authError = val;
}
}

 function ReleaseEvents(element) {
 	/*
    var events = ["focus", "blur", "change", "click", "mousedown",
                  "mouseup", "mouseover", "keypress", "keydown",
                  "keyup", "keypress"];
*/
    var events = ["change", "click", "submit", "mouseout", "mouseover", "keyup", "keypress"];


    var helper = function(obj) {
        var i;
        //dump(obj+'\n');
        for (i = 0; i < events.length; i++) {
            try {
            	if (obj["on" + events[i]]) {
	            	obj["on" + events[i]] = null;
            	}
	            //dump("success\n");
            } 
            catch (err){
            	//dump(err);
            	err = null;
            }

        }
        //if (obj.nodename =='node') {
           	for (i = 0; i < obj.childNodes.length; i++) {
            	helper(obj.childNodes[i]);
        	}
        //}
        obj = null;
    }

if (element) {
	helper(element);
} else {
    helper(document);
}
element = null;
helper = null;
}

function DeleteChildren(node){

    if(node){

        for(var x = node.childNodes.length - 1; x >= 0; x=x-1){

            var childNode = node.childNodes[x];
             if(childNode.hasChildNodes() || childNode.childNodes.length > 0) {
                DeleteChildren(childNode);
            }
        /*    if (typeof(childNode.className) != 'undefined') {
            	if (childNode.className.search(/hidden/)>0) {
	            	childNode.className.replace(/hidden/,'');
    	        }
            }
            */
            ReleaseEvents(childNode);
            if(childNode.hasAttributes) {
            	for (var chatt in childNode.attributes) {
            		//window.alert(childNode.attributes[chatt]);
            		childNode[childNode.attributes[chatt]]=null;
            	}
            }
            //var tmp = node.removeChild(childNode);
            		////var tmp = node.removeNode();
            //tmp = null;
            
            //if(childNode.outerHTML){
            //    childNode.outerHTML = '';
            //}  else  {
            	discardElement(childNode);	
            //}
            
            	
            //delete childNode;
            childNode=null;
        }
        node=null;
    }
}

function clearTable(tableID)
{
  DeleteChildren($(tableID));
}

function erase(parentEl) {
	var chEl=$(parentEl).elements;
	for (var el in chEl) {
		if (typeof(chEl[el])=='object') {
			//window.alert($(chEl[el]));
			if ($(chEl[el])!=null) {
				fillText ($(chEl[el]).id,"");
			} else {
				fillText (chEl[el],"");
			}
		}
	}
	chEl = null;
}

function fillText(element,text, addition) {
	if (element=='co_id_x' || element =="co_organizer_v" || element =='co_speaker_v' || element == 'co_description_v' || element == 'co_prolog_v' || element == 'co_docs_v') {
		if (text == "") {
			addition = "";
		}
	} else {
		addition = "";
	}
	if (typeof (element) == 'string' && $(element)) {
		var el = $(element);
		var elid = element;
	} else {
		if (typeof(element)=='object') {
			var el = element;
			var elid = element.id;
		} else {
			return false;
		}
	}
		switch (el.tagName.toLowerCase()) {
		case "textarea":
			$(elid).value=text;
			var ch1 = el.firstChild;
			if (ch1) {
				el.removeChild(ch1);
			}
			var tnde = document.createTextNode(text);
			el.appendChild(tnde);
		break;
		case "span":
			var ch1 = el.firstChild;
			if (ch1) {
				el.removeChild(ch1);
			}
			//var tnde = document.createTextNode(text);
			//el.appendChild(tnde);
			text=text.replace( new RegExp( "\n", "gi" ), "<br/>" );
			addition=addition.replace( new RegExp( "\n", "gi" ), "<br/>" );
			el.innerHTML=text + addition;
		break;
		case "a":
			var ch1 = el.firstChild;
			if (ch1) {
				el.removeChild(ch1);
			}
			//var tnde = document.createTextNode(text);
			//el.appendChild(tnde);
			el.innerHTML=text + addition;
			el.href=text;
		break;
		case "div":
			var ch1 = el.firstChild;
			if (ch1) {
				el.removeChild(ch1);
			}
			//var tnde = document.createTextNode(text);
			//el.appendChild(tnde);
			el.innerHTML=text;
		break;
		case "input":
			if (el.type != "button" && el.type != "submit" && el.type != "reset") {
				el.value=text;
			}
		break;
		case "select":
			for (var oel = 0, len = el.options.length; oel < len;oel=oel+1) {
				el.options[oel].selected = false;
			}
			len = null;
			//for (var oel in $(element).options) {
			//	$(element).options[oel].selected = false;
			//}
			var t = typeof($(elid + "_" + text));
			var t2 = $(elid + "_" + text);
			if (t !='undefined' && t2) {
				t2.selected=true;
			}
		break;
		default:
		break;
		} 
	el = null;
	oel = null;
	t = null;
	t2 = null;
	ch1 = null;
	tnde = null;
	return true;
	
}


function discardElement(element) {
    var garbageBin = document.getElementById('IELeakGarbageBin');
    if (!garbageBin) {
        garbageBin = document.createElement('DIV');
        garbageBin.id = 'IELeakGarbageBin';
        garbageBin.style.display = 'none';
        document.body.appendChild(garbageBin);
    }

    // move the element to the garbage bin
    garbageBin.appendChild(element);
    garbageBin.innerHTML = '';
}
