


isIE = document.all ? true : false;
var topZ = 1000;

function EventVariable(event) {
	if (isIE) {
		this.x = window.event.clientX + document.body.scrollLeft;
		this.y = window.event.clientY + document.body.scrollTop;
	} else {
		this.x = event.pageX;
		this.y = event.pageY;
		}		
	this.CallerObject = isIE ? window.event.srcElement : event.target;
	this.KeyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	this.MouseButton = isIE ? event.button : event.which;
	this.ControlKey = (event.altKey ? 1 : 0) + (event.ctrlKey ? 2 : 0) + (event.shiftKey ? 4 : 0);
	this.Type = event.type;
}

if (typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement) {
	HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode) {
		switch (where.toUpperCase()) {
			case 'BEFOREBEGIN':
				this.parentNode.insertBefore(parsedNode, this);
				break;
			case 'BEFOREEND':
				this.appendChild(parsedNode);
				break;
			case 'AFTERBEGIN':
				this.insertBefore(parsedNode, this.firstChild);
				break;
			case 'AFTEREND':
				if (this.nextSibling)
					this.parentNode.insertBefore(parsedNode, this.nextSibling);
				else
					this.parentNode.appendChild(parsedNode);
				break;
			}
		}

	HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr) {
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML);
	}

	HTMLElement.prototype.insertAdjacentText = function(where, txtStr) {
		var parsedText = document.createTextNode(txtStr || '');
		this.insertAdjacentElement(where, parsedText);
		}
};


function Trim(strValue) {
	var objRegExp = /^(\s*)$/;

	if(objRegExp.test(strValue)) {
		strValue = strValue.replace(objRegExp, '');
		if( strValue.length == 0) return strValue;
		}

	objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
	if(objRegExp.test(strValue)) strValue = strValue.replace(objRegExp, '$2');
	return strValue;
}

function ELEM(id) {
	return document.getElementById(id);
}




// STANDARED POPUP PANEL LAYER SECTION --------------------------------------------------------------------------


// fix to the popup panel close button not being displayed issue
//document.insertAdjacentElement("BEFOREEND", "<img src='../App_Files/_Common/ico/close.gif' style='display:none;'/>");
var imgTempCloseButton = new Image();
imgTempCloseButton.src = "../App_Files/_Common/ico/close.gif";

function NewPanel(panelId, title) {
	var pnl = ELEM(panelId);
	if (!pnl) return false;
	
	if (!pnl.rows) {
		pnl = ELEM(panelId + "_Table");
		if (!pnl) return false;
	}

	if (!ELEM(panelId + "_TitleBar")) {
		var row, cell;
		
		pnl.className = "Panel";
		pnl.cellSpacing = 0;
		pnl.cellPadding = 0;
		
		row = pnl.insertRow(0);
		row.className = "Panel_TitleBarRow";
		
		cell = row.insertCell(0);
		cell.style.width = "5px";
		cell.innerHTML = "&nbsp;";
		
		cell = row.insertCell(1);
		cell.id = panelId + "_TitleBar";
		cell.className = "Panel_TitleBar";
		//cell.colSpan = "2";

		cell.innerHTML = "<img src='"+svPath+"/App_Files/ico/close.gif' onclick='Hide(\"" + panelId + "\");' class='PanelClose' />" + title;

		row = pnl.insertRow(2);
		
		cell = row.insertCell(0);
		cell.innerHTML = "&nbsp;";
		cell.style.width = "5px";
		
		cell = row.insertCell(1);
		cell.innerHTML = "&nbsp;";
		
		cell = row.insertCell(2);
		cell.innerHTML = "&nbsp;";
		cell.style.width = "5px";
		
		row = pnl.rows[1];
		
		cell = row.insertCell(0);
		cell.innerHTML = "&nbsp;";
		
		cell = row.insertCell(2);
		cell.innerHTML = "&nbsp;";
	} else {
		ELEM(panelId + "_TitleBar").innerHTML = "<img src='"+svPath+"/App_Files/ico/close.gif' onclick='Hide(\"" + panelId + "\");' class='PanelClose' />" + (title ? title : '');
	}
	
	return true;
}

function Panel(ev, panelId, title, offsetX, offsetY) {
	var pnl = ELEM(panelId);
	if (!pnl) return;
	
	if (!NewPanel(panelId, title)) return;

    var x = ev.x + (offsetX ? offsetX : 0);
    var y = ev.y + (offsetY ? offsetY : 0);

	ShowPanel(panelId, x, y);

}

function MakePanel(panelId, title) {
	var pnl = ELEM(panelId);
	if (!pnl) return;
	if (!NewPanel(panelId, title)) return;
}

