var Class = {
  create: function(){
    return function(){ this.init.apply(this, arguments); }
  }
}
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

var TMLib = {version: '1.0.0'}
// TMlib.eventObj Object
TMLib.eventObj = new Object();
TMLib.eventObj = {
	dragType: null,
	tgtElement: null,
	windElement: new Array(),
	scrollTop: null,
	page: null,
	offsetX: null,
	offsetY: null,
	offsetW: null,
	offsetH: null,
	startX: null,
	startY: null,
	selected: false
}

TMLib.Tool = new Object();
TMLib.Tool = {
	pageSize: function(){
  		var xScroll,yScroll,vW,vH,w,h,top,left;
 		if(window.innerHeight && window.scrollMaxY) {	
  			xScroll = document.body.scrollWidth;
  			yScroll = window.innerHeight + window.scrollMaxY;
  		}
		else if(document.body.scrollHeight > document.body.offsetHeight){
  			xScroll = document.body.scrollWidth;
  			yScroll = document.body.scrollHeight;
  		}
		else{
  			xScroll = document.body.offsetWidth;
  			yScroll = document.body.offsetHeight;
  		}

 		if(self.innerHeight){
  			vW = self.innerWidth;
  			vH = self.innerHeight;
  		}
		else if(document.documentElement && document.documentElement.clientHeight){
  			vW = document.documentElement.clientWidth;
  			vH = document.documentElement.clientHeight;
  		}
		else if(document.body){
  			vW = document.body.clientWidth;
  			vH = document.body.clientHeight;
  		}

		if(yScroll < vH){ h = vH; } else{ h = yScroll; }
		if(xScroll < vW){ w = vW; } else{ w = xScroll; }

		if(document.body.scrollTop > document.documentElement.scrollTop){ top = document.body.scrollTop; }
		else{ top = document.documentElement.scrollTop; }
		if(document.body.scrollLeft > document.documentElement.scrollLeft){ left = document.body.scrollLeft; }
		else{ left = document.documentElement.scrollLeft; }

  		return {pageW: w, pageH: h, viewW: vW, viewH: vH, Top:top, Left:left};
	},
	elementSize: function(id){
		var l,w,t,h;
		l = document.getElementById(id).offsetLeft;
		w = document.getElementById(id).offsetWidth;
		t = document.getElementById(id).offsetTop;
		h = document.getElementById(id).offsetHeight;
		return {left:l, right:l+w, top:t, bottom:t+h, width:w, height:h};
	},
	addEvent: function(element,eve,func,flg){
		if(element.addEventListener){ element.addEventListener(eve,func,flg); }
		else{ element.attachEvent('on'+eve,func); }
	},
	delEvent: function(element,eve,func,flg){
		if(element.addEventListener){ element.removeEventListener(eve,func,flg); }
		else{ element.detachEvent('on'+eve,func); }
	},
	closeMenu: function(id){
		document.getElementById(id).style.visibility = 'hidden';
	}
}

TMLib.EffectFade = new Class.create();
TMLib.EffectFade.prototype = {
	init: function(id){
		this.id = id;
	},
	start: function(time){
		this.time = time;
		this.step = 0 ;
		this._effect();
	},
	finish: function(){
		clearTimeout(this.timer);		
	},
	_effect: function(){
		if(this.step == 0){
			clearTimeout(this.timer);
			document.getElementById(this.id).style.filter = 'alpha(opacity:0)';
			document.getElementById(this.id).style.opacity = '0.1';
		}
		if(this.step >= this.time){
			clearTimeout(this.timer);
			document.getElementById(this.id).style.filter = 'alpha(opacity:100)';
			document.getElementById(this.id).style.opacity = '1';
			return;
		}
		this.step++;

		var i = this.step / this.time ;
		document.getElementById(this.id).style.filter = 'alpha(opacity:'+Math.round(i*100)+')';
		document.getElementById(this.id).style.opacity = i;
		this.timer = setTimeout(this._effect.bind(this),20);
	}
}

