//\/////
//\  jmstLib 2005.10.25 - You may not remove or change this notice.
//\  Copyright ???????? 2005. All rights reserved.
//\
//   Date: 2005-10-25
//\/////

// Decide browser version(???? OverLib 4.21)
var com_jmst_agent = new Object();
com_jmst_agent.isMac = (navigator.userAgent.indexOf("Mac") != -1);
com_jmst_agent.isOpera = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);  // Opera 7
com_jmst_agent.isNetscape4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
com_jmst_agent.isNetscape6 = (document.getElementById) ? true : false;
com_jmst_agent.isKonqueror = (com_jmst_agent.isNetscape6 && /konqueror/i.test(navigator.userAgent));
com_jmst_agent.isIE4 = (document.all) ? true : false;
com_jmst_agent.isIE5 = false;
com_jmst_agent.isIE55 = false; // Added additional variable to identify IE5.5+
com_jmst_agent.isGecko = (navigator.userAgent.indexOf("Gecko") != -1);
com_jmst_agent.docRoot = 'document.body';

// Resize fix for NS4.x to keep track of layer
if(com_jmst_agent.isNetscape4){
	var oW = window.innerWidth;
	var oH = window.innerHeight;
	window.onresize = function()
		{
			if(oW != window.innerWidth || oH != window.innerHeight)
				location.reload();
		}
}

// Microsoft Stupidity Check(tm).
if(com_jmst_agent.isIE4){
	var agent = navigator.userAgent;
	if(/MSIE/.test(agent)){
		var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
		if (versNum >= 5){
			com_jmst_agent.isIE5 = true;
			com_jmst_agent.isIE55 = (versNum >= 5.5 && !com_jmst_agent.isOpera) ? true : false;
			if (com_jmst_agent.isNetscape6) com_jmst_agent.isNetscape6=false;
		}
	}
	if(com_jmst_agent.isNetscape6)
		com_jmst_agent.isIE4 = false;
}

// Check for compatability mode.
if (document.compatMode && document.compatMode == 'CSS1Compat') {
	com_jmst_agent.docRoot = ((com_jmst_agent.isIE4 && !com_jmst_agent.isOpera) ? 'document.documentElement' : com_jmst_agent.docRoot);
}

///////////////////////////////////////////////////////////////////////////
// Window
///////////////////////////////////////////////////////////////////////////

var com_jmst_OnTopWindow = Class.create();
com_jmst_OnTopWindow.prototype = {
  	initialize: function()
  	{
		this.onTops = new Array();
  	},
	register: function(win)
	{
		this.onTops.push(win);
	},
	unregister: function()
	{
		this.onTops.pup();
	},
	check: function(win)
	{
		if(this.onTops[this.onTops.length - 1] != win)
			this.onTops[this.onTops.length - 1].focus();
	}
}

///////////////////////////////////////////////////////////////////////////
// DOM CSS
///////////////////////////////////////////////////////////////////////////

// ???? CSS ????
function com_jmst_CSS_setProperty(object, property, value)
{
	if(com_jmst_agent.isIE4){
		object.style[property] = value;
	}else{
		object.style.setProperty(property, value, "");
	}
}

function com_jmst_getAbsolutePosition(element)
{
	if(arguments.length != 1 || element == null){
        return null;
    }
    var elmt = element;
    var offsetTop = elmt.offsetTop;
    var offsetLeft = elmt.offsetLeft;
    var offsetWidth = elmt.offsetWidth;
    var offsetHeight = elmt.offsetHeight;
    while( elmt = elmt.offsetParent )
    {
          // add this judge
        if ( elmt.style.position == 'absolute' || elmt.style.position == 'relative' 
            || ( elmt.style.overflow != 'visible' && elmt.style.overflow != '' ) ){
            break;
        } 
        offsetTop += elmt.offsetTop;
        offsetLeft += elmt.offsetLeft;
    }
    return { absoluteTop: offsetTop, absoluteLeft: offsetLeft,
        offsetWidth: offsetWidth, offsetHeight: offsetHeight };
} 
