
if (THREAD == undefined) {
    var THREAD = {};
}

new function()
{
    //ブラウザの判定
    var b = navigator.userAgent.toLowerCase();
    if (!THREAD.browser) {
	THREAD.browser = {
	    FireFox: /mozilla/.test(b),
	    IE: /msie/.test(b) && !/opera/.test(b)
	};
    }
    THREAD.load = function() 
    {
    }

    THREAD.event = {
	bindListener: function(obj,func) {
                return function(event)  {
                    return func.apply(obj, [event || window.event]);
		}
	},
	addEventListenerBind: function(elm, type, obj,func, useCapture) {
    		var cfunc = THREAD.event.bindListener(obj,func);
    		THREAD.event.addEventListener(elm,type,cfunc,useCapture);
	},
	addEventListener: function(elm, type, func, useCapture) {
  		if(! elm) { return false; }
  		if(! useCapture) {
    		    useCapture = false;
  		}
  		if(elm.addEventListener) {
    		    elm.addEventListener(type, func, useCapture);
  		} else if(elm.attachEvent) {
    		    elm.attachEvent('on'+type, func);
  		} else {
		    alert('no listener');
    		    return false;
  		}
  		return true;
    	},
	removeEventListener: function(elm, type, func, useCapture) {
  		if(! elm) { return false; }
  		if(! useCapture) {
    		    useCapture = false;
  		}
  		if(elm.removeEventListener) {
    		    elm.removeEventListener(type, func, false);
  		} else if(elm.detachEvent) {
    		    elm.detachEvent('on'+type, func);
  		} else {
    		    return false;
  		}
  		return true;
	},
	target: function(evt) {
	    if(evt && evt.target) {
    		if(evt.target.nodeType == 3) {	/* text */
      		    return evt.target.parentNode;
    		} else {
      		    return evt.target;
    		}
  	    } 
	    /* IE 小ウインドウでクリックされた場合 */
	    else if(evt && evt.srcElement) {
    		return evt.srcElement;
  	    } else if(window.event && window.event.srcElement) {
    		return window.event.srcElement;
  	    } else {
    		return null;
  	    }
	},
	preventDefault: function(evt) {
  	    if(evt && evt.preventDefault) {
    		evt.preventDefault();
    		evt.currentTarget['on'+evt.type] = function() {return false;};
  	    } else if(window.event) {
    		window.event.returnValue = false;
  	    }
	},
	stopPropagation: function(evt) {
  	    if(evt && evt.stopPropagation) {
    		evt.stopPropagation();
  	    } else if(window.event) {
    		window.event.cancelBubble = true;
  	    }
	},
	dispatchEvent: function(elm, evttype) {
  	    if(elm.dispatchEvent) {
    	   	var evt = document.createEvent('MouseEvents');
    		evt.initEvent(evttype, true, true);
    		elm.dispatchEvent(evt);
  	    } else if(window.event) {
    		var evt = document.createEventObject();
    		evt.button = 1;
    		elm.fireEvent('on'+evttype, evt);
  	    }
	},
	getPageX: function(evt) 
	{
	  	if ( THREAD.browser.IE ) 
		    return document.body.scrollLeft + window.event.clientX;
                return evt.pageX;
	},
	getPageY: function(evt) 
	{
	  	if ( THREAD.browser.IE ) 
		    return document.body.scrollTop + window.event.clientY;
                return evt.pageY;
	},

	button1: function(evt)
	{
            if (THREAD.browser.IE) {
            	if (evt.button & 1)
		    return 1;
            } else {
                if (evt.button == 0) 
		    return 1;
	    }
            return 0;
	}
    }

    THREAD.utl = {
	getById: function(list,id) {
	    var r;
            for(var j = 0;r = list[j];j++) {
               if (r.id == id) 
                return r;
            }
            return undefined;
	},
	included: function(tar,all) {
            var a;
            for(var i = 0;a = all[i];i++) {
		if (a == tar)
		    return true;
	    }
	    return false;
	},
	minmax: function(all) {
	    var ret = { 	min: undefined,
			max: undefined };
            var a = all[0];
	    if (!a)
		return ret;
	    ret.min = a;
	    ret.max = a;
            for(var i = 1;a = all[i];i++) {
		if (a < ret.min)
		    ret.min = a;
		else if (a > ret.max)
		    ret.max = a;
	    }
	    return ret;
	},
	included1: function(tar,all) {
            var a;
            for(var i = 0;a = all[i];i++) {
		if (a[0] == tar)
		    return a;
	    }
	    return false;
	},
        get: function(el) 
	{
            if (typeof el != 'string' && !(el instanceof Array) )
            { // assuming HTMLElement or HTMLCollection, so pass back as is
            	return el;
            }
            if (typeof el == 'string') 
	    { // ID
            	return document.getElementById(el);
            } else { // array of ID's and/or elements
            	var collection = [];
            	for (var i = 0, len = el.length; i < len; ++i)
            	{
               	    collection[collection.length] = this.get(el[i]);
            	}
            	return collection;
             }
             return null; // safety, should never happen
      	},
	batch: function(el, method, o, override) 
	{
            el = this.get(el);
	    var scope = (override) ? o : window;
         
	    if (!el || el.tagName || !el.length) 
            { // is null or not a collection (tagName for SELECT and others that can be both an element and a collection)
            	    return method.call(scope, el, o);
            } 
            var collection = [];
         
	    var len;
	    for (var i = 0, len = el.length; i < len; ++i)
            {
            	collection[collection.length] = method.call(scope, el[i], o);
            }
             return collection;
	},
        getStyle: function(el, property) {
        	var f = function(el) {
            	var value = null;
            	var dv = document.defaultView;
            
            	if (property == 'opacity' && el.filters) 
            	{// IE opacity
               	    value = 1;
               	    try {
                  	value = el.filters.item('DXImageTransform.Microsoft.Alpha').opacity / 100;
               	    } catch(e) {
                  	try {
                     	    value = el.filters.item('alpha').opacity / 100;
                     	} catch(e) {}
               	    }
                } else if (el.style[property]) 
            	{
               	    value = el.style[property];
            	} else if (el.currentStyle && el.currentStyle[property]) {
               	    value = el.currentStyle[property];
            	} else if ( dv && dv.getComputedStyle )
            	{  // convert camelCase to hyphen-case
               
               	    var converted = '';
               	    for(var i = 0, len = property.length;i < len; ++i) {
                  	if (property.charAt(i) == property.charAt(i).toUpperCase()) 
                  	{
                     	    converted = converted + '-' + property.charAt(i).toLowerCase();
                  	} else {
                     	    converted = converted + property.charAt(i);
                  	}
               	    }
               
               	    if (dv.getComputedStyle(el, '') && dv.getComputedStyle(el, '').getPropertyValue(converted)) {
                  	value = dv.getComputedStyle(el, '').getPropertyValue(converted);
               	    }
            	}
            	return value;
             };
             return this.batch(el, f, this, true);
        },
	getTL: function(el,el2)
	{
	    var tl = THREAD.utl.getTL1(el);
	    if (!el2 || !tl)
		return tl;
	    var tl2 = THREAD.utl.getTL1(el2);
	    tl[0] -= tl2[0];
	    tl[1] -= tl2[1];
	    return tl;
	},
	getTL1: function(el)
	{
	    var f = function(el) 
	    {
   
            	if (!el.parentNode || this.getStyle(el, 'display') == 'none') {
               	    return false;
            	}
            
            	var parent = null;
            	var pos = [];
            	var box;
            
            	if (el.getBoundingClientRect) { // IE
               	    box = el.getBoundingClientRect();
               	    var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
               	    var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
               
               	    return [box.left + scrollLeft, box.top + scrollTop];
            	} else if (document.getBoxObjectFor) { // gecko
               	    box = document.getBoxObjectFor(el);
               
               	    var borderLeft = parseInt(this.getStyle(el, 'borderLeftWidth'));
               	    var borderTop = parseInt(this.getStyle(el, 'borderTopWidth'));
               
               	    pos = [box.x - borderLeft, box.y - borderTop];
            	} else { // safari & opera
               	    pos = [el.offsetLeft, el.offsetTop];
               	    parent = el.offsetParent;
               	    if (parent != el) {
                  	while (parent) {
                     	    pos[0] += parent.offsetLeft;
                     	    pos[1] += parent.offsetTop;
                     	    parent = parent.offsetParent;
                  	}
               	    }
    		    var ua = navigator.userAgent.toLowerCase();
               	    if ( ua.indexOf('opera') != -1 
                     	|| ( ua.indexOf('safari') != -1 && this.getStyle(el, 'position') == 'absolute' ) 
               ) {
                	pos[0] -= document.body.offsetLeft;
                  	pos[1] -= document.body.offsetTop;
               	    } 
            	}
            
            	if (el.parentNode) { 
		    parent = el.parentNode; 
		} else { 
		    parent = null; 
		}
            	while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') 
            	{ // account for any scrolled ancestors
               	    pos[0] -= parent.scrollLeft;
               	    pos[1] -= parent.scrollTop;
      
               	    if (parent.parentNode) { parent = parent.parentNode; } 
               	    else { parent = null; }
            	}
            	return pos;
             };
             return this.batch(el, f, this, true);
	},
	getTop: function(el) {
	     return this.getTL(el)[1];
	},
	getLeft: function(el) {
	     return this.getTL(el)[0];
	},
	extend: function(ptype,core)
        {
		if (ptype.prototype == undefined)
		     ptype.prototype = {};
                for(var a in core.prototype) {
                    if (!ptype.prototype[a])
                     	ptype.prototype[a] = core.prototype[a];
                }
        },
	tomei: function(tar,opa) 
	{
	    if (opa == 10) {
	        tar.style.filter = undefined;
                tar.style.MozOpacity = 1;
                tar.style.opacity = 1;
		return;
	    }
	    tar.style.filter = 'alpha(opacity=' + (opa * 10) + ')';
            tar.style.MozOpacity = opa / 10;
            tar.style.opacity = opa / 10;
	},
	findId: function(div,name)
	{
	    if (div.id == name)
            	return div;
            var child = div.childNodes;
            var len = child.length;
            for(var i = 0;i < len;i++) {
               var ret = THREAD.utl.findId(child.item(i),name);
               if (ret)
                     return ret;
            }
            return false;
	},
	_findByClassName: function(all,div,name)
	{
	    if (div.className == name) {
		all.push(div);
	    }
            var child = div.childNodes;
            var len = child.length;
            for(var i = 0;i < len;i++) {
               THREAD.utl._findByClassName(all,child.item(i),name);
            }
            return ;
	},
	findByClassName: function(div,name)
	{
	    var all = [];
	    this._findByClassName(all,div,name)
	    return all;
	},
	clear: function(div)
	{
	    while(div.hasChildNodes()) {
		div.removeChild(div.lastChild);
	   }
	},
        top: function(div)
        {
                var tl = THREAD.utl.getTL(div);
                var t = -document.body.scrollTop + Math.floor(tl[1]);
                window.scrollBy(0,t);
        },
        bottom: function(div)
        {
                var tl = THREAD.utl.getTL(div);
                var t = -document.body.scrollTop + Math.floor(tl[1]);
                window.scrollBy(0,t);
        },
        setText: function(div,text)
        {
            if ((div.nodeName == 'SPAN') || (div.nodeName == 'DIV')) {
                div.childNodes[0].nodeValue = text;
            } else if (div.nodeName == 'INPUT')
                div.value = text;
            else if (div.nodeName == 'PRE') {
                if (THREAD.browser.IE) {
                    THREAD.utl.clear(div);
                    var ls = text.split('\n');
                    var cnt = ls.length;
                    for(var i = 0;i < cnt;i++) {
                        if (i)
                           div.appendChild( document.createElement('br'));
                        div.appendChild( document.createTextNode(ls[i]));
                    }
                } else
                    div.childNodes[0].nodeValue = text;
            } else if (div.nodeType == 3)
                div.nodeValue = text;
        }
    }
}


