source: temp/trunk/html/drecomcms/xbs.js @ 1328

Revision 1328, 32.9 KB checked in by naka, 20 years ago (diff)

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/**
2 * XBS (Cross Browser Scripting) Utilities
3 *
4 * Copyright (c) 2004 DRECOM CO.,LTD. All rights reserved.
5 *
6 * [email protected]
7 * http://www.drecom.co.jp/
8 */
9
10//---------------------------------------------------------------------------------
11// Debugging
12//---------------------------------------------------------------------------------
13/**
14 * Assertion ‚ÉŽ¸”s‚µ‚½‚Æ‚«‚É‚±‚ê‚ð throw
15 */
16ASSERT_EXCEPTION = '*** Assertion Failur *** ';
17
18/**
19 * dprint, dinspect ‚̏o—Í‚ðƒXƒgƒbƒv‚·‚邯‚«‚Í true ‚ɐݒè
20 */
21BLOCK_DEBUG_PRINT  = true;
22
23
24/**
25 * v ‚ª undefined ‚łȂ¯‚ê‚Î true
26 */
27function defined(v) { return (typeof v != 'undefined'); }
28
29/**
30 * ƒIƒuƒWƒFƒNƒg‚Ì‚·‚ׂẴvƒƒpƒeƒB‚ð dprint ŠÖ”‚Å•\ަ
31 *
32 * @param ƒIƒuƒWƒFƒNƒg
33 */
34function dinspect(anObj)
35{
36    if (null == anObj) return;
37    for (key in anObj) {
38        dprint(key + ": " + anObj[key]);
39    }
40
41}
42
43function dprint(obj)
44{
45    if (BLOCK_DEBUG_PRINT) {
46        return;
47    }
48    if (typeof dprint.window == "undefined") {
49        dprint.window = window.open("/drecomcms/js/Console.html",
50            "Console",
51            "width=300, height=600, scrollbars, resizable, menubar");
52    }
53   
54    var t = dprint.window.document.getElementById('console');
55   
56    if (t != null) {
57        t.value = t.value + "\n> " + obj.toString();
58    }
59// Takanori Ishiakwa 04/04/06
60// -----------------------------------------
61// Safari ‚â Opera ‚Å‚¤‚Ü‚­“®ì‚µ‚È‚¢‚½‚ß
62// TextArea ƒo[ƒWƒ‡ƒ“‚ɐ؂è‘Ö‚¦‚½
63/*
64    if (typeof dprint.window == "undefined") {
65        dprint.window = window.open("",
66            "Console",
67            "width=300, height=600, scrollbars, resizable, menubar");
68        dprint.window.document.open("text/plain"); 
69    }
70    var d = dprint.window.document;
71   
72    if (d == null) return;
73
74    d.writeln("> " + obj.toString());
75   
76    // Opera: mime text/plain ‚ðŽw’肵‚Ä‚à HTML ‚Æ‚µ‚ĉðŽß
77    // ‚³‚ê‚Ä‚¢‚邿‚¤‚Ȃ̂ŁA‰üs‚³‚¹‚邽‚߂Ƀ^ƒO‚ðo—Í
78    if (window.opera) d.writeln("<br>");
79*/
80}
81
82// ---------------------------------------------------------
83// XBSUtil
84// ---------------------------------------------------------
85// for the purpose of namespace
86/**
87 * ƒuƒ‰ƒEƒUŒÝŠ·‚ð–ÚŽw‚µ‚āAƒ†[ƒeƒBƒŠƒeƒBŒQ‚ð‚܂Ƃ߂½ƒIƒuƒWƒFƒNƒg
88 *
89 * @author  Takanori Ishikawa
90 * @version 1.0
91 */
92XBSUtil = new Object();
93
94/**
95 * —v‘f‚ðŠÜ‚Þ document ƒIƒuƒWƒFƒNƒg‚ð•Ô‚·B
96 *
97 * @param document
98 */
99XBSUtil.getOwnerDocument = function(anElement)
100{
101    if (anElement.document) {
102        return anElement.document;
103    } else if (anElement.ownerDocument) {
104        return anElement.ownerDocument;
105    }
106    return null;
107}
108
109
110/**
111 * Unicode code points collection
112 *
113 * ƒvƒƒOƒ‰ƒ€’†‚ÅŽg‚¤•¶ŽšƒR[ƒh‚ðW‚ß‚½‚à‚Ì
114 *
115 * @author Takanori Ishikawa
116 * @version 1.0
117 */
118XBSCType = new Object();
119
120// *** XBSCType ‰Šú‰» *** //
121// ‰Šú‰»ƒe[ƒuƒ‹
122// key: property name
123// value: string (length must be 1)
124XBSCType.template_ = {
125    CR:    '\r',
126    LF:    '\n',
127    TAB:   '\t',
128    SPACE: ' ',
129    LT:    '<',
130    GT:    '>',
131    SLASH: '/',
132    COLON: ':',
133    AMP:   '&',
134    LBRACE:'{',
135    RBRACE:'}'
136};
137
138for (var key in XBSCType.template_) {
139    var c = XBSCType.template_[key];
140   
141    if (c.length != 1) {
142        throw ASSERT_EXCEPTION + 'XBSCType.template_[' + key + '] length must be 1.';
143    }
144    c = c.charCodeAt(0);
145    XBSCType[key] = c;
146}
147// íœ
148delete XBSCType.template_;
149
150/**
151 * isspace
152 */
153XBSCType.isspace = function(c)
154{
155    return (c == XBSCType.SPACE || c == XBSCType.TAB || c == XBSCType.CR || c == XBSCType.LF);
156}
157
158
159/**
160 * DOM ƒTƒ|[ƒg‹ï‡‚É‚æ‚éƒuƒ‰ƒEƒU”»•Ê
161 *
162 * <ul>
163 * <li>IE4:   IE4 ‘Š“–</li>
164 * <li>IE5:   IE5 ‘Š“–</li>
165 * <li>NN4:   NN4 ‘Š“–</li>
166 * <li>NN6:   NN6 ‘Š“–</li>
167 * <li>OTHER: ã‹LˆÈŠO</li>
168 * </ul>
169 */
170OTHER = 0;
171IE4   = 1;
172IE5   = 2;
173NN4   = 3;
174NN6   = 4;
175XBSUtil.DOM = document.all
176                ? (document.getElementById ? IE5 : IE4)
177                : (document.getElementById
178                    ? NN6
179                    : (document.layers ? NN4 : OTHER));
180
181/**
182 * ƒeƒLƒXƒg‘€ì API ‚̃Tƒ|[ƒg‹ï‡‚É‚æ‚éƒuƒ‰ƒEƒU”»•Ê
183 */
184XBSUtil.Range = null;
185if (document.selection != null && defined(document.selection.createRange)) {
186    XBSUtil.Range = IE5;
187}
188
189
190// ƒGƒ‰[Žž‚É‚Í 0 ‚ð•Ô‚· parseInt(), 10 i”
191XBSUtil.parseIntNoError = function(anObj) {
192    var v = 0; 
193
194    try {
195        v = parseInt(anObj, 10);
196    } catch (e) {
197
198    }
199    if ((typeof v != typeof 0) || isNaN(v)) {
200        v = 0;
201    }
202
203    return v;
204}
205
206/**
207 * DOM:
208 * DocumentImplementation - feature list
209 */
210if (null == XBSUtil.DOM) {
211    throw ASSERT_EXCEPTION + 'XBSUtil.DOM must be not null.';
212}
213XBSUtil.DOM.HTMLEvent = false;
214
215if (document.implementation) {
216    XBSUtil.DOM.HTMLEvent = document.implementation.hasFeature('HTMLEvents', '2.0');
217}
218
219
220/**
221 * Mac: AppleWebKit
222 *
223 * Apple ‚Ì WebKit framework ‚̏ã‚ɍ\’z‚³‚ꂽƒuƒ‰ƒEƒU‚È‚ç
224 * ‚±‚±‚Å XBSUtil.appleWebKit ƒIƒuƒWƒFƒNƒg‚𐶐¬B
225 *
226 * @field major WebKit ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
227 * @field minor WebKit ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
228 */
229XBSUtil.appleWebKit = null;
230var _webKitMatch = navigator.userAgent.match(/AppleWebKit\/(\d+)\.?(\d+)?/i);
231if (_webKitMatch != null) {
232    var o = new Object();
233   
234    o.major = XBSUtil.parseIntNoError(_webKitMatch[1]);
235    o.minor = XBSUtil.parseIntNoError(_webKitMatch[2]);
236    XBSUtil.appleWebKit = o;
237}
238
239/**
240 * Mac IE
241 *
242 * Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)
243 */
244/**
245 * Mac: IE
246 *
247 * IE ‚Ì Mac ”łȂç
248 * ‚±‚±‚Å XBSUtil.macIE ƒIƒuƒWƒFƒNƒg‚𐶐¬B
249 *
250 * @field major IE ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
251 * @field minor IE ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
252 */
253//
254// ŽQlF
255// Mac ‚̐H‚¦‚È‚¢–ì˜Y‚Ç‚à
256// http://www.din.or.jp/~hagi3/JavaScript/JSTips/ProbMac5.htm
257// Microsoft
258// http://www.microsoft.com/
259//
260XBSUtil.macIE = null;
261if (navigator.userAgent.match(/Mac/i)) {
262    var _macIEMatch;
263   
264    _macIEMatch = navigator.userAgent.match(/MSIE\s+(\d+)\.?(\d+)?/i);
265    if (_macIEMatch) {
266        var o = new Object();
267
268        o.major = XBSUtil.parseIntNoError(_macIEMatch[1]);
269        o.minor = XBSUtil.parseIntNoError(_macIEMatch[2]); 
270        XBSUtil.macIE = o;
271    }
272}
273/**
274 * Opera
275 *
276 * Opera ‚Ȃ炱‚±‚Å XBSUtil.opera ƒIƒuƒWƒFƒNƒg‚𐶐¬B
277 *
278 * @field major opera ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
279 * @field minor opera ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“”ԍ† (Number)
280 */
281XBSUtil.opera = null;
282if (window.opera) {
283    var o = new Object();
284   
285    o.major = 6;
286    if (document.documentElement)
287        o.major = 7;
288   
289    o.minor = 0;
290    XBSUtil.opera = o;
291}
292
293
294// ---------------------------------------------------------
295// XBSLayer
296// ---------------------------------------------------------
297/**
298 * div —v‘f‚È‚Ç‚ðƒŒƒCƒ„[‚Æ‚µ‚Ĉµ‚¤‚½‚߂̃IƒuƒWƒFƒNƒg
299 *
300 * For example:
301 * <pre>
302 *    var layer = new XBSLayer(anIdOfDivElement);
303 *    // some operation...
304 * </pre>
305 *
306 * @author  Takanori Ishikawa
307 * @version 1.0
308 * @see     document.layer
309 * @see     style
310 *
311 * @param     uniqId  div —v‘f‚Ì id ‘®«
312 * @param     doc     document ƒIƒuƒWƒFƒNƒgiƒIƒvƒVƒ‡ƒ“FƒfƒtƒHƒ‹ƒg‚Íwindow.documentj
313 */
314function XBSLayer(uniqId, doc)
315{
316    if (uniqId) {
317        this.setLayerImp(XBSLayer.getLayerImpById(uniqId, doc));
318    }
319}
320/**
321 * Žw’肳‚ꂽ div —v‘f‚ª‚È‚¯‚ê‚ΗáŠO‚𓊂°‚é
322 *
323 * ‚Ç‚¤‚¹A‚½‚¢‚µ‚½”‚̃ŒƒCƒ„[‚͂Ȃ¢‚̂ŃLƒƒƒbƒVƒ…
324 */
325XBSLayer.makeLayer = function(uniqId, doc)
326{
327    var lyer = null;
328   
329    if (XBSLayer.makeLayer.$cache == null) {
330        XBSLayer.makeLayer.$cache = new Object();
331    }
332   
333    lyer = XBSLayer.makeLayer.$cache[uniqId];
334    if (null == lyer || (doc && doc != XBSUtil.getOwnerDocument(lyer.getLayerImp()))) {
335        lyer = new XBSLayer(uniqId, doc);
336       
337        if (null == lyer || null == lyer.getLayerImp()) {
338            //b throw ASSERT_EXCEPTION + 'div element (id:' + uniqId + ') is required.';
339        }
340        XBSLayer.makeLayer.$cache[uniqId] = lyer;
341    }
342   
343    return lyer;
344}
345
346/* ---- class properties ---- */
347
348// Visibility constants
349/**
350 * ƒŒƒCƒ„[‚̉Ž‹‘®«‚ð•\‚·’萔
351 */
352XBSLayer.VISIBLE   = 1;
353XBSLayer.HIDDEN    = 2;
354XBSLayer.INHERIT   = 3;
355XBSLayer.UNDEFINED = 4;
356
357/**
358 * ƒŒƒCƒ„[‚Ì‘€ì‚ÉŽg‚¤ŽÀ‘•ƒIƒuƒWƒFƒNƒg‚𓾂é
359 *
360 * @param     anId  div —v‘f‚Ì id ‘®«
361 * @param     doc   document ƒIƒuƒWƒFƒNƒgiƒIƒvƒVƒ‡ƒ“FƒfƒtƒHƒ‹ƒg‚Íwindow.documentj
362 * @return    DOM: element.style, NN: layer
363 */
364XBSLayer.getLayerImpById = function(anId, doc)
365{
366    var imp = null;
367   
368    if (null == doc) {
369        doc = document;
370    }
371    if (doc.getElementById || doc.all) {
372        imp = doc.getElementById
373                ? doc.getElementById(anId)
374                : doc.all(anId);
375    } else if (doc.layers) {
376        imp = doc.layers[anId];
377    }
378    return imp;
379}
380XBSLayer.getStyleObjectWithLayerImp = function(imp)
381{
382    if (document.getElementById || document.all) {
383        return imp.style;
384    } else {
385        return imp;
386    }
387}
388
389/**
390 * e—v‘f‚𓾂é
391 *
392 * @param     imp  ŽÀ‘•ƒIƒuƒWƒFƒNƒg
393 * @return    e—v‘f
394 */
395XBSLayer.getParentOfLayerImp = function(imp)
396{
397    var parent = null;
398   
399    if (null == imp) {
400        ;
401    } else if (defined(imp.parentElement)) {
402        parent = imp.parentElement;
403    } else if (defined(imp.offsetParent)) {
404        parent = imp.offsetParent;
405    }
406
407    return parent;
408}
409
410
411/**
412 * ƒŒƒCƒ„[‚Ì‘€ì‚ÉŽg‚¤ŽÀ‘•ƒIƒuƒWƒFƒNƒg‚̉Ž‹‘®«‚ð•Ô‚·B
413 *
414 * @param     imp  ŽÀ‘•ƒIƒuƒWƒFƒNƒg
415 * @return    ‰ÂŽ‹‘®«‚ð•\‚·’萔
416 * <ul>
417 * <li>XBSLayer.VISIBLE</li>
418 * <li>XBSLayer.HIDDEN</li>
419 * <li>XBSLayer.INHERIT</li>
420 * <li>XBSLayer.UNDEFINED</li>
421 * </ul>
422 */
423XBSLayer.getVisibilityWithLayerImp = function(imp)
424{
425    var v;
426   
427    if (XBSUtil.DOM != NN4) {
428        imp = imp.style;
429    }
430    v = imp.visibility;
431    if (document.all) {
432        if (v == '') return XBSLayer.INHERIT;
433    } else if (!document.getElementById && document.layers) {
434        if (v == 'show') return XBSLayer.VISIBLE;
435        if (v == 'hide') return XBSLayer.HIDDEN;
436    }
437   
438    if (v == 'visible') return XBSLayer.VISIBLE;
439    if (v == 'hidden') return XBSLayer.HIDDEN;
440    if (v == 'inherit') return XBSLayer.INHERIT;
441       
442    return XBSLayer.UNDEFINED;
443}
444XBSLayer.setVisibilityWithLayerImp = function(imp, anEnum)
445{
446    var v = '';
447   
448    if (!document.getElementById && document.layers) {
449        if (anEnum == XBSLayer.VISIBLE) v = 'show';
450        if (anEnum == XBSLayer.HIDDEN) v = 'hide';
451    } else {
452        if (anEnum == XBSLayer.VISIBLE) v = 'visible';
453        if (anEnum == XBSLayer.HIDDEN) v = 'hidden';
454        if (anEnum == XBSLayer.INHERIT) v = 'inherit';
455    }
456   
457    if (XBSUtil.DOM != NN4) {
458        imp = imp.style;
459    }
460    return imp.visibility = v;
461}
462/**
463 * ƒŒƒCƒ„[‚Ì display ‘®«
464 *
465 * @return ƒŒƒCƒ„[‚ª—̈æ‚ðŽ‚Âê‡‚Í true
466 */
467XBSLayer.isBlockWithLayerImp = function(imp)
468{
469    var b = true;
470   
471    if (imp.style.display != null) {
472        b = (imp.style.display != 'none');
473    }
474    return b;
475}
476XBSLayer.setBlockWithLayerImp = function(imp, b)
477{
478    if (imp.style != null) {
479        imp.style.display = b ? 'block' : 'none';
480    }
481}
482
483// Position & Size
484
485
486// zIndex
487XBSLayer.getZIndexWithLayerImp = function(imp)
488{
489    if (XBSUtil.DOM != NN4)
490        imp = imp.style;
491   
492    return imp.zIndex;
493}
494XBSLayer.setZIndexWithLayerImp = function(imp, z)
495{
496    if (XBSUtil.DOM != NN4)
497        imp = imp.style;
498   
499    imp.zIndex = z;
500}
501
502
503// Position
504/**
505 * ˆÊ’uŽw’è‚ÉŽg‚¤’萔
506 */
507XBSLayer.LEFT_TOP     = 1;
508XBSLayer.LEFT_BOTTOM  = 2;
509XBSLayer.RIGHT_TOP    = 3;
510XBSLayer.RIGHT_BOTTOM = 4;
511
512/**
513 * ƒ†[ƒeƒBƒŠƒeƒBF Žw’肳‚ꂽƒCƒxƒ“ƒg‚̈ʒu‚ɃŒƒCƒ„[‚ðˆÚ“®A•\ަ
514 *
515 * @param imp div —v‘f
516 * @param theEvent ƒCƒxƒ“ƒgƒIƒuƒWƒFƒNƒg
517 * @param axisType À•W‚ðŽw’è‚·‚éˆÊ’u
518 * <ul>
519 * <li>XBSLayer.LEFT_TOP</li>
520 * <li>XBSLayer.LEFT_BOTTOM</li>
521 * <li>XBSLayer.RIGHT_TOP</li>
522 * <li>XBSLayer.RIGHT_BOTTOM</li>
523 * </ul>
524 *
525 * @param offsetX ‚±‚Ì‹——£‚¾‚¯ƒCƒxƒ“ƒg‚̈ʒu‚©‚ç—£‚· (x À•W)
526 * @param offsetY ‚±‚Ì‹——£‚¾‚¯ƒCƒxƒ“ƒg‚̈ʒu‚©‚ç—£‚· (y À•W)
527 *
528 */
529XBSLayer.popUpWithLayerImpAtEventLocation = function(imp, theEvent, axisType, offsetX, offsetY)
530{
531    var left   = XBSEvent.getMouseX(theEvent) + offsetX;
532    var top    = XBSEvent.getMouseY(theEvent) + offsetY;
533       
534    XBSLayer.initPositionStyle(imp);
535    XBSLayer.setPositionWIthLayerImp(imp, left, top, axisType);
536    XBSLayer.setVisibilityWithLayerImp(imp, XBSLayer.VISIBLE);
537}
538
539/**
540 * ƒŒƒCƒ„[‚̈ʒuŽw’è
541 *
542 * @param imp div —v‘f
543 * @param x x À•W
544 * @param y y À•W
545 * @param axisType À•W‚ðŽw’è‚·‚éˆÊ’u (default: LEFT_TOP)
546 * <ul>
547 * <li>XBSLayer.LEFT_TOP</li>
548 * <li>XBSLayer.LEFT_BOTTOM</li>
549 * <li>XBSLayer.RIGHT_TOP</li>
550 * <li>XBSLayer.RIGHT_BOTTOM</li>
551 * </ul>
552 */
553XBSLayer.setPositionWIthLayerImp = function(imp, x, y, axisType)
554{
555    var left = x;
556    var top  = y;
557    var w = XBSLayer.getWidthWithLayerImp(imp);
558    var h = XBSLayer.getHeightWithLayerImp(imp);
559   
560    if (XBSLayer.LEFT_BOTTOM == axisType) {
561        top -= h;
562    } else if (XBSLayer.RIGHT_TOP == axisType) {
563        left -= w;
564    } else if (XBSLayer.RIGHT_BOTTOM == axisType) {
565        top -= h;
566        left -= w;
567    }
568    if (left < 0) left = 0;
569    if (top < 0) top = 0;
570   
571    XBSLayer.setLeftTopPositionWithLayerImp(imp, left, top)
572}
573/**
574 * ƒŒƒCƒ„[‚̈ʒui¶ãj‚ðŽw’èB
575 *
576 * @param imp div —v‘f
577 * @param top ¶ã x À•W
578 * @param left ¶ã y À•W
579 */
580XBSLayer.setLeftTopPositionWithLayerImp = function(imp, left, top)
581{   
582    if (XBSUtil.DOM == NN4) {
583        imp.moveTo(left, top);
584    }else if (imp.style != null) { 
585        imp.style.left = left; imp.style.top = top;
586    }
587}
588/**
589 * ƒŒƒCƒ„[‚̈ʒuî•ñ‚ð‰Šú‰»Bƒuƒ‰ƒEƒU‚É‚æ‚Á‚Ă͂±‚̊֐”‚ð
590 * ‘¼‚̈ʒuŠÖŒWŠÖ”‚æ‚è‚à‘O‚ɌĂ΂Ȃ¢‚ÆŒ‹‰Ê‚ª•s’è‚ɂȂéB
591 *
592 * @param imp div
593 */
594XBSLayer.initPositionStyle = function(imp)
595{
596    if (document.layers) {
597        return;
598    } else if (typeof imp.style.left == "string") {
599        imp.style.left = imp.offsetLeft + 'px';
600        imp.style.top  = imp.offsetTop  + 'px';
601    } else if (typeof imp.style.pixelLeft != "undefined") {
602        imp.style.pixelLeft = imp.offsetLeft;
603        imp.style.pixelTop  = imp.offsetTop;
604    }
605}
606
607XBSLayer.getLeftWithLayerImp = function(imp)
608{
609    var x = 0;
610
611    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
612        x = imp.offsetLeft;
613    } else if (XBSUtil.DOM == IE4) {
614        x = imp.style.pixelLeft;
615    } else if (XBSUtil.DOM == NN4) {
616        x = imp.clip.left;
617    }
618    return x;
619}
620
621XBSLayer.getTopWithLayerImp = function(imp)
622{
623    var y = 0;
624    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
625        y = imp.offsetTop;
626    } else if (XBSUtil.DOM == IE4) {
627        y = imp.style.pixelTop;
628    } else if (XBSUtil.DOM == NN4) {
629        y = imp.clip.top;
630    }
631    return y;
632}
633
634// Size
635XBSLayer.getWidthWithLayerImp = function(imp)
636{
637    var w = 0;
638    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
639        w = imp.offsetWidth;
640    } else if (XBSUtil.DOM == IE4) {
641        w = imp.style.pixelWidth;
642    } else if (XBSUtil.DOM == NN4) {
643        w = imp.clip.width;
644    }
645    return w;
646}
647XBSLayer.getHeightWithLayerImp = function(imp)
648{
649    var h = 0;
650    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
651        h = imp.offsetHeight;
652    } else if (XBSUtil.DOM == IE4) {
653        h = imp.style.pixelHeight;
654    } else if (XBSUtil.DOM == NN4) {
655        h = imp.clip.height;
656    }
657    return h;
658}
659XBSLayer.setWidthWithLayerImp = function(imp, w)
660{
661    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
662        imp.style.width = w;   
663    } else if (XBSUtil.DOM == IE4) {
664        imp.style.pixelWidth = w;
665    } else if (XBSUtil.DOM == NN4) {
666        imp.resizeTo(w, imp.clip.height);
667
668    }
669}
670XBSLayer.setHeightWithLayerImp = function(imp, h)
671{
672    if (XBSUtil.DOM == NN6 || XBSUtil.DOM == IE5) {
673        imp.style.height = h;   
674    } else if (XBSUtil.DOM == IE4) {
675        imp.style.pixelHeight = h;
676    } else if (XBSUtil.DOM == NN4) {
677        imp.resizeTo(imp.clip.width, h);
678    }
679}
680
681// HTML
682XBSLayer.getInnerHTMLWithLayerImp = function(imp)
683{
684    if (defined(imp.innerHTML)) {
685        return imp.innerHTML;
686    }
687    return '';
688}
689XBSLayer.setInnerHTMLWithLayerImp = function(imp, htmlText)
690{
691    if (defined(imp.innerHTML)) {
692        imp.innerHTML = htmlText;
693    } else if (document.layers != null) {
694        imp.document.open();
695        imp.document.write(htmlText);
696        imp.document.close();
697    }
698}
699
700// Cursor
701XBSLayer.setCursorWithLayerImp = function(imp, aName)
702{
703    if (imp.style != null && defined(imp.style.cursor)) {
704        imp.style.cursor = aName;
705    }
706}
707
708
709
710/* ---- Instance properties ---- */
711/**
712 * e—v‘f‚Ì XBSLayer ‚ð•Ô‚·
713 */
714XBSLayer.prototype.getParent = function()
715{
716    var imp = XBSLayer.getParentOfLayerImp(this.getLayerImp());
717    if (null == imp) {
718        return null;
719    }
720    var lyer = new XBSLayer();
721   
722    lyer.setLayerImp(imp);
723    return lyer;
724}
725XBSLayer.prototype.getID = function() {
726    return this.getLayerImp().id;
727}
728XBSLayer.prototype.hasID = function() {
729    var id = this.getID();
730   
731    return id != null && id != '';
732}
733XBSLayer.prototype.isValid = function() {
734    return (this.getLayerImp() != null);
735}
736// Visibility
737XBSLayer.prototype.getVisibility = function()
738{
739    return XBSLayer.getVisibilityWithLayerImp(this.getLayerImp());
740}
741XBSLayer.prototype.setVisibility = function(aEnum)
742{
743    XBSLayer.setVisibilityWithLayerImp(this.getLayerImp(), aEnum);
744}
745
746/**
747 * ƒŒƒCƒ„[‚ª‰ÂŽ‹‚©‚Ç‚¤‚©‚ð•Ô‚·B
748 *
749 * @return    boolean
750 */
751XBSLayer.prototype.isVisible  = function()
752{
753    return this.getVisibility() == XBSLayer.HIDDEN ? false : true;
754}
755XBSLayer.prototype.setVisible = function(/* boolean */ flag)
756{
757    this.setVisibility(flag ? XBSLayer.VISIBLE : XBSLayer.HIDDEN);
758}
759XBSLayer.prototype.toggleVisibility = function()
760{
761    this.setVisible(false == this.isVisible())
762}
763/**
764 * ƒŒƒCƒ„[‚Ì display ‘®«
765 *
766 * @return ƒŒƒCƒ„[‚ª—̈æ‚ðŽ‚Âê‡‚Í true
767 */
768XBSLayer.prototype.isBlock  = function() 
769{ return XBSLayer.isBlockWithLayerImp(this.getLayerImp()); }
770XBSLayer.prototype.setBlock = function(b)
771{ XBSLayer.setBlockWithLayerImp(this.getLayerImp(), b); }
772
773
774/**
775 * ƒŒƒCƒ„[‚Ì z À•W
776 */
777XBSLayer.prototype.getZIndex = function()
778{
779    return XBSLayer.getZIndexWithLayerImp(this.getLayerImp());
780}
781XBSLayer.prototype.setZIndex = function(z)
782{
783    XBSLayer.setZIndexWithLayerImp(this.getLayerImp(), z);
784}
785
786
787XBSLayer.prototype.getStyleObject = function()
788{
789    return XBSLayer.getStyleObjectWithLayerImp(this.imp);
790}
791XBSLayer.prototype.getLayerImp = function() { return this.imp; }
792XBSLayer.prototype.setLayerImp = function(imp) { this.imp = imp; }
793
794// Position & Size
795XBSLayer.prototype.popUpAtEventLocation = function(theEvent, axisType, offsetX, offsetY)
796{ XBSLayer.popUpWithLayerImpAtEventLocation(this.getLayerImp(), theEvent, axisType, offsetX, offsetY); }
797
798/**
799 * ƒŒƒCƒ„[‚̈ʒuŽw’è
800 *
801 * @param x x À•W
802 * @param y y À•W
803 * @param axisType À•W‚ðŽw’è‚·‚éˆÊ’u
804 * <ul>
805 * <li>XBSLayer.LEFT_TOP</li>
806 * <li>XBSLayer.LEFT_BOTTOM</li>
807 * <li>XBSLayer.RIGHT_TOP</li>
808 * <li>XBSLayer.RIGHT_BOTTOM</li>
809 * </ul>
810 */
811XBSLayer.prototype.setPosition = function(x, y, axisType)
812{ XBSLayer.setPositionWIthLayerImp(this.getLayerImp(), x, y, axisType); }
813XBSLayer.prototype.setLeftTopPosition = function(left, top)
814{
815    XBSLayer.setLeftTopPositionWithLayerImp(this.getLayerImp(), left, top);
816}
817
818XBSLayer.prototype.getX = function() { return XBSLayer.getLeftWithLayerImp(this.getLayerImp()); }
819XBSLayer.prototype.getY = function() { return XBSLayer.getTopWithLayerImp(this.getLayerImp()); }
820/**
821 * À•W‚ðâ‘Î’l‚Ŏ擾
822 */
823XBSLayer.prototype.getAbsolute_ = function(fnName)
824{
825    var ret = 0;
826    var lyer = this;
827   
828    while (lyer != null && lyer.isValid()) {
829        ret += lyer[fnName](); 
830        lyer = lyer.getParent();
831    }
832    return ret;
833   
834}
835XBSLayer.prototype.getAbsoluteX = function()
836{
837    return this.getAbsolute_("getX");
838}
839XBSLayer.prototype.getAbsoluteY = function()
840{
841    return this.getAbsolute_("getY");
842}
843
844XBSLayer.prototype.getWidth  = function() { return XBSLayer.getWidthWithLayerImp(this.getLayerImp()); }
845XBSLayer.prototype.getHeight = function() { return XBSLayer.getHeightWithLayerImp(this.getLayerImp()); }
846XBSLayer.prototype.setWidth  = function(w) { return XBSLayer.setWidthWithLayerImp(this.getLayerImp(), w); }
847XBSLayer.prototype.setHeight = function(h) { return XBSLayer.setHeightWithLayerImp(this.getLayerImp(), h); }
848
849// HTML
850XBSLayer.prototype.getInnerHTML = function()
851{
852    return XBSLayer.getInnerHTMLWithLayerImp(this.getLayerImp());
853}
854XBSLayer.prototype.setInnerHTML= function(htmlText)
855{
856    XBSLayer.setInnerHTMLWithLayerImp(this.getLayerImp(), htmlText);
857}
858
859// Cursor
860XBSLayer.prototype.setCursor = function(aName) { XBSLayer.setCursorWithLayerImp(this.getLayerImp(), aName); }
861
862//---------------------------------------------------------
863// XBSDocument
864//---------------------------------------------------------
865// object for namespace purpose
866/**
867 * ƒhƒLƒ…ƒƒ“ƒgî•ñ‚̎擾
868 *
869 * @author  Takanori Ishikawa
870 * @version 1.0
871 */
872XBSDocument = new Object();
873
874
875/**
876 * ƒhƒLƒ…ƒƒ“ƒg‘S‘̂̑傫‚³
877 *
878 * @return •A‚‚³
879 */
880XBSDocument.getWidth = function()
881{
882    var w = 0;
883   
884    if (window.innerWidth != null) {
885        w = window.innerWidth;
886   
887    // 2004-04-13  Takanori Ishikawa 
888    // ------------------------------------------------------------------------
889    // IE: 0 ‚ª•Ô‚Á‚Ä‚­‚é
890    /*
891    } else if (document.documentElement && document.documentElement.clientWidth != null) {
892        w = document.documentElement.clientWidth;
893    */
894    } else if (document.body && document.body.clientWidth != null) {
895        w = document.body.clientWidth;
896    }
897    return w;
898}
899
900XBSDocument.getHeight = function()
901{
902    var h = 0;
903   
904    if (window.innerHeight != null) {
905        h = window.innerHeight;
906    // 2004-04-13  Takanori Ishikawa 
907    // ------------------------------------------------------------------------
908    // IE: 0 ‚ª•Ô‚Á‚Ä‚­‚é
909    /*
910    } else if (document.documentElement && document.documentElement.clientHeight != null) {
911        h = document.documentElement.clientHeight;
912    */
913    } else if (document.body && document.body.clientHeight != null) {
914        h = document.body.clientHeight;
915    }
916    return h;
917}
918
919/**
920 * ƒhƒLƒ…ƒƒ“ƒg‚̉Ž‹—̈æ‚̍¶ãÀ•W
921 *
922 * @return x, y
923 */
924XBSDocument.getPageOffsetX = function()
925{
926    var x = 0;
927   
928    if (document.body && document.body.scrollLeft != null) {
929        x = document.body.scrollLeft;
930    } else if (document.documentElement && document.documentElement.scrollLeft != null) {
931        x = document.documentElement.scrollLeft;
932    } else if (window.scrollX != null) {
933        x = window.scrollX;
934    } else if (window.pageXOffset != null) {
935        x = window.pageXOffset;
936    }
937   
938    return x;
939}
940XBSDocument.getPageOffsetY = function()
941{
942    var y = 0;
943   
944    if (document.body && document.body.scrollTop != null) {
945        y = document.body.scrollTop;
946    } else if (document.documentElement && document.documentElement.scrollTop != null) {
947        y = document.documentElement.scrollTop;
948    } else if (window.scrollY != null) {
949        y = window.scrollY;
950    } else if (window.pageYOffset != null) {
951        y = window.pageYOffset;
952    }
953   
954    return y;
955}
956
957//---------------------------------------------------------
958//XBSEvent
959//---------------------------------------------------------
960// object for namespace purpose
961/**
962 * ƒCƒxƒ“ƒgƒIƒuƒWƒFƒNƒg‚Ì‘€ì
963 *
964 * @author  Takanori Ishikawa
965 * @version 1.0
966 */
967XBSEvent = new Object();
968
969// *** Key code *** //
970/**
971 * Key code (unicode)
972 *
973 * @see http://www.unicode.org
974 */
975// 0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
976XBSEvent.BACKSPACE_KEY = 0x08;
977// 0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
978XBSEvent.TAB_KEY = 0x09;
979// 000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
980XBSEvent.LINE_FEED_KEY = 0x0A;
981// 000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
982XBSEvent.NEW_LINE_KEY = 0x0D;
983
984
985// Modifier keys
986XBSEvent.ALT_KEY_MASK     = 1;
987XBSEvent.SHIFT_KEY_MASK   = 1 << 1;
988XBSEvent.CONTROL_KEY_MASK = 1 << 2;
989XBSEvent.META_KEY_MASK    = 1 << 3;
990
991/**
992  * getMouseX(e), getMouseY(e)
993  *
994  * ƒ}ƒEƒX‚ªƒCƒxƒ“ƒg‚ð‹N‚±‚µ‚½Žž‚É
995  * XÀ•WAYÀ•W‚ð•Ô‚·ŠÖ”
996  *
997  * @param theEvent ƒ}ƒEƒXƒCƒxƒ“ƒg
998  * @return À•W
999  */
1000XBSEvent.getMouseX = function(theEvent)
1001{
1002    var x = 0;
1003   
1004    if (null == theEvent) {
1005        theEvent = window.event;
1006    }
1007    // Safari ‚Í clientX ‚àâ‘΍À•W‚ŕԂµ‚Ä‚­‚é
1008    if (XBSUtil.appleWebKit != null) {
1009        return theEvent.pageX
1010    }
1011   
1012    if (theEvent.clientX != null) {
1013        x = XBSDocument.getPageOffsetX() + theEvent.clientX;
1014    } else if (theEvent.pageX != null) {
1015        x = theEvent.pageX;
1016    } else if (window.opera != null) {  // ”O‚Ì‚½‚߁B“®ìŠm”F‚µ‚½ƒo[ƒWƒ‡ƒ“‚ł͂±‚È‚¢
1017        x = (document.documentElement ? window.pageXOffset : 0) + theEvent.clientX;
1018    }
1019   
1020    return x;
1021}
1022XBSEvent.getMouseY = function(theEvent) {
1023    var y = 0;
1024   
1025    if (null == theEvent) {
1026        theEvent = window.event;
1027    }
1028   
1029    // Safari ‚Í clientY ‚àâ‘΍À•W‚ŕԂµ‚Ä‚­‚é
1030    if (XBSUtil.appleWebKit != null) {
1031        return theEvent.pageY;
1032    }
1033   
1034    if (theEvent.clientY != null) {
1035        y = XBSDocument.getPageOffsetY() + theEvent.clientY;
1036    } else if (theEvent.pageY != null) {
1037        y = theEvent.pageY;
1038    } else if (window.opera != null) {  // ”O‚Ì‚½‚߁B“®ìŠm”F‚µ‚½ƒo[ƒWƒ‡ƒ“‚ł͂±‚È‚¢
1039        y = (document.documentElement ? window.pageYOffset : 0) + theEvent.clientY;
1040    }
1041   
1042    return y;
1043}
1044
1045
1046/**
1047 * Key Event ‚Ì Unicode ƒR[ƒhƒ|ƒCƒ“ƒg‚𓾂é
1048 *
1049 * @return code, ‚È‚¯‚ê‚Î null
1050 */
1051XBSEvent.getKeyCode = function(theEvent)
1052{
1053    if (theEvent.which != null) {
1054        return theEvent.which;
1055    } else if (theEvent.keyCode != null) {
1056        return theEvent.keyCode;
1057    }
1058    return null;
1059}
1060XBSEvent.getTarget = function(theEvent)
1061{
1062    if (theEvent.target != null) {
1063        return theEvent.target;
1064    } else if (theEvent.srcElement != null) {
1065        return theEvent.srcElement;
1066    }
1067    return null;
1068}
1069
1070
1071XBSEvent.getModifierFlags = function(theEvent)
1072{
1073    var flags = 0;
1074   
1075
1076    if (defined(theEvent.ctrlKey)) {
1077        if (theEvent.altKey) flags |= XBSEvent.ALT_KEY_MASK;
1078        if (theEvent.shiftKey) flags |= XBSEvent.SHIFT_KEY_MASK;
1079        if (theEvent.ctrlKey) flags |= XBSEvent.CONTROL_KEY_MASK;
1080        if (theEvent.metaKey) flags |= XBSEvent.META_KEY_MASK;
1081    } else if (defined(theEvent.modifiers)) {
1082        var m = theEvent.modifiers;
1083       
1084        if (Event.ALT_MASK & m) flags |= XBSEvent.ALT_KEY_MASK;
1085        if (Event.SHIFT_KEY_MASK & m) flags |= XBSEvent.SHIFT_KEY_MASK;
1086        if (Event.CONTROL_MASK & m) flags |= XBSEvent.CONTROL_KEY_MASK;
1087        if (Event.META_MASK & m) flags |= XBSEvent.META_KEY_MASK;
1088    }
1089    return flags;
1090}
1091
1092
1093//---------------------------------------------------------------------------------
1094// Utilities
1095//---------------------------------------------------------------------------------
1096UtilKit = new Object();
1097
1098/**
1099 * Žw’肳‚ꂽƒIƒuƒWƒFƒNƒg‚̃vƒƒpƒeƒB‚Ɋ֐”‚ð *** ’ljÁ *** ‚·‚éB
1100 * ˆÈ‘O‚ɕʂ̊֐”‚ª“o˜^‚³‚ê‚Ä‚¢‚ê‚΂»‚ê‚ðŒÄ‚яo‚µ‚Ä‚©‚çA“o˜^‚³‚ꂽŠÖ”‚ðŒÄ‚яo‚·B
1101 *
1102 * NOTE: “n‚¹‚éˆø”‚͂Ƃ肠‚¦‚¸ 5 ‚‚܂łƂµ‚½B‚±‚ꂾ‚¯‚ ‚ê‚Ώ\•ª‚Ȃ̂ŁB
1103 *
1104 * @param anObject ƒIƒuƒWƒFƒNƒg
1105 * @param funcName ƒvƒƒpƒeƒB–¼
1106 * @param func     ŠÖ”–{‘Ì
1107 */
1108UtilKit.addhook = function(anObject, funcName, func)
1109{
1110    var prev = anObject[funcName];
1111    var fns  = new Array();
1112    if (typeof prev == typeof UtilKit.addhook) {
1113        fns[fns.length] = prev;
1114    }
1115    fns[fns.length] = func;
1116   
1117    // dprint("UtilKit.addhook(" + anObject + ", " + funcName + ") nfunc = " + fns.length);
1118    anObject[funcName] = function() {
1119        // dprint("funcName: " + funcName + ": " + this);
1120        for (var i = 0; i < fns.length; i++) {
1121            // dprint(fns[i]);
1122           
1123            // 2004-04-20  Takanori Ishikawa 
1124            // -------------------------------------------------------------------
1125            // ŠÖ”“à‚ňø”‚̌”‚ðƒ`ƒFƒbƒN‚µ‚Ä‚¢‚é‰Â”\«‚à‚ ‚é‚̂ŁA–{“–‚͈ø”ŒÂ”‚Å•ªŠò‚·‚ׂ«‚©‚à
1126            // ‚½‚¾A‚»‚̏ꍇAˆø”‚ª‘«‚è‚È‚¢ê‡‚Ȃǂàl—¶‚·‚邯–Ê“|‚­‚³‚¢‚̂Ŏ蔲‚«
1127             fns[i](
1128                arguments[0],
1129                arguments[1],
1130                arguments[2],
1131                arguments[3],
1132                arguments[4]);
1133            /*
1134            var f = fns[i]; var args = arguments;
1135           
1136            switch (fns.length) {
1137            case 0: f(); break;
1138            case 1: f(args[0]); break;
1139            case 2: f(args[0], args[1]); break;
1140            case 3: f(args[0], args[1], args[2]); break;
1141            default: ;
1142            }
1143            */
1144        }
1145    };
1146}
1147
1148/**
1149 * ƒIƒuƒWƒFƒNƒg‚̃vƒƒpƒeƒB‚ð•Ô‚·B
1150 * null ‚̏ꍇ‚Í—áŠO‚𓊂°‚é
1151 *
1152 * @param obj  object
1153 * @param name property name
1154 */
1155UtilKit.getPropertyNotNull = function(obj, name)
1156{
1157    var v = obj[name];
1158   
1159    if (null == v) {
1160        throw ASSERT_EXCEPTION + "object: " + obj + " name: " + name + ' must be nut null.';
1161    }
1162   
1163    return v;   
1164}
1165
1166/**
1167 * ƒIƒuƒWƒFƒNƒg‚ð˜_—’l‚ɕϊ·
1168 */
1169UtilKit.parseBoolean = function(v)
1170{
1171    if (typeof v == typeof true) {
1172        return v;
1173    } else if (typeof v == typeof "") {
1174        if ('true' == v)
1175            return true;
1176        else if ('false' == v)
1177            return false;
1178        else
1179            return true;
1180    } else if (null == v) {
1181        return false;
1182    } else {
1183        return true;
1184    }
1185}
1186/**
1187 * ƒIƒuƒWƒFƒNƒg‚̃vƒƒpƒeƒB‚©‚çA‚»‚ê‚Ì“o˜^‚³‚ê‚Ä‚¢‚éƒL[‚ðŒŸõ
1188 *
1189 * @param anObject ƒIƒuƒWƒFƒNƒg
1190 * @param aValue   ƒvƒƒpƒeƒB’l
1191 */
1192UtilKit.getKeyForValue = function(anObject, aValue)
1193{
1194    for (var key in anObject) {
1195        if (aValue == anObject[key]) {
1196            return key;
1197        }
1198    }
1199    return null;
1200}
1201
1202UtilKit.getBgColorById = function(anId, doc)
1203{
1204    var imp;
1205    var style;
1206   
1207    if (doc == null) {
1208        doc = document;
1209    }
1210    imp = XBSLayer.getLayerImpById(anId, doc);
1211    style = imp ? XBSLayer.getStyleObjectWithLayerImp(imp) : null;
1212   
1213    if (style == null) {
1214        return null;
1215    }
1216    return UtilKit.normalizeRGBColorRep(style.backgroundColor);
1217}
1218UtilKit.setBgColorById = function(anId, aColor, doc)
1219{
1220    var imp;
1221    var style;
1222   
1223    if (doc == null) {
1224        doc = document;
1225    }
1226       
1227    imp = XBSLayer.getLayerImpById(anId, doc);
1228    style = imp ? XBSLayer.getStyleObjectWithLayerImp(imp) : null;
1229   
1230    if (style == null) {
1231        return null;
1232    }
1233    style.backgroundColor = aColor;
1234}
1235
1236/**
1237 * NN, Opera ‚Í”wŒiF‚ð rgb(r, g, b) ‚Æ‚¢‚¤Œ`Ž®‚Å
1238 * “n‚µ‚Ä‚­‚é‚̂ŁA‚»‚ê‚ð #RGB ‚ɕϊ·
1239 */
1240UtilKit.normalizeRGBColorRep = function(aColor)
1241{
1242    var m = aColor.match(/rgb\((\d+),\s*(\d+),\s+(\d+)\)/);
1243   
1244    if (null == m) {
1245        return aColor;
1246    }
1247    var s = "#";
1248   
1249    for (var i = 1; i <= 3; i++) {
1250        var n = m[i];
1251       
1252        n = XBSUtil.parseIntNoError(n);
1253        n = n.toString(16);
1254        if (n.length == 1){
1255            n = '0' + n;
1256        }
1257        s += n;
1258    }
1259    return s;
1260}
1261
1262/**
1263 * InitialFirstResponder:
1264 *   ƒ†[ƒU‚ªÅ‰‚É“ü—Í‚·‚ׂ«ƒtƒH[ƒ€—v‘f
1265 *
1266 * InitialFirstResponder ‚ðÝ’è‚·‚éŠÖ”‚ð•Ô‚·B
1267 * ‚±‚̊֐”‚ÍŽÀs‚³‚ê‚邯Awindow.initialFirstResponder ‚É‚»‚̃tƒH[ƒ€—v‘f‚ðŠi”[‚µA
1268 * ‚»‚̃tƒH[ƒ€—v‘f‚ð focus() ‚·‚éB
1269 * window.onload ‚ÅŽg‚í‚ê‚邱‚Æ‚ð‘z’è
1270 *
1271 */
1272UtilKit.makeInitialFirstResponder = function(formName, elementName)
1273{
1274    return function() {
1275        var frm = document.forms[formName];
1276   
1277        if (frm == null) return;
1278        frm = frm[elementName];
1279        if (frm == null) return;
1280       
1281        window.initialFirstResponder = frm;
1282        setTimeout("window.initialFirstResponder.focus()", 500);
1283    };
1284}
1285
1286
1287//---------------------------------------------------------------------------------
1288// ContentsChangedListener
1289//---------------------------------------------------------------------------------
1290/**
1291 *
1292 * ƒy[ƒW‚Ì“à—e‚ª•ύX‚³‚ꂽ‚©‚Ç‚¤‚©‚ð‹L˜^
1293 *
1294 * @author Takanori Ishikawa
1295 * @version 2004/04/20
1296 */
1297function ContentsChangedListener(/* Optional */ aName)
1298{
1299    this.name = aName;
1300    if (this.name == null) {
1301        this.name = '[undefined listener]';
1302    }
1303    this.changed = false;
1304}
1305ContentsChangedListener.prototype.toString = function()
1306{ return '[ContentsChangedListener] ' + this.name; }
1307
1308ContentsChangedListener.prototype.isChanged = function() { return this.changed; }
1309ContentsChangedListener.prototype.setChanged = function(b) {
1310    if (this.changed != b) {
1311        //alert(this + " changed: " + b);
1312    }
1313    this.changed = b;
1314}
1315
1316/**
1317 * ƒCƒxƒ“ƒg‚ð“o˜^‚µA“o˜^‚µ‚½ƒCƒxƒ“ƒg‚ª”­¶‚µ‚½‚Æ‚«‚É
1318 * •ύXƒtƒ‰ƒO‚ð true ‚É‚·‚éB
1319 *
1320 * Žå‚É html —v‘f‚Ì onchange ƒCƒxƒ“ƒg‚Ȃǂð•ß‘¨‚µA
1321 * •ύXƒtƒ‰ƒO‚ð—§‚Ä‚é‚̂Ɏg‚¤B
1322 */
1323ContentsChangedListener.prototype.listenEvent = function(anObject, eventName)
1324{
1325//  2004-04-20  Takanori Ishikawa 
1326//  ------------------------------------------------------------------------
1327//  this ‚͊֐”“à•”‚ÅŽÀsŽž‚ɉðŽß‚³‚ê‚邽‚߁Aˆê“x•ϐ”‚É“ü‚ê‚Ä
1328//  Ã“IƒXƒR[ƒv‚É‘©”›‚·‚é•K—v‚ª‚ ‚éi‰ð•ú‚³‚ê‚È‚¢Hj
1329    var me = this
1330    var callback = function(){ me.setChanged(true); };
1331   
1332    UtilKit.addhook(anObject, eventName, callback);
1333}
1334
1335
1336//---------------------------------------------------------------------------------
1337// Common
1338//---------------------------------------------------------------------------------
1339/**
1340 * ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‘S‘̂̐ݒè
1341 *
1342 * @author  Takanori Ishikawa
1343 * @version 1.0
1344 */
1345OEMBlogGlobal = new Object();
1346
1347/**
1348 * ‹LŽ–•ҏW‚Å Blog ƒ|[ƒ^ƒ‹EƒJƒeƒSƒŠ‚Ì‘I‘ð‚ðƒNƒbƒL[‚ɕۑ¶‚·‚é‚©
1349 */
1350OEMBlogGlobal.saveTbCategoryToCookie = false;
1351
1352/**
1353 * ‹LŽ–•ҏW‚Ń^ƒO•ҏW‹@”\iƒ^ƒO‚²‚ƍ폜AˆÚ“®‚Ȃǁj‚ð HTML ƒ^ƒO‚Å‚à—LŒø‚É‚·‚é‚©
1354 */
1355OEMBlogGlobal.enableTagEditingOnHTML = false;
1356
1357
1358/**
1359 * €–ڐݒè‚̃fƒBƒXƒNƒ[ƒWƒƒƒgƒ‰ƒCƒAƒ“ƒOƒ‹‚ȂǂŃAƒjƒ[ƒVƒ‡ƒ“‚ð—LŒø‚É‚·‚é‚©
1360 */
1361OEMBlogGlobal.enableAnimationFeedback = true;
1362
1363/**
1364 * ‰æ‘œ‚ðƒAƒbƒvƒ[ƒh‚·‚éƒfƒBƒŒƒNƒgƒŠ‚̃pƒX
1365 * jsp ‘¤‚Å“K‹XXV‚³‚ê‚éB
1366 */
1367OEMBlogGlobal.uploadImageDirectory = null;
1368
1369/**
1370 * ƒAƒbƒvƒ[ƒh‚Å‚«‚鉿‘œƒtƒ@ƒCƒ‹–¼‚ÌŒ`Ž®
1371 */
1372OEMBlogGlobal.IMAGE_FILE_PATTERN = /{(¶:|‰E:)?([a-zA-Z0-9-_.!~'()]+\.[a-zA-Z]+)}/;
1373
1374/**
1375 * ƒTƒCƒhƒo[F”z’u‚Å‚«‚鍀–ڂ̍ő吔
1376 *
1377 * @see sidefunc_order.js BoxConfig.maxNBoxes
1378 */
1379OEMBlogGlobal.PANEL_DISABLE_MAX_NBOXES  = 50;   // uŽg—p‚µ‚È‚¢‹@”\v
1380OEMBlogGlobal.PANEL_LEFT_MAX_NBOXES     = 50;   // uŽg—p‚·‚é‹@”\v¶
1381OEMBlogGlobal.PANEL_RIGHT_MAX_NBOXES    = 50;   // uŽg—p‚·‚é‹@”\v‰E
1382
1383
1384/**
1385 *
1386 * ‹LŽ–•ҏWAV‹Kì¬‚ł͈ȉº‚Ì•¶Žš—ñ‚ðŠÜ‚ÞƒŠƒ“ƒN‚ðƒNƒŠƒbƒN‚µ‚½ê‡A
1387 * ‚Ü‚¾•ύX‚ª•Û‘¶‚³‚ê‚Ä‚¢‚È‚¯‚ê‚Ίm”Fƒ_ƒCƒAƒƒO‚ðo‚·B
1388 *
1389 * @see entry_write_edit.js, entry_save_confirm.jsp
1390 * @see OEMBlogGlobal.watchOtherLinks
1391 */
1392OEMBlogGlobal.DOCUMENT_EDITED_WARNING = "•ύX‚͕ۑ¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB<br>ŽŸ‚̃y[ƒW‚ÖˆÚ‚Á‚Ä‚à‚æ‚낵‚¢‚Å‚·‚©H"
1393OEMBlogGlobal.WATCH_OTHER_LINK_LIST = [
1394                    /* ã */
1395                    'MyPage',           /* ƒ}ƒCƒy[ƒW */
1396                    'EntryWrite',       /* ‹LŽ–V‹Kì¬ */
1397                    'EntryList',        /* ‹LŽ–ˆê—— */
1398                    'TopicList',        /* ƒŠƒ“ƒNƒŠƒXƒg */
1399                    'SidefuncOrder',    /* ƒTƒCƒhƒo[ */
1400                    'DesignChange',     /* ƒfƒUƒCƒ“ */
1401                    'BlogSetup',        /* Ý’è */
1402                   
1403                    /* ¶ */
1404                    'SidefuncOrder',    /* ‹@”\‘I‘ðE•À‚ёւ¦ */
1405                    'SidefuncSetup',    /* •\ަ–¼•ύX */
1406                    'SidefuncEditList',     /* ‹@”\’ljÁ */
1407                    'LinksList',        /* ƒŠƒ“ƒNW  •ҏW */
1408                    'CategoryList'      /* ƒJƒeƒSƒŠ  •ҏW */
1409                    ];
1410
1411
1412/**
1413 * ƒeƒLƒXƒg‚Ì’uŠ·‚ȂǂŎg—p‚·‚é‰üsƒR[ƒh
1414 */
1415/** TODO: Žd—l‚É‚µ‚½‚ª‚Á‚āA”»•ʃR[ƒh‚ð‘‚­‚±‚ƁB‚Ƃ肠‚¦‚¸ACRLF ‚É‚µ‚Ä‚¨‚­ */
1416OEMBlogGlobal.lineSeparator = "\r\n";
1417
1418
1419OEMBlogGlobal.makeWatchOtherLinkFunction = function(aListener, prevFunc)
1420{
1421    return function(e) {
1422        var ret = true;
1423           
1424        if (prevFunc != null) {
1425            ret = prevFunc(e);
1426        }
1427        if (aListener.isChanged() == false)
1428            return ret;
1429           
1430        return (htmlConfirm(OEMBlogGlobal.DOCUMENT_EDITED_WARNING))
1431    };
1432}
1433OEMBlogGlobal.watchOtherLinks = function(aDocument, aListener)
1434{
1435    var linkArray = aDocument.links;
1436    var nms = OEMBlogGlobal.WATCH_OTHER_LINK_LIST;
1437    var link;
1438    var count = 0;
1439   
1440    for (var i = 0; i < linkArray.length; i++) {
1441       
1442        link = linkArray[i];
1443        if (null == link) continue;
1444       
1445        for (var j = 0; j < nms.length; j++) {
1446            if (link.href.indexOf(nms[j]) != -1) {
1447                var prevFunc = link.onclick;
1448               
1449                if (typeof prevFunc != 'function') {
1450                    prevFunc = null;
1451                }
1452                link.onclick = OEMBlogGlobal.makeWatchOtherLinkFunction(aListener, prevFunc);
1453               
1454                count++;
1455                break;
1456            }
1457        }
1458        if (count == nms.length) {
1459            break;
1460        }
1461    }
1462}
Note: See TracBrowser for help on using the repository browser.