// TMLib.menu class
TMLib.menu = new Class.create();
TMLib.menu.prototype = {
	init:function(id,type,items){
		var i,c, str,tagID,select,cls;
		this.id = id;
		select = null;
		for(i=0,c=0,str='';i<items.length;i++){
			if(items[i].type == 'spc'){ str +='<TD CLASS="spc">&nbsp;</TD>'; continue;}
			if(items[i].type == 'nb'){ str +='<TD CLASS="nb">&nbsp;</TD>'; continue;}
			c++;
			tagID = id + '_' + c;
			if(items[i].select){ select = i }
			if(items[i].type == 'non'){ cls = 'non' } else{ cls = 'off' }
			if(type.direct == 'v'){ str += '<TR><TD ID="'+tagID+'" CLASS='+cls+'>'+items[i].tit+'</TD></TR>' }
			else{ str += '<TD ID="'+tagID+'" CLASS='+cls+'>'+items[i].tit+'</TD>' }
		}
		if(type.direct != 'v'){ str = '<TR>'+str+'</TR>' }
		str = '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 ID="'+id+'" CLASS="'+type.style+'">'+str+'</TABLE>' ;
		document.write(str);
		for(i=0,c=0;i<items.length;i++){
			if(items[i].type == 'spc' || items[i].type == 'nb'){ continue; }
			c++;
			if(items[i].type == 'non'){ continue; }
			tagID = id + '_' + c ;
			document.getElementById(tagID).style.cursor = 'pointer';
			document.getElementById(tagID).onmouseover = this._on;
			document.getElementById(tagID).onmouseout = this._off;
			if(items[i].url){ document.getElementById(tagID).onmousedown = this._click }
			else if(items[i].func){ document.getElementById(tagID).onmousedown = this._func }

			document.getElementById(tagID).menuType = items[i];
			document.getElementById(tagID).menuParent = id;

			if(i == select){
				document.getElementById(tagID).className = 'select';
				document.getElementById(id).menuSelect = tagID;
			}
		}
		if(type.type == 'sub'){
			document.getElementById(id).onmouseout = this._out;
			document.getElementById(id).style.position = 'absolute';
			document.getElementById(id).style.visibility = 'hidden';
		}
		else{
			document.getElementById(id).style.position = 'relative';
		}
	},
	selectMenu: function(no){
		var select;
		select = document.getElementById(this.id).menuSelect;
		if(select){ document.getElementById(select).className = 'off' }
		document.getElementById(this.id).menuSelect = this.id+'_'+no;
		document.getElementById(this.id+'_'+no).className = 'select';		
	},
	_click: function(eve){
		window.location = document.getElementById(this.id).menuType.url;
		return false;
	},
	_func: function(eve){
		document.getElementById(this.id).menuType.func(document.getElementById(this.id).menuType.arg);
	},
	_on: function(eve){
		var pID,subID,page,p_size,this_size,sub_size,top,left;		
		document.getElementById(this.id).className = 'on';	
		pID = document.getElementById(this.id).menuParent;
		if(document.getElementById(pID).menuOutTimeID){ clearTimeout(document.getElementById(pID).menuOutTimeID) }
		if(document.getElementById(pID).menuSub != null && this.id != document.getElementById(pID).menuSub){
			subID = document.getElementById(document.getElementById(pID).menuSub).menuType.sub_id;
			if(document.getElementById(subID).menuOutTimeID){ clearTimeout(document.getElementById(subID).menuOutTimeID) }
			document.getElementById(subID).style.visibility = 'hidden';
			document.getElementById(pID).menuSub = null;
		}
		if(document.getElementById(this.id).menuType.type == 'sub'){
			subID = document.getElementById(this.id).menuType.sub_id;
			if(document.getElementById(subID).menuOutTimeID){ clearTimeout(document.getElementById(subID).menuOutTimeID) }
			page = TMLib.Tool.pageSize();
			p_size = TMLib.Tool.elementSize(pID);
			this_size = TMLib.Tool.elementSize(this.id);
			sub_size = TMLib.Tool.elementSize(subID);
			top = p_size.top+this_size.top+this_size.height;
			left = p_size.left+this_size.left;
			if(page.pageW <= left+sub_size.width){ left = page.pageW - sub_size.width }
			document.getElementById(subID).style.top = top+'px';
			document.getElementById(subID).style.left = left+'px';
			document.getElementById(subID).style.visibility = 'visible';
			document.getElementById(pID).menuSub = this.id;
		}
		return false;
	},
	_off: function(eve){
		var pID,subID,select;
		pID = document.getElementById(this.id).menuParent;
		select = document.getElementById(pID).menuSelect;
		if(select == this.id){ document.getElementById(this.id).className = 'select' }
		else{ document.getElementById(this.id).className = 'off' }
		if(document.getElementById(this.id).menuType.type == 'sub'){
			subID = document.getElementById(this.id).menuType.sub_id;
			document.getElementById(subID).menuOutTimeID = setTimeout('TMLib.Tool.closeMenu("'+subID+'")', 500);
		}
		return false;
	},
	_out: function(eve){
		if(document.getElementById(this.id).menuOutTimeID){ clearTimeout(document.getElementById(this.id).menuOutTimeID) }
		document.getElementById(this.id).menuOutTimeID = setTimeout('TMLib.Tool.closeMenu("'+this.id+'")', 500);
	}
}

