678 lines
17 KiB
JavaScript
678 lines
17 KiB
JavaScript
/*
|
|
* My97 DatePicker 4.8.5
|
|
* License: http://www.my97.net/license.asp
|
|
*/
|
|
var $dp, WdatePicker;
|
|
(function () {
|
|
var Config = {
|
|
$langList: [{
|
|
name: 'en',
|
|
charset: 'UTF-8'
|
|
},
|
|
{
|
|
name: 'zh-cn',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'zh-tw',
|
|
charset: 'GBK'
|
|
}
|
|
],
|
|
$skinList: [{
|
|
name: 'default',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'whyGreen',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'blue',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'green',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'simple',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'ext',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'blueFresh',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'twoer',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'YcloudRed',
|
|
charset: 'gb2312'
|
|
},
|
|
{
|
|
name: 'thinkpap',
|
|
charset: 'gb2312'
|
|
}
|
|
],
|
|
$wdate: false,
|
|
$crossFrame: false,
|
|
$preLoad: false,
|
|
$dpPath: '',
|
|
doubleCalendar: false,
|
|
enableKeyboard: true,
|
|
enableInputMask: true,
|
|
autoUpdateOnChanged: null,
|
|
weekMethod: 'MSExcel',
|
|
position: {},
|
|
lang: 'auto',
|
|
skin: 'default',
|
|
dateFmt: 'yyyy年MM月dd日 HH时mm分',
|
|
realDateFmt: 'yyyy-MM-dd',
|
|
realTimeFmt: 'HH:mm:ss',
|
|
realFullFmt: '%Date %Time',
|
|
minDate: '0001-01-01 00:00:00',
|
|
maxDate: '9999-12-31 23:59:59',
|
|
minTime: '00:00:00',
|
|
maxTime: '23:59:59',
|
|
startDate: '',
|
|
alwaysUseStartDate: false,
|
|
yearOffset: 1911,
|
|
firstDayOfWeek: 0,
|
|
isShowWeek: false,
|
|
highLineWeekDay: true,
|
|
isShowClear: true,
|
|
isShowToday: true,
|
|
isShowOK: true,
|
|
isShowOthers: true,
|
|
readOnly: false,
|
|
errDealMode: 0,
|
|
autoPickDate: null,
|
|
qsEnabled: true,
|
|
autoShowQS: false,
|
|
hmsMenuCfg: {
|
|
H: [1, 6],
|
|
m: [5, 6],
|
|
s: [15, 4]
|
|
},
|
|
|
|
opposite: false,
|
|
specialDates: null,
|
|
specialDays: null,
|
|
disabledDates: null,
|
|
disabledDays: null,
|
|
onpicking: null,
|
|
onpicked: null,
|
|
onclearing: null,
|
|
oncleared: null,
|
|
ychanging: null,
|
|
ychanged: null,
|
|
Mchanging: null,
|
|
Mchanged: null,
|
|
dchanging: null,
|
|
dchanged: null,
|
|
Hchanging: null,
|
|
Hchanged: null,
|
|
mchanging: null,
|
|
mchanged: null,
|
|
schanging: null,
|
|
schanged: null,
|
|
eCont: null,
|
|
vel: null,
|
|
elProp: '',
|
|
errMsg: '',
|
|
quickSel: [],
|
|
has: {},
|
|
getRealLang: function () {
|
|
var arr = Config.$langList;
|
|
for (var i = 0; i < arr.length; i++) {
|
|
if (arr[i].name == this.lang) {
|
|
return arr[i]
|
|
}
|
|
}
|
|
return arr[0]
|
|
}
|
|
};
|
|
WdatePicker = main;
|
|
var w = window,
|
|
emptyEl = {
|
|
innerHTML: ''
|
|
},
|
|
d = 'document',
|
|
de = 'documentElement',
|
|
tag = 'getElementsByTagName',
|
|
dptop, jsPath, $IE, $FF, $OPERA;
|
|
var ua = navigator.userAgent,
|
|
isTablet = /(?:iPad|PlayBook)/.test(ua) || (/(?:Android)/.test(ua) && !/(?:Mobile)/.test(ua)),
|
|
isPhone = /(?:iPhone)/.test(ua) || /(?:Android)/.test(ua) && /(?:Mobile)/.test(ua);
|
|
var appName = navigator.appName;
|
|
if (appName == 'Microsoft Internet Explorer') $IE = true;
|
|
else if (appName == 'Opera') $OPERA = true;
|
|
else $FF = true;
|
|
jsPath = Config.$dpPath || getJsPath();
|
|
if (Config.$wdate) {
|
|
loadCSS(jsPath + 'skin/WdatePicker.css')
|
|
}
|
|
dptop = w;
|
|
if (Config.$crossFrame) {
|
|
try {
|
|
while (dptop.parent != dptop && dptop.parent[d][tag]('frameset').length == 0) {
|
|
dptop = dptop.parent
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
if (!dptop.$dp) {
|
|
dptop.$dp = {
|
|
ff: $FF,
|
|
ie: $IE,
|
|
opera: $OPERA,
|
|
status: 0,
|
|
defMinDate: Config.minDate,
|
|
defMaxDate: Config.maxDate,
|
|
isTablet: isTablet,
|
|
isPhone: isPhone,
|
|
isTouch: isTablet || isPhone
|
|
}
|
|
}
|
|
initTopDP();
|
|
if (Config.$preLoad && $dp.status == 0) {
|
|
dpAttachEvent(w, 'onload', function () {
|
|
main(null, true)
|
|
})
|
|
}
|
|
var docEventName = $dp.isTouch ? 'ontouchstart' : 'onmousedown';
|
|
if (!w[d].docMD) {
|
|
dpAttachEvent(w[d], docEventName, disposeDP, true);
|
|
w[d].docMD = true
|
|
}
|
|
if (!dptop[d].docMD) {
|
|
dpAttachEvent(dptop[d], docEventName, disposeDP, true);
|
|
dptop[d].docMD = true
|
|
}
|
|
dpAttachEvent(w, 'onunload', function () {
|
|
if ($dp.dd) {
|
|
display($dp.dd, "none")
|
|
}
|
|
});
|
|
|
|
function initTopDP() {
|
|
try {
|
|
dptop[d], dptop.$dp = dptop.$dp || {}
|
|
} catch (e) {
|
|
dptop = w;
|
|
$dp = $dp || {}
|
|
}
|
|
var obj = {
|
|
win: w,
|
|
$: function (el) {
|
|
return (typeof el == 'string') ? w[d].getElementById(el) : el
|
|
},
|
|
$D: function (id, arg) {
|
|
return this.$DV(this.$(id).value, arg)
|
|
},
|
|
$DV: function (v, arg) {
|
|
if (v != '') {
|
|
this.dt = $dp.cal.splitDate(v, $dp.cal.dateFmt);
|
|
if (arg) {
|
|
for (var p in arg) {
|
|
if (this.dt[p] === undefined) {
|
|
this.errMsg = 'invalid property:' + p
|
|
} else {
|
|
this.dt[p] += arg[p];
|
|
if (p == 'M') {
|
|
var offset = arg['M'] > 0 ? 1 : 0;
|
|
var tmpday = new Date(this.dt['y'], this.dt['M'], 0).getDate();
|
|
this.dt['d'] = Math.min(tmpday + offset, this.dt['d'])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.dt.refresh()) {
|
|
return this.dt
|
|
}
|
|
}
|
|
return ''
|
|
},
|
|
show: function () {
|
|
var divs = dptop[d].getElementsByTagName('div'),
|
|
maxZIndex = 1e5;
|
|
for (var i = 0; i < divs.length; i++) {
|
|
var curZ = parseInt(divs[i].style.zIndex);
|
|
if (curZ > maxZIndex) {
|
|
maxZIndex = curZ
|
|
}
|
|
}
|
|
this.dd.style.zIndex = maxZIndex + 2;
|
|
display(this.dd, "block");
|
|
display(this.dd.firstChild, "")
|
|
},
|
|
unbind: function (el) {
|
|
el = this.$(el);
|
|
if (el.initcfg) {
|
|
dpDetachEvent(el, 'onclick', function () {
|
|
main(el.initcfg)
|
|
});
|
|
dpDetachEvent(el, 'onfocus', function () {
|
|
main(el.initcfg)
|
|
})
|
|
}
|
|
},
|
|
hide: function () {
|
|
display(this.dd, "none")
|
|
},
|
|
attachEvent: dpAttachEvent
|
|
};
|
|
for (var p in obj) {
|
|
dptop.$dp[p] = obj[p];
|
|
}
|
|
$dp = dptop.$dp
|
|
}
|
|
|
|
function dpAttachEvent(o, sType, fHandler, useCapture) {
|
|
if (o.addEventListener) {
|
|
var shortTypeName = sType.replace(/on/, "");
|
|
fHandler._ieEmuEventHandler = function (e) {
|
|
return fHandler(e)
|
|
};
|
|
o.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, useCapture)
|
|
} else {
|
|
o.attachEvent(sType, fHandler)
|
|
}
|
|
}
|
|
|
|
function dpDetachEvent(o, sType, fHandler) {
|
|
if (o.removeEventListener) {
|
|
var shortTypeName = sType.replace(/on/, "");
|
|
fHandler._ieEmuEventHandler = function (e) {
|
|
return fHandler(e)
|
|
};
|
|
o.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false)
|
|
} else {
|
|
o.detachEvent(sType, fHandler)
|
|
}
|
|
}
|
|
|
|
function compareCfg(o1, o2, issub) {
|
|
if (typeof o1 != typeof o2) return false;
|
|
if (typeof o1 == 'object') {
|
|
if (!issub) {
|
|
for (var o in o1) {
|
|
if (typeof o2[o] == 'undefined') return false;
|
|
if (!compareCfg(o1[o], o2[o], true)) return false
|
|
}
|
|
}
|
|
return true
|
|
} else if (typeof o1 == 'function' && typeof o2 == 'function') {
|
|
return o1.toString() == o2.toString()
|
|
} else {
|
|
return o1 == o2
|
|
}
|
|
}
|
|
|
|
function getJsPath() {
|
|
var path, tmp, scripts = w[d][tag]("script");
|
|
for (var i = 0; i < scripts.length; i++) {
|
|
path = scripts[i].getAttribute('src') || '';
|
|
path = path.substr(0, path.toLowerCase().indexOf('wdatepicker.js'));
|
|
var tmp = path.lastIndexOf("/");
|
|
if (tmp > 0) path = path.substring(0, tmp + 1);
|
|
if (path) break
|
|
}
|
|
return path
|
|
}
|
|
|
|
function loadCSS(path, title, charset) {
|
|
var head = w[d][tag]('HEAD').item(0),
|
|
style = w[d].createElement('link');
|
|
if (head) {
|
|
style.href = path;
|
|
style.rel = 'stylesheet';
|
|
style.type = 'text/css';
|
|
if (title) style.title = title;
|
|
if (charset) style.charset = charset;
|
|
head.appendChild(style)
|
|
}
|
|
}
|
|
|
|
function getAbsM(w) {
|
|
w = w || dptop;
|
|
var lm = 0,
|
|
tm = 0;
|
|
while (w != dptop) {
|
|
var ifs = w.parent[d][tag]('iframe');
|
|
for (var i = 0; i < ifs.length; i++) {
|
|
try {
|
|
if (ifs[i].contentWindow == w) {
|
|
var rc = getBound(ifs[i]);
|
|
lm += rc.left;
|
|
tm += rc.top;
|
|
break
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
w = w.parent
|
|
}
|
|
return {
|
|
'leftM': lm,
|
|
'topM': tm
|
|
}
|
|
}
|
|
|
|
function getBound(o, ignoreScr) {
|
|
if (o.getBoundingClientRect) {
|
|
return o.getBoundingClientRect()
|
|
} else {
|
|
var patterns = {
|
|
ROOT_TAG: /^body|html$/i,
|
|
OP_SCROLL: /^(?:inline|table-row)$/i
|
|
};
|
|
var hssFixed = false,
|
|
win = null,
|
|
t = o.offsetTop,
|
|
l = o.offsetLeft,
|
|
r = o.offsetWidth,
|
|
b = o.offsetHeight;
|
|
var parentNode = o.offsetParent;
|
|
if (parentNode != o) {
|
|
while (parentNode) {
|
|
l += parentNode.offsetLeft;
|
|
t += parentNode.offsetTop;
|
|
if (getStyle(parentNode, 'position').toLowerCase() == 'fixed') hssFixed = true;
|
|
else if (parentNode.tagName.toLowerCase() == "body") win = parentNode.ownerDocument.defaultView;
|
|
parentNode = parentNode.offsetParent
|
|
}
|
|
}
|
|
parentNode = o.parentNode;
|
|
while (parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName)) {
|
|
if (parentNode.scrollTop || parentNode.scrollLeft) {
|
|
if (!patterns.OP_SCROLL.test(display(parentNode))) {
|
|
if (!$OPERA || parentNode.style.overflow !== 'visible') {
|
|
l -= parentNode.scrollLeft;
|
|
t -= parentNode.scrollTop
|
|
}
|
|
}
|
|
}
|
|
parentNode = parentNode.parentNode
|
|
}
|
|
if (!hssFixed) {
|
|
var scr = getScroll(win);
|
|
l -= scr.left;
|
|
t -= scr.top
|
|
}
|
|
r += l;
|
|
b += t;
|
|
return {
|
|
'left': l,
|
|
'top': t,
|
|
'right': r,
|
|
'bottom': b
|
|
}
|
|
}
|
|
}
|
|
|
|
function getWH(w) {
|
|
w = w || dptop;
|
|
var doc = w[d],
|
|
width = (w.innerWidth) ? w.innerWidth : (doc[de] && doc[de].clientWidth) ? doc[de].clientWidth : doc.body.offsetWidth,
|
|
height = (w.innerHeight) ? w.innerHeight : (doc[de] && doc[de].clientHeight) ? doc[de].clientHeight : doc.body.offsetHeight;
|
|
return {
|
|
'width': width,
|
|
'height': height
|
|
}
|
|
}
|
|
|
|
function getScroll(w) {
|
|
w = w || dptop;
|
|
var doc = w[d],
|
|
doce = doc[de],
|
|
db = doc.body;
|
|
doc = (doce && doce.scrollTop != null && (doce.scrollTop > db.scrollTop || doce.scrollLeft > db.scrollLeft)) ? doce : db;
|
|
return {
|
|
'top': doc.scrollTop,
|
|
'left': doc.scrollLeft
|
|
}
|
|
}
|
|
|
|
function disposeDP(e) {
|
|
try {
|
|
var src = e ? (e.srcElement || e.target) : null;
|
|
if ($dp.cal && !$dp.eCont && $dp.dd && src != $dp.el && $dp.dd.style.display == 'block') {
|
|
$dp.cal.close()
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
|
|
function dpLoaded() {
|
|
$dp.status = 2
|
|
}
|
|
var isDptopReady, dptopInterval;
|
|
|
|
function main(initcfg, preLoad) {
|
|
if (!$dp) return;
|
|
initcfg.el = initcfg.el || w[d].activeElement;
|
|
if ($dp.isTouch) {
|
|
try {
|
|
initcfg.el.readOnly = true;
|
|
initcfg.el.blur()
|
|
} catch (e) {}
|
|
}
|
|
initTopDP();
|
|
var cfg = {};
|
|
for (var p in initcfg) {
|
|
cfg[p] = initcfg[p]
|
|
}
|
|
for (var p in Config) {
|
|
if (p.substring(0, 1) != '$' && cfg[p] === undefined) {
|
|
cfg[p] = Config[p]
|
|
}
|
|
}
|
|
if (preLoad) {
|
|
if (!dptopReady()) {
|
|
dptopInterval = dptopInterval || setInterval(function () {
|
|
if (dptop[d].readyState == 'complete') {
|
|
clearInterval(dptopInterval);
|
|
}
|
|
main(null, true)
|
|
}, 50);
|
|
return
|
|
}
|
|
if ($dp.status == 0) {
|
|
$dp.status = 1;
|
|
cfg.el = emptyEl;
|
|
showPicker(cfg, true)
|
|
} else {
|
|
return
|
|
}
|
|
} else if (cfg.eCont) {
|
|
cfg.eCont = $dp.$(cfg.eCont);
|
|
cfg.el = emptyEl;
|
|
cfg.autoPickDate = true;
|
|
cfg.qsEnabled = false;
|
|
showPicker(cfg)
|
|
} else {
|
|
if (Config.$preLoad && $dp.status != 2) return;
|
|
if (!cfg.el) {
|
|
var evt = SearchEvent();
|
|
if (w.event === evt || evt) {
|
|
cfg.srcEl = evt.srcElement || evt.target;
|
|
evt.cancelBubble = true
|
|
}
|
|
}
|
|
cfg.el = cfg.el = $dp.$(cfg.el || cfg.srcEl);
|
|
if (cfg.el == null) {
|
|
alert('WdatePicker:el is null!\nexample:onclick="WdatePicker({el:this})"');
|
|
return
|
|
}
|
|
try {
|
|
if (!cfg.el || cfg.el['My97Mark'] === true || cfg.el.disabled || ($dp.dd && display($dp.dd) != 'none' && $dp.dd.style.left != '-970px')) {
|
|
if (cfg.el['My97Mark']) cfg.el['My97Mark'] = false;
|
|
return
|
|
}
|
|
} catch (e) {}
|
|
if (evt && cfg.el.nodeType == 1 && !compareCfg(cfg.el.initcfg, initcfg)) {
|
|
$dp.unbind(cfg.el);
|
|
dpAttachEvent(cfg.el, evt.type == 'focus' ? 'onclick' : 'onfocus', function () {
|
|
main(initcfg)
|
|
});
|
|
cfg.el.initcfg = initcfg;
|
|
}
|
|
showPicker(cfg)
|
|
}
|
|
|
|
function dptopReady() {
|
|
if ($IE && dptop != w && dptop[d].readyState != 'complete') return false;
|
|
return true
|
|
}
|
|
|
|
function SearchEvent() {
|
|
if ($FF) {
|
|
try {
|
|
var count = 0;
|
|
func = SearchEvent.caller;
|
|
while (func != null) {
|
|
var arg0 = func.arguments[0];
|
|
if (arg0 && (arg0 + '').indexOf('Event') >= 0 || (count++) > 97) {
|
|
return arg0
|
|
}
|
|
func = func.caller
|
|
}
|
|
} catch (e) {}
|
|
return null
|
|
}
|
|
return event
|
|
}
|
|
}
|
|
|
|
function getStyle(obj, attribute) {
|
|
return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, false)[attribute]
|
|
}
|
|
|
|
function display(obj, value) {
|
|
if (obj) {
|
|
if (value != null) obj.style.display = value;
|
|
else return getStyle(obj, 'display')
|
|
}
|
|
}
|
|
|
|
function showPicker(cfg, preLoad) {
|
|
var nodeName = cfg.el ? cfg.el.nodeName : 'INPUT';
|
|
if (preLoad || cfg.eCont || new RegExp(/input|textarea|div|field|span|p|a/ig).test(nodeName)) {
|
|
cfg.elProp = cfg.elProp || nodeName == 'INPUT' ? 'value' : 'innerHTML'
|
|
} else {
|
|
return
|
|
}
|
|
if (cfg.lang == 'auto') {
|
|
cfg.lang = $IE ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase()
|
|
}
|
|
if (!cfg.eCont) {
|
|
for (var p in cfg) {
|
|
$dp[p] = cfg[p]
|
|
}
|
|
}
|
|
if (!$dp.dd || cfg.eCont || ($dp.dd && (cfg.getRealLang().name != $dp.dd.lang || cfg.skin != $dp.dd.skin))) {
|
|
if (cfg.eCont) {
|
|
ddInit(cfg.eCont, cfg)
|
|
} else {
|
|
$dp.dd = dptop[d].createElement("DIV");
|
|
$dp.dd.style.cssText = 'position:absolute';
|
|
dptop[d].body.appendChild($dp.dd);
|
|
ddInit($dp.dd, cfg);
|
|
if (preLoad) {
|
|
$dp.dd.style.left = $dp.dd.style.top = '-970px'
|
|
} else {
|
|
$dp.show();
|
|
setPos($dp)
|
|
}
|
|
}
|
|
} else if ($dp.cal) {
|
|
$dp.show();
|
|
$dp.cal.init();
|
|
if (!$dp.eCont) setPos($dp)
|
|
}
|
|
|
|
function ddInit(cont, cfg) {
|
|
var dm = dptop[d].domain,
|
|
isCross = false,
|
|
defHtml = '<iframe hideFocus=true width=9 height=7 frameborder=0 border=0 scrolling=no src="about:blank"></iframe>';
|
|
cont.innerHTML = defHtml;
|
|
var langList = Config.$langList,
|
|
skinList = Config.$skinList,
|
|
doc;
|
|
try {
|
|
doc = cont.lastChild.contentWindow[d]
|
|
} catch (e) {
|
|
isCross = true;
|
|
cont.removeChild(cont.lastChild);
|
|
var ifr = dptop[d].createElement("iframe");
|
|
ifr.hideFocus = true;
|
|
ifr.frameBorder = 0;
|
|
ifr.scrolling = 'no';
|
|
ifr.src = "javascript:(function(){var d=document;d.open();d.domain='" + dm + "';})()";
|
|
cont.appendChild(ifr);
|
|
setTimeout(function () {
|
|
doc = cont.lastChild.contentWindow[d];
|
|
ddWrite()
|
|
}, 97);
|
|
return
|
|
}
|
|
ddWrite();
|
|
|
|
function ddWrite() {
|
|
var realLang = cfg.getRealLang(),
|
|
ver = '4.9.0b3';
|
|
cont.lang = realLang.name;
|
|
cont.skin = cfg.skin;
|
|
var h = ['<head><script>', '', 'var doc=document, $d, $dp, $cfg=doc.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;', 'if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}', 'if(!$dp.isTouch)doc.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};', '</script><script src=', jsPath, 'lang/', realLang.name, '.js?' + ver + ' charset=', realLang.charset, '></script>'];
|
|
if (isCross) h[1] = 'document.domain="' + dm + '";';
|
|
for (var i = 0; i < skinList.length; i++) {
|
|
if (skinList[i].name == cfg.skin) {
|
|
h.push('<link rel="stylesheet" type="text/css" href="' + jsPath + 'skin/' + skinList[i].name + '/datepicker.css?');
|
|
h.push(ver);
|
|
h.push('" charset="' + skinList[i].charset + '"/>')
|
|
}
|
|
}
|
|
h.push('<script src="' + jsPath + 'calendar.js?');
|
|
h.push(ver);
|
|
h.push('"></script>');
|
|
h.push('</head><body leftmargin="0" topmargin="0" tabindex=0></body></html>');
|
|
h.push('<script>var t;t=t||setInterval(function(){if((typeof(doc.ready)=="boolean"&&doc.ready)||doc.readyState=="complete"){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);</script>');
|
|
cfg.setPos = setPos;
|
|
cfg.onload = dpLoaded;
|
|
doc.write('<html>');
|
|
doc.cfg = cfg;
|
|
doc.write(h.join(''));
|
|
doc.close()
|
|
}
|
|
}
|
|
|
|
function setPos(dp) {
|
|
var l = dp.position.left,
|
|
t = dp.position.top,
|
|
el = dp.el;
|
|
if (el == emptyEl) return;
|
|
if (el != dp.srcEl && (display(el) == 'none' || el.type == 'hidden')) el = dp.srcEl;
|
|
var objxy = getBound(el),
|
|
mm = getAbsM(w),
|
|
currWH = getWH(dptop),
|
|
scr = getScroll(dptop),
|
|
ddHeight = $dp.dd.offsetHeight,
|
|
ddWidth = $dp.dd.offsetWidth;
|
|
if (isNaN(t)) t = 0;
|
|
if ((mm.topM + objxy.bottom + ddHeight > currWH.height) && (mm.topM + objxy.top - ddHeight > 0)) {
|
|
t += scr.top + mm.topM + objxy.top - ddHeight - 2
|
|
} else {
|
|
t += scr.top + mm.topM + objxy.bottom;
|
|
var offsetT = t - scr.top + ddHeight - currWH.height;
|
|
if (offsetT > 0) t -= offsetT
|
|
}
|
|
if (isNaN(l)) l = 0;
|
|
l += scr.left + Math.min(mm.leftM + objxy.left, currWH.width - ddWidth - 5) - ($IE ? 2 : 0);
|
|
dp.dd.style.top = (t + 2) + 'px';
|
|
dp.dd.style.left = l + 'px'
|
|
}
|
|
}
|
|
})(); |