String.prototype.replaceAll = function (substr, replacementValue) {
	var str = this;
	while (str.indexOf(substr) != -1) { // substr found
	    str = str.replace(substr, replacementValue);
	}
	return str;
};

String.prototype.format = function () {
	var str = this;
	for(var i = 0; i < arguments.length; i++) {
		str = str.replaceAll('{' + i + '}', arguments[i]);
	}
	return str;
};

// JavaScript Document
function adjustPageContentMinHeight() {
	var headerHeight = 307;
	var beforePageContentHeight = 12;
	var afterPageContentHeight = 12;
	var footerHeight = 121;

	var pagecontent = document.getElementById('pagecontent');
	var pageContentHeight = window.innerHeight 
		- headerHeight 
		- beforePageContentHeight 
		- afterPageContentHeight 
		- footerHeight;
	
	pagecontent.style.minHeight = pageContentHeight + 'px';
}

function doWhenKeyIsUp(e, key, handler) {
	var keyCode = e.keyCode /*IE*/ || e.which /*Others*/;
	if ((e.altKey == false) && (e.ctrlKey == false) && keyCode == key) {
		if (typeof(handler) == 'function') {
		    handler(); // call method handler
		    e.cancelBubble = true;
		    if (e.stopPropagation) e.stopPropagation();
		}
	}
}

function doWhenEnterKeyIsUp(e, handler) {
	doWhenKeyIsUp(e, 13, handler);
}

function getClickTarget(e) {
    var target = null;
    if (!e) e = window.event;
    if (e.target) target = e.target;
    else if (e.srcElement) target = e.srcElement;
    if (target.nodeType == 3) target = targ.parentNode; // defeat Safari bug 
    return target;
}

function isRightClick(e) {
	var result = false;
	if (!e) e = window.event;
	if (e.which) result = (e.which == 3); // FF
	else if (e.button) result = (e.button == 2); // IE
	else;// opera might not be supported
	return result;
}

function isCtrlClick(e) {
	if (!e) e = window.event;
	return e.ctrlKey;
}
