/* -------------------------------------------------------------------------- */
/*    
 *    JavaScript Document
 *
 *    Copyright(C) LOGOS,Inc.
 *
 *    version 2.1 / 2007-06-07
 *    2007-06-19 add TextAreaSelectAction
 *    2007-11-07 Custom PageScrollAction
 */
/* -------------------------------------------------------------------------- */


if(document.getElementById && document.addEventListener || document.attachEvent){
	dom.event.addEventListener(window, 'load', init);
}

function init(evt){
	
	var RollOverActions = new RollOverAction();
	RollOverActions.RollOver_RollOut(evt);
	
	var StripeColorrActions = new StripeColorrAction();
	StripeColorrActions.StripeColorTable(evt);
	
	var PageScrollActions = new PageScrollAction();
	PageScrollActions.PageScrollSetUp(evt);
	
	var PopUpWindowActions = new PopUpWindowAction();
	PopUpWindowActions.PopUpWindowEvent(evt);
	
	var ShowInfoActions = new ShowInfoAction();
	ShowInfoActions.ShowInfoSetUp(evt);
	
	var TableRollOverActions = new TableRollOverAction();
	TableRollOverActions.TableRollOverSetUp(evt);
	
	var TextAreaSelectActions = new TextAreaSelectAction();
	TextAreaSelectActions.TextAreaSetUp(evt);
	
}


/*/////////////////////////////////////////////////////////////////////
TableRollOverAction
/////////////////////////////////////////////////////////////////////*/

var TrEvents;

function TableRollOverAction(){
	
	this.TableClassName = 'roll_over_table';
	this.TrBgColor = 'trover';
	this.Obj = 'obj';
	this.Btn = 'http';
}

TableRollOverAction.prototype = {
	
	TableRollOverSetUp : function(evt){
		
		var TableLists = document.getElementsByTagName('TABLE');
		
		for(var i=0, len=TableLists.length; i<len; i++){
			
			var TableElement = TableLists.item(i);
			
			if(TableElement){
				
				var TableClass = TableElement.getAttribute('class') ? TableElement.getAttribute('class') : TableElement.getAttribute('className');
				
				if(TableClass != null && TableClass.match(this.TableClassName)){
					
					var TrLists = TableElement.getElementsByTagName('TR');
					
					TrEvents = new TableRollOverAction;
					
					for(var j=0, L=TrLists.length; j<L; j++){
						var TrElement = TrLists.item(j);
						dom.event.addEventListener(TrElement, 'mouseover', this.TrRollOver);
						dom.event.addEventListener(TrElement, 'mouseout', this.TrRollOut);
						
					}
					dom.event.stopPropagation(evt);
				}
			}
		}
	},
	
	TrRollOver : function(evt){
		
		var TrElementObj = dom.event.target(evt);
		var StrTrElementObj = String(TrElementObj);
		if(StrTrElementObj.match(TrEvents.Obj)){
			TrElementObj.parentNode.className = TrEvents.TrBgColor;
		}else if(StrTrElementObj.match(TrEvents.Btn)){
			TrElementObj.parentNode.parentNode.parentNode.className = TrEvents.TrBgColor;
		}
		
		
	},
	
	TrRollOut : function(evt){
		
		var TrElementObj = dom.event.target(evt);
		var StrTrElementObj = String(TrElementObj);
		if(StrTrElementObj.match(TrEvents.Obj)){
			TrElementObj.parentNode.className = '';
		}else if(StrTrElementObj.match(TrEvents.Btn)){
			TrElementObj.parentNode.parentNode.parentNode.className = '';
		}
		
	}
	
};


/*/////////////////////////////////////////////////////////////////////
showInfo
/////////////////////////////////////////////////////////////////////*/

var ShowInfoEvents;

function ShowInfoAction(){
	
	this.sp = ' ';
	this.classNameNow = 'manual_info0';
	this.classNameNew = '_new';
	this.classNameNo = '_no';

}