// TMLib.slideShow class
TMLib.slideShow = {
	init: function(id,item){
		this.id = id;
		document.getElementById(id).items = item;

		document.getElementById(id+'_close').style.cursor = 'pointer';
		document.getElementById(id+'_close').onmousedown = this._close;
		document.getElementById(id+'_close').onmouseover = this._on;
		document.getElementById(id+'_close').onmouseout = this._off;

		document.getElementById(id+'_prev').onmousedown = this._prev;
		document.getElementById(id+'_prev').onmouseover = this._on;
		document.getElementById(id+'_prev').onmouseout = this._off;

		document.getElementById(id+'_next').onmousedown = this._next;
		document.getElementById(id+'_next').onmouseover = this._on;
		document.getElementById(id+'_next').onmouseout = this._off;

		document.getElementById(id+'_img_box').style.cursor = 'pointer';
		document.getElementById(id+'_img_box').onmousedown = this._chenge;
		document.getElementById(id+'_img').galleryImg = false;

//<DIV ID="photo_wind_bg"><IMG SRC="/img/spc.gif"></DIV>
		var bg = document.createElement("div");
		bg.setAttribute('id','photo_wind_bg');
		document.getElementsByTagName("body").item(0).appendChild(bg);


		document.getElementById(id).efect = new TMLib.EffectFade(id+'_img_box');
	},
	view: function(no){
		var page,size,top;
		page = TMLib.Tool.pageSize();
		size = TMLib.Tool.elementSize(this.id);
		left = (page.viewW - size.width) / 2 + page.Left; if(left < 1){ left = 1 }

		document.getElementById(this.id+'_bg').style.height = page.pageH+'px';
		document.getElementById(this.id+'_bg').style.visibility = 'visible';
		this._setnavi(no,this.id);
		document.getElementById(this.id+'_close').className = 'btn_off' ;
		document.getElementById(this.id).style.left = left+'px';
	},
	_setData: function(no,id,img){
		var item,page,top,w,h;
		item = document.getElementById(id).items[no-1];
		document.getElementById(id+'_cmt').innerHTML = item.cmt;
		document.getElementById(id+'_img').src = item.img;

		document.getElementById(id).efect.start(30);

		page = TMLib.Tool.pageSize();
		h = img.height+document.getElementById(id+'_img_box').offsetTop+document.getElementById(id+'_cmt').offsetHeight;
		top = (page.viewH - h) / 2 + page.Top; if(top < page.Top){ top = page.Top; }

		document.getElementById(id).style.height = h+'px';
		document.getElementById(id).style.top = top+'px';
		document.getElementById(id).style.visibility = 'visible';

		if(no == 1){
			document.getElementById(id+'_prev').style.cursor = 'auto';
			document.getElementById(id+'_prev').className = 'btn_non' ;
		}
		else if(no == 2){
			document.getElementById(id+'_prev').className = 'btn_off' ;
			document.getElementById(id+'_prev').style.cursor = 'pointer';
		}

		if(no == document.getElementById(id).items.length){
			document.getElementById(id+'_next').style.cursor = 'auto';
			document.getElementById(id+'_next').className = 'btn_non' ;
		}
		else{
			document.getElementById(id+'_next').style.cursor = 'pointer';
			document.getElementById(id+'_next').className = 'btn_off' ;
		}
	},
	_setnavi: function(no,id){
		var items = document.getElementById(id).items;
		if(no < 1 || no > items.length){
			return;
		}
		document.getElementById(id).currentNo = no;
		document.getElementById(id+'_stat').innerHTML = no+'/'+items.length;
		var img = new Image();
		img.onload=function(){
			TMLib.slideShow._setData(no,id,img);
		}
		img.src = items[no-1].img;
	},
	_chenge: function(eve){
		var id,no,w,x;
		id = document.getElementById(this.id).parentNode.id;
		w = document.getElementById(id+'_img_box').offsetWidth / 2;
		if(eve){ x = eve.clientX; }
		else{ x = event.clientX; }
		x = x - document.getElementById(id).offsetLeft;
		if(w > x){ no = document.getElementById(id).currentNo - 1; }
		else{ no = document.getElementById(id).currentNo + 1; }
		TMLib.slideShow._setnavi(no,id);
	},
	_prev: function(eve){
		var id,no;
		id = document.getElementById(this.id).parentNode.id;
		no = document.getElementById(id).currentNo - 1;
		TMLib.slideShow._setnavi(no,id);
	},
	_next: function(eve){
		var id,no;
		id = document.getElementById(this.id).parentNode.id;
		no = document.getElementById(id).currentNo + 1;
		TMLib.slideShow._setnavi(no,id);
	},
	_on: function(eve){
		if(this.className == 'btn_non'){ return }
		this.className = 'btn_on' ;
	},
	_off: function(eve){
		if(this.className == 'btn_non'){ return }
		this.className = 'btn_off' ;
	},
	_close: function(eve){
		var id = document.getElementById(this.id).parentNode.id ;
		document.getElementById(id).style.visibility = 'hidden';	
		document.getElementById(id+'_bg').style.visibility = 'hidden';
	}
}