function ShowPanel(panelId, x, y) {
    
	var pnl = ELEM(panelId);
	if (!pnl) return;
	pnl.style.position = "absolute";
	pnl.style.left = x;
	pnl.style.top = y;
	pnl.style.display = "block";

	pnl.style.visibility = "visible";
	pnl.style.zIndex = ++topZ;

}

function Hide(panelId) {
	var pnl = ELEM(panelId);
	if (!pnl) return;
	pnl.style.display = "none";
}





// TOOLTIP SECTION --------------------------------------------------------

function ToolTip(event, ToolTipText) {
	if (!ELEM("ToolTip")) {
		var html;
		if (ToolTipText.length > 80) w = "width:280px;;"; else w = "";
		html = "<div id='ToolTip' onmouseout='HideToolTip();' ";
		html += "style='" + w + "position:absolute;display:none;padding:2px;border:1px solid silver;background-color:#EEEEAA;font-size:10px;font-family:Arial;'></div>";
		document.body.insertAdjacentHTML("afterBegin", html);
		}
	ELEM("ToolTip").innerHTML = ToolTipText;
	var ev = new EventVariable(event);
	ShowLayer("ToolTip", ev.PageCoordinates);
}

function HideToolTip() {
	HideLayer("ToolTip");
}




// VALIDATION SECTION -----------------------------------------------------------

function ValidatePassword(text) {
	return ValidateText(text, "[A-Za-z0-9]", true, 5, 20);
}

function ValidateEmail(text) {
	text = Trim(text).toLowerCase();
	if (text.length > 50) return "Email address cannot be greater than 50 characters.";
	var RegEx = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	if (!RegEx.test(text)) return "Given email address does not seem to be a valid one.";
	return "";
}

function ValidateText(text, regExPattern, isRequired, minLength, maxLength) {
	text = Trim(text);
	if (isRequired && text == "") return "Cannot be blank.";
	if (isRequired && (text.length < minLength || text.length > maxLength)) return "Should be between " + minLength + "-" + maxLength + " characters.";
	if (text != "" && regExPattern != "") {
		var RegEx = new RegExp("^" + regExPattern + "+$");
		if (!RegEx.test(text)) return "Following characters are not allowed: " + text.replace(new RegExp(regExPattern), "");
		}
	return "";
}








function AllowedGlobalKeys(ev) {
	// don't allow default behavior of ESCAPE key which resets all the values of the form
	if(ev.KeyCode == 27) {
		if (ev.CallerObject.value) ev.CallerObject.value = "";
		return false;
		}
	// allow tab, enter, backspace, delete, insert keys
	if (ev.KeyCode == 9 || ev.KeyCode == 13 || ev.KeyCode == 8 || ev.KeyCode == 46 || ev.KeyCode == 45) return true;
	// HOME, END, PAGEUP, PAGEDOWN
	if (ev.KeyCode == 33 || ev.KeyCode == 34 || ev.KeyCode == 35 || ev.KeyCode == 36) return true;
	// allow arrowkeys
	if (ev.KeyCode == 37 || ev.KeyCode == 38 || ev.KeyCode == 39 || ev.KeyCode == 40) return true;
	// allow Ctrl+Z UNDO, Ctrl+V PASTE
	if (ev.ControlKey == 2 && (ev.KeyCode == 90 || ev.KeyCode == 86)) return true;
	return false;
}


function RestrictMoneyInput (event) {
	var ev = new EventVariable(event);
	if (AllowedGlobalKeys(ev)) return true;
	var k = ev.KeyCode;
	var isNumericKey = (k >= 48 && k <= 57) || (k >= 96 && k <= 105) || (ev.ControlKey == 0 && k == 190) || (ev.ControlKey == 0 && k == 110);
	if (!isNumericKey) return false;
	return true;
}


function RestrictPositiveFloatInput (event) {
	var ev = new EventVariable(event);
	if (AllowedGlobalKeys(ev)) return true;
	var isNumericKey = (ev.KeyCode >= 48 && ev.KeyCode <= 57) || (ev.KeyCode >= 96 && ev.KeyCode <= 105);
	if (!((isNumericKey && ev.ControlKey != 4 ) || (ev.KeyCode == 190 && ev.ControlKey != 4) || (ev.KeyCode == 110 && ev.ControlKey != 4))) return false;
	return true;
}

function RestrictFloatInput (event) {
	var ev = new EventVariable(event);
	if (AllowedGlobalKeys(ev)) return true;
	var isNumericKey = (ev.KeyCode >= 48 && ev.KeyCode <= 57) || (ev.KeyCode >= 96 && ev.KeyCode <= 105) || ev.KeyCode == 109;
	if (!((isNumericKey && ev.ControlKey != 4 ) || (ev.KeyCode == 190 && ev.ControlKey != 4) || (ev.KeyCode == 110 && ev.ControlKey != 4))) return false;
	return true;
}







