function MM_preloadImages() {
			var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
				var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
				if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}
	
	function CheckNumericValues(evt)
{
    evt = (null == evt) ? event : evt;
	var code = evt.keyCode;
	if(code == 0)
	    code = evt.charCode;
	if((code >= '48' && code <= '57') || code == '8' || code == '46') //8-backspace, 46-delete
		return true;
	else
		return false;
}

function moveToTarget(elem, evt)
{
    evt = (null == evt) ? event : evt;
    var target = null == evt.srcElement ? evt.target : evt.srcElement;
    if(typeof (elem) == "string")
        elem = document.getElementById(elem);
    elem.style.display = "block";
	elem.style.top = (parseInt(getXYpos(target).y) + 16) + "px";
	elem.style.left = (parseInt(getXYpos(target).x) - parseInt(elem.style.width.replace("px", ""))) + "px";				
}


function getXYpos(elem) {
   if (!elem) {
      return {"x":0,"y":0};
   }
   var xy={"x":elem.offsetLeft,"y":elem.offsetTop}
   var par=getXYpos(elem.offsetParent);
   for (var key in par) {
      xy[key]+=par[key];
   }
   return xy;
}

function hookEvent(element, eventName, callback) {
    if (typeof (element) == "string")
        element = $(element);
    if (element == null)
        return;
    if (element.addEventListener)
        element.addEventListener(eventName, callback, false);
    else if (element.attachEvent)
        element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback) {
    if (typeof (element) == "string")
        element = $(element);
    if (element == null)
        return;
    if (element.removeEventListener)
        element.removeEventListener(eventName, callback, false);
    else if (element.detachEvent)
        element.detachEvent("on" + eventName, callback);
}



//********* CUSTOM CONFIRM *********

// over-ride the alert method only if this a newer browser.
// Older browser will see standard alerts
if(document.getElementById) {
	window.customConfirm = function(txt, evt, title, bntYesText, btnNoText) {
	    evt = (null == evt) ? event : evt;	
		return createCustomConfirm(txt, evt, title, bntYesText, btnNoText);
	}
}

var confirmationResponse = null;
var confirmInterval = null;
var confirmTarget = null;
function createCustomConfirm(txt, evt, title, bntYesText, btnNoText) {
	// shortcut reference to the document object	
	d = document;
	// if the modalContainer object already exists in the DOM, bail out.
	if(d.getElementById("modalContainer")) return;
	confirmationResponse = null;

	// create the modalContainer div as a child of the BODY element
	var mObj = d.getElementsByTagName("body")[0].appendChild(d.createElement("div"));
	mObj.id = "modalContainer";	
	 // make sure its as tall as it needs to be to overlay all the content on the page
	mObj.style.height = d.documentElement.scrollHeight + "px";
	mObj.style.width = getWidth(d.documentElement) + "px";

	// create the DIV that will be the alert 
	var confirmObj = mObj.appendChild(d.createElement("div"));
	confirmObj.id = "confirmBox";
	
	// MSIE doesnt treat position:fixed correctly, so this compensates for positioning the alert
	if(d.all && !window.opera) confirmObj.style.top = d.documentElement.scrollTop + "px";
	// center the alert box
	confirmObj.style.left = (d.documentElement.scrollWidth - confirmObj.offsetWidth)/2 + "px";    
    confirmObj.style.top = (getHeight(mObj) / 2 - getHeight(confirmObj) / 2 - 20) + "px";
    
	// create an H3 element as the title bar
	var h3 = confirmObj.appendChild(d.createElement("h3"));	
	h3.appendChild(d.createTextNode((null == title) ? "Confirm" : title));
		
	// create a paragraph element to contain the txt argument
	var msg = confirmObj.appendChild(d.createElement("p"));
	msg.innerHTML = txt;
		
	var divCmd = confirmObj.appendChild(d.createElement("div"));
	divCmd.id = "divCmd";
	    	
	var btnYes = divCmd.appendChild(d.createElement("a"));
	btnYes.id = "yesBtn";	
	btnYes.appendChild(d.createTextNode((null == bntYesText) ? "Yes" : bntYesText));
	btnYes.href = "javascript:void(0);";
	// set up the onclick event to remove the alert when the anchor is clicked
	btnYes.onclick = function() { return onConfirmInterval(); }
	
	var btnNo = divCmd.appendChild(d.createElement("a"));
	btnNo.id = "noBtn";
	btnNo.appendChild(d.createTextNode((null == btnNoText) ? "No" : btnNoText));
	btnNo.href = "javascript:void(0);";
	// set up the onclick event to remove the alert when the anchor is clicked
	btnNo.onclick = function() { removeCustomConfirm(); return false; }	

    confirmTarget = (null == evt) ? event : evt;
    
    return false;
}

function onConfirmInterval()
{
    if(null == confirmTarget)
        return;
    if(typeof(confirmTarget) == "string")
	    confirmTarget = document.getElementById(confirmTarget);
	else
	    confirmTarget = (null == confirmTarget.srcElement) ? confirmTarget.target : confirmTarget.srcElement;    
    var oldOnClick;
    if(null != confirmTarget.onclick)
    {
        oldOnClick = confirmTarget.onclick;
        confirmTarget.onclick = null;
    }
    var k=0;
    while(confirmTarget.tagName.toLowerCase() != 'a')
    {
        k++;
        confirmTarget = confirmTarget.parentNode; 
        if(k > 5)
            return;//fail
    }
    simulateEvent(confirmTarget, "click");
    confirmTarget.onclick = oldOnClick;
    try{
        setTimeout(unescape(confirmTarget.href), 0);
    }
    catch(e){originalAlert(e);}    
    confirmTarget = null;
	removeCustomConfirm();	   
}

// removes the custom alert from the DOM
function removeCustomConfirm() {
	document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}

//********* CUSTOM CONFIRM *********

function getHeight(elem) {
	return getBounds(elem).height;
}

function getWidth(elem) {
	return getBounds(elem).width;
}


function getBounds(element) {
    if(typeof (element) == "string")
        element = document.getElementById(element);
    var display = element.style.display;
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};

}

function simulateEvent(elem, eventName)
{
//window.status = elem;
    if (typeof (elem) == "string")
    {
        elem = document.getElementById(elem);
    }
    if( document.createEvent ) {
        var evObj = document.createEvent('MouseEvents');
        evObj.initEvent( eventName, true, false );
        elem.dispatchEvent(evObj);
    } else if( document.createEventObject ) {
        elem.fireEvent('on' + eventName);
    }
}