ShowInfoAction.prototype = {
	
	ShowInfoSetUp : function(evt){
		
		var showLists = document.getElementsByTagName('A');
		
		ShowInfoEvents = new ShowInfoAction;
		
		for(var i=0, len=showLists.length; i<len; i++){
			
			var showInfo = showLists.item(i);
			
			if(showInfo){
				var showInfoClass = showInfo.getAttribute('class') ? showInfo.getAttribute('class') : showInfo.getAttribute('className');
				
				
				if(showInfoClass != null && showInfoClass.match(this.sp)){
					showInfoClass = showInfoClass.split(this.sp);
					showInfoClass = showInfoClass[0];
				}
				
				
				if(showInfoClass != null && showInfoClass.match(this.classNameNow)){
					showInfo.IdClass=showInfoClass;
					dom.event.addEventListener(showInfo, 'click', this.ShowInfoEvent);
					var showInfoClassElement = document.getElementById(showInfoClass);
					showInfoClassElement.style.display = 'none';
				}
			}
		}
		
	},
	
	ShowInfoEvent : function(evt){
		
		var ShowInfoId = dom.event.target(evt);
		
		var ShowInfoClassName = ShowInfoId.IdClass;
		
		var ShowInfoElement = document.getElementById(ShowInfoClassName);
		
		if(ShowInfoElement.style.display == 'none'){
			ShowInfoElement.style.display = 'block';
		}else{
			ShowInfoElement.style.display = 'none'
		}
		
		dom.event.preventDefault(evt);
	}
	
};


/*/////////////////////////////////////////////////////////////////////
PopUpWindowEvent
IE5.xは不可
/////////////////////////////////////////////////////////////////////*/
function PopUpWindowAction(){ }

PopUpWindowAction.prototype = {
	
	PopUpWindowEvent : function(evt){
		
		var conf = {
			className:'popup'
		};
		
		var anchorLists = document.getElementsByTagName('A');
	
		for(var i=0, len=anchorLists.length; i<len; i++){
			var alink = anchorLists[i];
			if(alink.getAttribute('class') == conf.className || alink.getAttribute('className') == conf.className){
				dom.event.addEventListener(alink, 'click', this.externallinkEvent);
			}
		}
		
	},
	
	externallinkEvent : function(evt){
		
		var targetNode = dom.event.target(evt);
		
		if(targetNode.className){
			window.open(targetNode.getAttribute('href'), '_blank');
		}
		dom.event.preventDefault(evt);
		
	}
};


/*/////////////////////////////////////////////////////////////////////
RollOver_RollOut
macIE、Opera6.x使用不可
/////////////////////////////////////////////////////////////////////*/

function RollOverAction(){
	
	this.preloadImages = [];
	
}

RollOverAction.prototype = {
	
	RollOver_RollOut : function(evt){
		var conf = {
			className:'btn',
			postfix:'_on'
		};
		
		var imgNodeList = dom.event.getElementsByClassName(conf.className);
		var node;
		
		for(var i=0, len=imgNodeList.length; i<len; i++){
			node = imgNodeList[i];
			node.originalSrc = node.src;
			node.rolloverSrc = node.originalSrc.replace(/(\.gif|\.jpg)/, conf.postfix + "$1");
			this.preloadImage(node.rolloverSrc);
			dom.event.addEventListener(node, 'mouseover', this.mouseRollOver);
			dom.event.addEventListener(node, 'mouseout', this.mouseRollOut);
		}
		dom.event.stopPropagation(evt);
	},
	
	mouseRollOver : function(evt){
		var targetNode = dom.event.target(evt);
		targetNode.src = targetNode.rolloverSrc;
	},
	
	mouseRollOut : function(evt){
		var targetNode = dom.event.target(evt);
		targetNode.src = targetNode.originalSrc;
	},
	
	preloadImage : function(url){
		var p = this.preloadImages;
		var l = p.length;
		p[l] = new Image();
		p[l].src = url;
	}
	
};


/*/////////////////////////////////////////////////////////////////////
Stripe_Color
IE5.xは不可
/////////////////////////////////////////////////////////////////////*/

function StripeColorrAction(){ }

StripeColorrAction.prototype = {
	
	StripeColorTable : function(evt){
		
		/*初期設定*/
		var conf = {
			className:'striped',
			childNodeName:'tr',
			oddClassName:'addline',
			evenClassName:'evenline'
		}
		
		var tables = dom.event.getElementsByClassName(conf.className);
		
		for(var i=0, len=tables.length; i<len; i++){
			var table = tables[i];
			var lines = table.getElementsByTagName(conf.childNodeName);
			
			for(var j=0, llen=lines.length; j<llen; j++){
				var node = lines[j];
				if(j%2 == 0){
					
					if(document.uniqueID){
						node.setAttribute('className', conf.oddClassName);
					}else{
						node.setAttribute('class', conf.oddClassName);
					}
				}else{
					
					if(document.uniqueID){
						node.setAttribute('className', conf.evenClassName);
					}else{
						node.setAttribute('class', conf.evenClassName);
					}
				}
			}
		}
	}
};


