//<![CDATA[  

/**
 * Simplify layer access
 * 
 * @param string id
 * @return DomElement|boolean
 */
function $(id) {
	var element = document.getElementById(id);
	return null != element ? element : false;
}

/**
 * Adds event
 * 
 * @link http://ejohn.org/blog/flexible-javascript-events/
 * @param object obj
 * @param string type
 * @param callback fn
 * @return
 */

function addEvent(obj, type, fn) {
	if(obj.attachEvent) {
		obj['e' + type + fn] = fn;
		obj[type + fn] = function() {obj['e' + type+fn]( window.event );}
		obj.attachEvent('on' + type, obj[type+fn]);
	}
	else {
		obj.addEventListener(type, fn, false);
	}
}

/**
 * Bookmarks url
 * 
 * @param string url
 * @param string text
 * @return void
 */
function bookmark(url, title) {
	/* Modified To support Opera */
	if(document.all) {//IE
	    window.external.AddFavorite(url, title);
	}
	else if(window.sidebar && !window.opera) {//Firefox
	    window.sidebar.addPanel(title, url, '');
	}
	else {
		throw new Error('Cannot open bookmark dialog');
	}
}

/**
 * Copies layer contents to clipboard
 * 
 * @param string layer
 * @return void
 */
function copy(layer) {
	var text = $(layer).innerHTML;

	// Copy text
	if(window.clipboardData) {
		window.clipboardData.setData('Text', html_entity_decode(text));
	}
	else {
		throw new Error('Cannot access clipboard');
	}
}

/**
 * Simplify layer manipulation
 * 
 * @param mixed element
 * @return string (content)
 */
function get(element) {
	if(typeof(element) == 'string') {
		element = $(element);
	}
	return element.innerHTML;
}

/**
 * Checks whether cookie is set
 * 
 * @param string name
 * @return boolean
 */
function isCookie(name) {
	if(0 < document.cookie.length) {
		return -1 != document.cookie.indexOf(name + '=');
	}
	return false;
}

/**
 * Removes event
 * 
 * @link http://ejohn.org/blog/flexible-javascript-events/
 * @param object obj
 * @param string type
 * @param callback fn
 * @return
 */
function removeEvent(obj, type, fn) {
	if(obj.detachEvent) {
		obj.detachEvent('on' + type, obj[type + fn]);
		obj[type+fn] = null;
	}
	else {
		obj.removeEventListener(type, fn, false);
	}
}

/**
 * Simplify layer manipulation
 * 
 * @param mixed element
 * @param string content
 * @return string (old content)
 */
function set(element, content) {
	if(typeof(element) == 'string') {
		element = $(element);
	}
	old = element.innerHTML;
	element.innerHTML = content;
	return old;
}

//]]>