// TMLib.wind Object
TMLib.wind = {
	init: function(){
		window.document.onmousemove = this._move;
		window.document.onmouseup = this._up;
		if(document.all){ window.attachEvent("onscroll", this._pageScroll); }
		else{ window.document.onscroll = this._pageScroll; }
	},
	regist: function(id,w,h,tit,cts){
		var str;
		str = '<TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" WIDTH="100%" CLASS="wind_hd"><TR><TD ID="'+id+'_tit">'+tit+'</TD><TD WIDTH="17" ALIGN=right><A HREF="javascript:TMLib.wind.close(\''+id+'\');"><IMG BORDER="0" WIDTH="17" HEIGHT="17" SRC="/img/icon/close.gif" ALT="ÊÄ¤¸¤ë"></A></TD></TR></TABLE>';
		str += '<DIV ID="'+id+'_cts" CLASS="wind_cts">'+cts+'</DIV>';
		document.getElementById(id).innerHTML = str;
		document.getElementById(id+'_tit').style.cursor = 'move';
		document.getElementById(id+'_tit').tgtElement = id;
		document.getElementById(id+'_tit').onmousedown = this._start;
		TMLib.eventObj.windElement.push(id);
		TMLib.eventObj.pageH = document.body.offsetHeight;
	},
	open: function(id,left,top){
		document.getElementById(id).style.left = left+'px';
		document.getElementById(id).style.top = top+'px';
		document.getElementById(id).style.display = 'block';
	},
	close: function(id){
		document.getElementById(id).style.display = 'none';
	},
	_start: function(evt){
		TMLib.eventObj.tgtElement = this.tgtElement;
		TMLib.eventObj.page = TMLib.Tool.pageSize();
		TMLib.eventObj.offsetX = document.getElementById(this.tgtElement).offsetLeft;
		TMLib.eventObj.offsetY = document.getElementById(this.tgtElement).offsetTop;
		TMLib.eventObj.offsetW = document.getElementById(this.tgtElement).offsetWidth;
		TMLib.eventObj.offsetH = document.getElementById(this.tgtElement).offsetHeight;
		var mouseX, mouseY;
		if(document.all){ mouseX = event.x; mouseY = event.y; }
		else{ mouseX = evt.pageX; mouseY = evt.pageY; }
		TMLib.eventObj.startX = mouseX;
		TMLib.eventObj.startY = mouseY;
		TMLib.eventObj.selected = true;
		return false;
	},
	_move: function(evt){
		if(TMLib.eventObj.selected == false){ return }
		var mouseX, mouseY, x, y, maxX, maxY;
 		if(document.all){ mouseX = event.x; mouseY = event.y; }
		else{ mouseX = evt.pageX; mouseY = evt.pageY; }
		mouseX = mouseX - TMLib.eventObj.startX;
		mouseY = mouseY - TMLib.eventObj.startY;
		x = TMLib.eventObj.offsetX+mouseX;
		if(x < 1){ x = 1; }
		if(x > TMLib.eventObj.page.pageW - TMLib.eventObj.offsetW){ x = TMLib.eventObj.page.pageW - TMLib.eventObj.offsetW; }
		y = TMLib.eventObj.offsetY+mouseY;
		if(y < 1){ y = 1; }
		if(y > TMLib.eventObj.page.pageH - TMLib.eventObj.offsetH){ y = TMLib.eventObj.page.pageH - TMLib.eventObj.offsetH; }
		document.getElementById(TMLib.eventObj.tgtElement).style.left = x+'px';
		document.getElementById(TMLib.eventObj.tgtElement).style.top = y+'px';
		return false;
	},
	_up: function(evt){
		if(TMLib.eventObj.selected == false){ return }
		TMLib.eventObj.selected = false;
		return false;
	},
	_pageScroll: function(evt){
		var i, y, page;
		if(TMLib.eventObj.scrollTop == null){ TMLib.eventObj.scrollTop = document.body.scrollTop; }
		y = document.body.scrollTop - TMLib.eventObj.scrollTop ;
		TMLib.eventObj.scrollTop = document.body.scrollTop; 
		for(i=0;i<TMLib.eventObj.windElement.length;i++){	
				y = document.getElementById(TMLib.eventObj.windElement[i]).offsetTop + y;
				if(y < 1){ y = 1; }
if(y >= TMLib.eventObj.page.pageH - document.getElementById(TMLib.eventObj.windElement[i]).offsetHeight){ y = TMLib.eventObj.page.pageH - document.getElementById(TMLib.eventObj.windElement[i]).offsetHeight - 1 }
				document.getElementById(TMLib.eventObj.windElement[i]).style.top = y+'px';
		}
		return true;
	}
}