/*/////////////////////////////////////////////////////////////////////
PageScroll
/////////////////////////////////////////////////////////////////////*/

var ScrollEvent;

function PageScrollAction(){
	
	this.scrollFlag = false;
	this.pageScrollTimer;
	this.scrollfrms = 0.1;
	this.scrollmaxHeight;
	this.scrolltargetTop;
	this.scrollmargin = 10;
	this.scrollCoount = new Array();
	this.scrollStartNum = 0;
	this.scrollMaxNum = 100;
	
}

PageScrollAction.prototype = {
	
	PageScrollSetUp : function(evt){
		var htmlNode = document.getElementsByTagName('HTML')[0];
		if (!document.getElementById('top')){
			htmlNode.setAttribute('id', 'top');
		}
		if (!document.getElementById('bottom')){
			var div = document.createElement('DIV');
			div.setAttribute('id', 'bottom');
			div.style.margin  = 0;
			div.style.padding = 0;
			document.body.appendChild(div);
		}
		ScrollEvent = new PageScrollAction;
		dom.event.addEventListener(document, 'click', this.stopScroll);
		if(evt.currentTarget){
			if(window.opera){
				/*OPERA用 Opera9.0のみマウスイベントのバグあり*/
				dom.event.addEventListener(document, 'mousewheel', this.stopScroll);
			}else{
				dom.event.addEventListener(document, 'DOMMouseScroll', this.stopScroll);
			}
		}else{
			dom.event.addEventListener(document, 'mousewheel', this.stopScroll);
		}
		
		var anchorNodes = document.getElementsByTagName('A');
		for (var i=0, L=anchorNodes.length; i < L; i++){
			var aNode = anchorNodes.item(i);
			var hrefNode = aNode.getAttribute('HREF');
			if(hrefNode && hrefNode.match(/#/)){
				hrefNode = hrefNode.split('#');
				if(!hrefNode[0] || hrefNode[0] == location.href.split('#')[0]){
					var target = hrefNode[1];
					if(target){
						aNode.tar = target;
						dom.event.addEventListener(aNode, 'click', this.startScroll);
					}
				}
			}
		}
		
	},
	
	startScroll : function(evt){
		ScrollEvent.stopScroll();
		if(ScrollEvent.scrollFlag == false){
			ScrollEvent.scrollFlag = true;
			if(document.getElementsByTagName('body')[0].scrollHeight){
				ScrollEvent.scrollmaxHeight = document.getElementsByTagName('body')[0].scrollHeight;
			}else if(document.getElementsByTagName('body')[0].offsetHeigh){
				ScrollEvent.scrollmaxHeight = document.getElementsByTagName('body')[0].offsetHeigh;
			}else if(document.documentElement){
				ScrollEvent.scrollmaxHeight = document.documentElement.offsetHeight;
			}
			
			if(ScrollEvent.scrollmaxHeight < 0) ScrollEvent.scrollmaxHeight = 0;
			var targetNode = dom.event.target(evt);
			if(!targetNode.tar){
				var targetParentHrefNode = String(targetNode.parentNode);
				if(targetParentHrefNode && targetParentHrefNode.match(/#/)){
					var targetParentHref = targetParentHrefNode.split('#');
					var targetParent = targetParentHref[1];
					if(targetParent){ targetNode.tar = targetParent; }
				}
			}
			
			
			var targetElement = document.getElementById(targetNode.tar);
			var targetParentoffset = targetElement.offsetTop;
			var targetParent = targetElement;
			while(targetParent.offsetParent){
				targetParent = targetParent.offsetParent;
				targetParentoffset += targetParent.offsetTop;
			}
			ScrollEvent.scrolltargetTop = targetParentoffset;
			
			ScrollEvent.scrolltargetTop = (ScrollEvent.scrolltargetTop <= ScrollEvent.scrollmargin) ? ScrollEvent.scrolltargetTop - ScrollEvent.scrollmargin : ScrollEvent.scrolltargetTop;
		}
		
		if(ScrollEvent.scrollFlag == true){
			ScrollEvent.pageScrollTimer = setTimeout("ScrollEvent.scrollEngine()",10);
		}
		dom.event.preventDefault(evt);
		dom.event.stopPropagation(evt);
	},
	
	stopScroll : function(){
		
		//alert("stop");
		
		if(ScrollEvent.scrollFlag == true) clearTimeout(ScrollEvent.pageScrollTimer);
		ScrollEvent.scrollFlag = false;
		ScrollEvent.scrolltargetTop = '';
		ScrollEvent.scrollCoount = new Array();
		ScrollEvent.scrollStartNum = 0;
		ScrollEvent.scrollMaxNum = 100;
	},
	
	scrollEngine : function(){
		var offsetY;
		if(document.getElementsByTagName('body')[0].scrollTop){
			offsetY = document.getElementsByTagName('body')[0].scrollTop;
		}else if(window.pageYOffset){
			offsetY = window.pageYOffset;
		}else if(document.documentElement){
			if(document.uniqueID){
				offsetY = document.documentElement.scrollTop;
			}else{
				offsetY = document.documentElement.pageYOffset;
			}
		}
		if(offsetY == undefined) offsetY = 0;
		
		var toY = ((ScrollEvent.scrolltargetTop - offsetY) * ScrollEvent.scrollfrms) + offsetY;
		var posY = Math.floor(toY);
		
		//window.status = ScrollEvent.scrolltargetTop + ' : ' + posY + ' : ' + ScrollEvent.scrollmaxHeight;
		
		this.wait(posY);
		window.scrollTo(0, posY);
		if (Math.abs(ScrollEvent.scrolltargetTop - posY) < ScrollEvent.scrollmargin){
			this.stopScroll();
		}
		if(ScrollEvent.scrollFlag == true){
			ScrollEvent.pageScrollTimer = setTimeout("ScrollEvent.scrollEngine()",10);
		}
	},
	
	wait : function(thisY){
		if(thisY){
			ScrollEvent.scrollCoount[ScrollEvent.scrollStartNum] = thisY;
			ScrollEvent.scrollStartNum += 1;
			var scrollTmpNum = ScrollEvent.scrollCoount.length;
			if(scrollTmpNum > ScrollEvent.scrollMaxNum){
				this.stopScroll();
			}
		}
	}
	
};


/*/////////////////////////////////////////////////////////////////////
TextArea選択
/////////////////////////////////////////////////////////////////////*/
var TextAreaSelectEvent;

function TextAreaSelectAction(){
	
	this.TextAreaId = 'mess';
	this.tagName = 'span';
	this.btnName = '_btn';
	this.EscapeStr = /TextAreaSelectEvent.tagName|<\/|\">/;
	
	this.ColorSizeTag = {
		
		color_red:'color_red', 
		color_blue:'color_blue', 
		size_big:'size_big', 
		size_small:'size_small',
		weight_bold:'weight_bold'
		
	}
}

TextAreaSelectAction.prototype = {
	
	TextAreaSetUp : function(evt){
		
		TextAreaSelectEvent = new TextAreaSelectAction;
		
		/*初期設定*/
		var conf = {
			textAreaId:TextAreaSelectEvent.TextAreaId, 
			btnName:TextAreaSelectEvent.btnName
		}
		
		var buttons = dom.event.getElementsByClassName(conf.textAreaId + conf.btnName);
		
		for(var i=0, len=buttons.length; i<len; i++){
			var BtnId = buttons[i].id;
			var target = document.getElementById(BtnId);
			target.textAreaId = conf.textAreaId;
			dom.event.addEventListener(target, 'click', this.SelectText);
		}
	
	},
	
	SelectText : function(evt){
		
		var targetNode = dom.event.target(evt);
		var textAreaInfo = TextAreaSelectEvent.getAreaRange(targetNode.textAreaId);
		var tag = targetNode.id;
		
		if(textAreaInfo.selct_length){
			
			var target = document.getElementById(TextAreaSelectEvent.TextAreaId);
			var valTarget = target.value;
			var range = valTarget.slice(textAreaInfo.start, textAreaInfo.end);
			var beforeNode = valTarget.slice(0, textAreaInfo.start);
			var afterNode = valTarget.slice(textAreaInfo.end);
			var insertNode;
			
			for(var i in TextAreaSelectEvent.ColorSizeTag){
				if(TextAreaSelectEvent.ColorSizeTag[tag]){
					var FirstTag = TextAreaSelectEvent.ColorSizeTag[tag].match(tag)? TextAreaSelectEvent.ColorSizeTag[tag] : tag;
				}else{
					break;
				}
			}
			
			
			
			do{
				
				if(range.match(TextAreaSelectEvent.EscapeStr)){
				
					alert(range + "　選択文字列にタグが入っています");
					break;
				
				}
				
			
				if (range || textAreaInfo.start != textAreaInfo.end){
				
					var SpanClassNum = beforeNode.lastIndexOf('<' + TextAreaSelectEvent.tagName);
					SpanClassNum = (beforeNode.lastIndexOf('</' + TextAreaSelectEvent.tagName) != -1)? beforeNode.lastIndexOf('</' + TextAreaSelectEvent.tagName) : SpanClassNum;
					var SpanClass =  valTarget.substr(textAreaInfo.start - (textAreaInfo.start - SpanClassNum), textAreaInfo.start - SpanClassNum);
					var ClassTypes = SpanClass.split("_");
					var ClassType = String(SpanClass.match(ClassTypes[0]));
					
					var FirstTagTypes = FirstTag.split("_");
					var FirstTagType = FirstTagTypes[0];
				
					//alert(FirstTagType);
				
				
					if(ClassType.match(FirstTagType)){
						
						
						var NewbeforeNodeNum = beforeNode.lastIndexOf('<' + TextAreaSelectEvent.tagName);
						var NewbeforeNode = beforeNode.slice(0, NewbeforeNodeNum)
						
						insertNode = NewbeforeNode + '<' + TextAreaSelectEvent.tagName + ' class="' + FirstTag + '">' + range;
						
						var NewClassType = FirstTagTypes[1];
						var OldClassType = ClassTypes[1];
							
						var NewTxextSelectLength = textAreaInfo.selct_length;
						var OldClassTypeBeforePoint = beforeNode.lastIndexOf('>');
						var OldClassTypeBefore = valTarget.slice(OldClassTypeBeforePoint + 1);
						
						OldClassTypeBeforeNum = OldClassTypeBefore.indexOf('</');
						var OldClassTypeBeforeLength = OldClassTypeBefore.slice(0, OldClassTypeBeforeNum);
						OldClassTypeBeforeLength = OldClassTypeBeforeLength.length;
						
						
						
						if(OldClassType.match(NewClassType) && NewTxextSelectLength == OldClassTypeBeforeLength){
							
							
							var NewinsertNodePoint = insertNode.lastIndexOf('<span class="' + FirstTagType + '_' + OldClassType);
							
							var NewinsertNode = insertNode.slice(0, NewinsertNodePoint);
							var NewafterNode = afterNode.slice(TextAreaSelectEvent.tagName.length + 3);
								
							insertNode = NewinsertNode + range;
							afterNode = NewafterNode;
							
								
						}else if(NewTxextSelectLength != OldClassTypeBeforeLength){
							alert("同じ属性のタグが重複します。別々にスタイルを適用して下さい");
							break;
						}
						
						
						target.value = insertNode + afterNode;
						
					}else{
					
							insertNode = (FirstTag)? '<' + TextAreaSelectEvent.tagName + ' class="' + FirstTag + '">' + range + '</' + TextAreaSelectEvent.tagName + '>' : '<' + tag + '>' + range + '</' + tag + '>';
							target.value = beforeNode + insertNode + afterNode;
					
					}
				}

			}while(0);
			
		}else{
			alert("選択して下さい");
		}
		
		if(target){
			target.start = textAreaInfo.start;
			target.end = textAreaInfo.end;
			dom.event.setTextAreaSelectText(target);
		}
		
		dom.event.preventDefault(evt);
		dom.event.stopPropagation(evt);
	},
	
	getAreaRange : function(TextAreaId){
		
		var text = dom.event.getTextAreaSelectText(TextAreaId);
		var textNodeList = [];
		textNodeList.start = text.StartTxt;
		textNodeList.end = text.EndTxt;
		textNodeList.selct_length = text.TextLength;
		return textNodeList;
		
	}
	
};


