// JavaScript Document


var dom = new Object();
dom.core = new Object();
dom.css = new Object();
dom.event = new Object();
dom.misc = new Object();

dom.core.childNodes = function(node){
		var array = new Array();
		
		if(!node){return array;}
		
		if(!node.hasChildNodes()){return array;};
		
		var children = node.childNodes;
		
		for(var i=0;i<children.length;i++){
			var c = children.item(i);
			if(c.nodeType == 3){
					var text = c.nodeValue;
					
					if(!text.match("/[^\s\t\n\r]/")){
						continue;
					}
			}
			
			
			array.push(c);
		}
		
		array.item = function(n) {
			if(array[n]){
					return array[n];
			}else{
					return null;
			}
		}
		
		return array;
}


dom.core.previousSibling = function(node){
		if(!node){return null;}
		
		var o = node;
		
		var p;
		
		while( p = o.previousSibling){
			if(p.nodeType == 3){
					var text = p.nodeValue;
					
					if(!text.match("/[^\s\t\n\r]/")){
						o = p;
						continue;
					}
			}
			
			return p;
		}
		
		return null;
}


dom.core.nextSibling = function(node){
		if(!node){return null;}
		
		var o = node;
		
		var p;
		
		while(p=o.nextSibling){
			if(p.nodeType ==3){
				var text = p.nodeValue;
				
				if(!text.match("/[^\s\t\n\r]/")){
					o = p;
					continue;
				}
			}
			
			return p;
		}
		
		return null;
}



dom.core.getTextContent = function(node){
		var text = "";
		if(!node){return text;}
		if(typeof node.textContent != "undefined"){
			text = node.textContent;
		}else if(typeof node.innerText != "undefined"){
			text = node.innerText;
		}else if(node.hasChildNodes()){
			for(var i = node.childNodes.length;i--;){
				var o = node.childNodes.item(i);
				
				if(o.nodeType == 3){
					text = o.nodeValue + text;
				}else{
					text = dom.core.getTextContent(o) + text;
				}
			}
		}
		
		return text;
}
				
				
dom.core.removeChildNodes = function(node){
		while(node.hasChildNodes()){
			node.removeChild(node.lastChild);
		}
}



dom.event.addEventListener = function (elm,type,func,useCapture){
		if(! elm) {return false;}
		if(! useCapture){
			useCapture = false;
		}
		
		if(elm.addEventListener){
			elm.addEventListener(type,func,false);
		}else if(elm.attachEvent){
			elm.attachEvent('on' + type,func);
		}else{
			return false;
		}
		return true;
};



dom.event.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;
};
		

dom.event.target = function(evt){
	if(evt && evt.target){
		if(evt.target.nodeType == 3){
			return evt.target.parentNode;
		}else{
			return evt.target;
		}
	}else if(window.event && window.event.srcElement){
		return window.event.srcElement;
	}else{
		return null;
	}
};



dom.event.preventDefault = function(evt){
	if(evt && evt.preventDefault){
		evt.preventDefault();
		
		/*safari1.3対策*/
		evt.currentTarget['on'+evt.type] = function(){return false;}
	}else if(window.event){
		window.event.returnValue = false;
	}
};

dom.event.stopPropagation = function(evt){
	if(evt && evt.stopPropagation){
		evt.stopPropagation();
	}else if(window.event){
		window.event.cancelBubble = true;
	}
};



dom.event.drag = function(targetElm,dragableElm){
	if(!targetElm){return ;}
	if(!dragableElm){
		dragableElm = targetElm;
	}
	
	var mouseX,mouseY,targetX,targetY;
	/*ブラウザウィンドウサイズ*/
	var winSize = dom.misc.getWindowSize();
	
	
	var dragEnd = function (evt){
		dom.event.removeEventListener(document,"mousemove",dragMove,false);
		dom.event.removeEventListener(document,"mouseup",dragEnd,false);
		
		dom.event.stopPropagation(evt);
		dom.event.preventDefault(evt);
	};
	
	
	var dragMove = function(evt){
		var left = targetX - mouseX + evt.clientX;
		var top = targetY - mouseY + evt.clientY;
		var right = left + targetElm.offsetWidth;
		var bottom = top + targetElm.offsetHeight;
		
		if(left > 0 && right < winSize.width && top > 0 && bottom < winSize.height){
			targetElm.style.left = left + "px";
			targetElm.style.top = top + "px";
			
		}else{
			dragEnd();
		}
		
		dom.event.stopPropagation(evt);
		dom.event.preventDefault(evt);
		
	};
	
	
	var dragStart = function(evt){
		winSize = dom.misc.getWindowSize();
		
		mouseX = evt.clientX;
		mouseY = evt.clientY;
		
		targetX = targetElm.offsetLeft;
		targetY = targetElm.offsetTop;
		
		dom.event.addEventListener(document,"mousemove",dragMove,false);
		dom.event.addEventListener(document,"mouseup",dragEnd,false);
		
		dom.event.stopPropagation(evt);
		dom.event.preventDefault(evt);
	};
	
	
	dom.event.addEventListener(dragableElm,"mousedown",dragStart,false);
}


dom.misc.getWindowSize = function() {
  /* サイズを格納するオブジェクトを生成 */
  var obj = new Object();
  /* Internet Explorerの場合 */
  if( document.uniqueID ) {
    obj.width = document.documentElement.clientWidth;
    obj.height = document.documentElement.clientHeight;
  /* それ以外の場合 */
  } else {
    obj.width = window.innerWidth;
    obj.height = window.innerHeight;
  }
  /* サイズオブジェクトを返す */
  return obj;
};

dom.misc.getElementAbsPos = function(elm) {
    var obj = new Object();
    obj.x = elm.offsetLeft;
    obj.y = elm.offsetTop;
    while(elm.offsetParent) {
       elm = elm.offsetParent;
       obj.x += elm.offsetLeft;
       obj.y += elm.offsetTop;
    }
    return obj;
}