function viewSWF(w, h, url, img){
	document.write('<object data="'+url+'" type="application/x-shockwave-flash" width="'+w+'" height="'+h+'">');
//	document.write('<EMBED WIDTH='+w+' HEIGHT='+h+' TYPE="application/x-shockwave-flash" WMODE="transparent" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" SRC="'+url+'"></EMBED>');
	document.write('<param name="movie" value="'+url+'">');
	document.write('<param name="quality" value="high">');
	document.write('<param name="wmode" value="transparent">');
	document.write('<param name="play" value="true">');
	document.write('<param name="loop" value="true">');
	if(img){ document.write(img); }
	document.write('</object>');
}

function viewWMV(w, h, url){
	h = h + 68;
	document.write('<OBJECT  WIDTH='+w+' HEIGHT='+h+' CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" STANDBY="Loading Microsoft Windows Media Player components..." TYPE="application/x-oleobject">');
	document.write('<param name="FileName" value="'+url+'">');
	document.write('<param name="ShowControls" value="TRUE">');
	document.write('<param name="ShowTracker" value="TRUE">');
	document.write('<param name="ShowStatusBar" value="TRUE">');
	document.write('<param name="ShowAudioControls" value="TRUE">');
	document.write('<param name="ShowPositionControls" value="TRUE">');
	document.write('<param name="ShowDisplay" value="FALSE">');
	document.write('<param name="DisplaySize" value="0">');
	document.write('<param name="AutoSize" value="0">');
	document.write('<param name="AutoStart" value="FALSE">');
	document.write('<param name="AllowChangeDisplaySize" value="TRUE">');
	document.write('<param name="loop" value="FALSE">');
	document.write('<PARAM NAME="TransparentatStart" VALUE="TRUE">');
	document.write('<EMBED TYPE="application/x-mplayer2" PLUGINSPAGE="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer" SRC="'+url+'" WIDTH='+w+' HEIGHT='+h+' showcontrols=1 showstatusbar=1 showaudiocontrols=1 showpositioncontrols=0 showdisplay=0 allowchangedisplaysize=1 autosize=1 displaysize=0 AutoStart=0 TransparentatStart=true AnimationatStart=false loop=0>');
	document.write('</EMBED>');
	document.write('</OBJECT>');
}
