// JavaScript Document

// Taken from http://blog.outofhanwell.com/2006/03/10/object-oriented-callbacks/
function createObjectCallback(obj, fn, argumentsOverride) {
/// <summary>Creates a callback object with the correct "this" pointer</summary>
/// <param name="obj">The object that refers to the "this" pointer inside fn function</param>
/// <param name="fn" type="function">The function to callback</param>
/// <returns type="void">The callback function</returns>
	return function() { fn.apply(obj, argumentsOverride || arguments); };
}


function $get(id)
{
	return document.getElementById(id);
}

function swapNode (srcNode, node) {
    var nextSibling = srcNode.nextSibling;
    var parentNode = srcNode.parentNode;
    node.parentNode.replaceChild(srcNode, node);
    if(node == nextSibling){
        parentNode.insertBefore(node, srcNode);
    }
    else{
        // If we were swapping this for its next element, we only need to insert the element we removed before this element
        parentNode.insertBefore(node, nextSibling);
    }
}

function swapClass (srcNode, node) {
  var cssClass = srcNode.className;
  srcNode.className = node.className;
  node.className = cssClass;
}

function createCookie(name,value,days, path) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
    if(!path)
    {
        path = "/";
    }
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path="+path;
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
