// 지도
function initMap(){	
	this.mapCont = 'mapContainer';
	this.point;
	this.iw;
	this.label;					 
};
initMap.prototype = {
	init : function() {
		this.iw = new DInfoWindow(this.label);
		this.dmap = new DMapLite(this.mapCont, {
			point: this.point,
			level: 2,			
			map_type: 'TYPE_SKYVIEW',
			map_hybrid: true,
			shortLogo: true
		});
		this.dmap.disabledMapType("ROADVIEW");
		this.dmap.disabledMapType("REALTRAFFIC");
		this.dmap.disableScrollWheelZoom();
		var DTC = new DMapTypeControl();
		var DZC = new DZoomControl();
		DTC.hybridp.style.left = '40px';				
		this.dmap.addControl(DTC);
		this.dmap.addControl(DZC);		
		this.dmap.addOverlay(new DMark(this.point, {
			label: this.label,
			DInfoWindow: this.iw
		}));		
		UI.addEvent(window, 'load', this.complete.bind(this)); // 페이지 완료 후 loading 제거
	},
	setLabel : function(text) {
		this.label = text;
	},
	setPoint : function(x,y) {
		this.point = new DPoint(x,y);
	},
	complete : function() {		
		UI.$('loading').style.display = 'none';		
	}
};
// 달력
UI.Calendar = function( _conId, _opt ){
	this.monthName = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	this.con = UI.$(_conId );
	this.selTd = null;			
	this.date = {
		year : null,
		month : null,
		day : null
	};
	this.opt = {
		statusId : null, // 달력해당일 뷰
		weekDisp : false,// 해당주 하이라이트
		nearDayDisp : false // 앞뒤 
	};
	Object.extend( this.opt, _opt );
	this.status = UI.$(this.opt.statusId);
	this.init();
};
UI.Calendar.prototype = {
	init : function(){
		var tempDate = new Date();
		this.today = {
			year : tempDate.getFullYear(),
			month : tempDate.getMonth()+1,
			day : tempDate.getDate()
		};
		Object.extend( this.date, this.today );
	
		this.monthCnt = [31,0,31,30,31,30,31,31,30,31,30,31];
		this.template = {
			table : '<table>',
			head : '<span>$TEXT</span>',
			headText : ["일","월","화","수","목","금","토"],
			status : 'YYYY.MM.DD',
			day : '<a href="javascript:;">$TEXT</a>',
			tr : '<tr>'
		};		
		this.callback = function( year, month, day){ alert( "callback : " + year + "/"+month+"/"+day ); };
		
	},
	setDate : function( year, month, day ){this.date = {year:year,month:month,day:day};Object.extend( this.today, this.date );},
	setYear : function( val ){this.date.year = val;Object.extend( this.today, this.date );},
	setMonth : function( val ){this.date.month = val;Object.extend( this.today, this.date );},
	setDay : function( val ){this.date.day = val;Object.extend( this.today, this.date );},
	setDateObj : function( objDate ){
		this.date = {
			year : objDate.getFullYear(),
			month : objDate.getMonth()+1,
			day : objDate.getDate()
		};
	},
	setPrevMonth : function(){ this.setDateObj( new Date( this.date.year, this.date.month-2, this.date.day ) );this.render(); },
	setNextMonth : function(){ this.setDateObj( new Date( this.date.year, this.date.month, this.date.day ) );this.render(); },
	setPrevYear : function(){ this.setDateObj( new Date( this.date.year-1, this.date.month-1, this.date.day ) );this.render(); },
	setNextYear : function(){ this.setDateObj( new Date( this.date.year+1, this.date.month-1, this.date.day ) );this.render(); },
	setTemplate : function( val ){Object.extend( this.template, val );},
	getWeek : function( year, month, day ){
	    var determinedate = new Date( year, month-1, day);
		determinedate.setFullYear(determinedate.getFullYear(), determinedate.getMonth(), determinedate.getDate());
		var D = determinedate.getDay();
		if(D == 0) D = 7;
		determinedate.setDate(determinedate.getDate() + (4 - D));
		var YN = determinedate.getFullYear();
		var ZBDoCY = Math.floor((determinedate.getTime() - new Date(YN, 0, 1, -6)) / 86400000);
		var WN = 1 + Math.floor(ZBDoCY / 7);
		return WN;
	},	
	click : function( event ){
		var obj = UI.getEl( event );		
		try{	
			this.callback( obj );
		}catch (e){}
	},
	resetStatus : function(){
		if( this.status ){
			var temp = this.template.status.replace(/yyyy/gi, this.date.year);
			var month = (this.date.month<10)?"0"+this.date.month:this.date.month;
			var day = (this.date.day<10)?"0"+this.date.day:this.date.day;
			temp = temp.replace(/mm/gi, month);
			temp = temp.replace(/dd/gi, this.date.day);
			this.status.innerHTML = temp;
		}
	},
	render : function(){
		this.monthCnt[1]=(((this.date.year%100!=0)&&(this.date.year%4==0))||(this.date.year%400==0))?29:28;
		var scanToday=(this.date.year==this.today.year && this.date.month==this.today.month)? this.date.day : 0;
		var tempDate = new Date(this.date.year, this.date.month-1, 1);
		var scanFirst=tempDate.getDay()+1;
		var tagTable = $C("TABLE");
		var tagThead = tagTable.appendChild( $C("THEAD") );
		var tagTheadTr = tagThead.appendChild( $C("TR") );

		for( var i=0;i<7;i++ ){
			var th = $C("TH");
			th.className = "head"+(i+1);
			th.innerHTML = this.template.headText[i];
			tagTheadTr.appendChild( th );
		}

		var tagTbody = tagTable.appendChild( $C("TBODY") );
		var tagTbodyTr = null;

		var thisWn=this.getWeek( this.today.year, this.today.month, this.today.day );

		for ( var i=1;i<=42;i++ ){
			if( i%7==1 ){
				tagTbodyTr = tagTbody.appendChild( $C("TR") );
			}
			var tagTbodyTd = tagTbodyTr.appendChild( $C("TD") );
			var col = (i-1)%7+1;
			var dayNum = ((i-scanFirst>=0)&&(i-scanFirst<this.monthCnt[this.date.month-1]))? i-scanFirst+1 : '';
			var day = (dayNum!="")?this.template.day:"";
			var thisYear = this.date.year;
			var thisMonth = this.date.month;
			var thisDay = dayNum;
			var nearFlag = false;// 주변일 플래그
			var className = "week"+col;


			// 근처
			if( this.opt.nearDayDisp == true && dayNum == ''){
				nearFlag = true;
				day = this.template.day;
				var temp = null;
				if( i<=scanFirst ){
					temp = new Date( thisYear, thisMonth-1, 1 + ( i - scanFirst  ) );
					className += " nearPrev";
				} else {
					temp = new Date( thisYear, thisMonth-1, 1 + i-scanFirst );
					className += " nearNext";
				}
				thisYear = temp.getFullYear();
				thisMonth = temp.getMonth()+1;
				thisDay = temp.getDate();
			}
			

			// 오늘
			className += (thisYear == this.date.year && thisMonth == this.date.month && dayNum == scanToday) ? " today" : "";
			// 주간
			var wn = this.getWeek( thisYear, thisMonth, thisDay );
			if( this.opt.weekDisp == true && thisWn == wn ){className += " selectedWeek";}

			var tagTbodyA = $C("A");
			tagTbodyA.href="javascript:;";			
			tagTbodyA.data = {
				year:thisYear,
				month:thisMonth,
				day:thisDay
			};
			
			UI.addEvent( tagTbodyA, "click", this.click.bindAsEventListener(this) );			

			tagTbodyA.innerHTML = thisDay;
			tagTbodyTd.className = className;
			
			tagTbodyTd.appendChild( tagTbodyA );
		}
		this.con.innerHTML = "";
		this.con.appendChild( tagTable );
		if(!!UI.getBrowser().ie){
			var oFrame = $C('iframe');
			oFrame.frameBorder = '0';			
			oFrame.style.width = '200';
			oFrame.style.height = '200';			
			oFrame.setAttribute('style', 'position:absolute;left:0;top:0;');
			oFrame.style.zIndex = '2';
			oFrame.id = 'calDummyFrame';
			UI.$(this.con.id+'Wrap').appendChild(oFrame);
		}
		this.resetStatus();
	}
};
function makeLayer(obj) {	
	if(!!obj) {
    	var html = '';
    	html += '<div class="genreLink">';
    	html += '<ul>';
		for(i in obj) {		
    	html += '<li><a href="'+obj[i].link+'">'+obj[i].name+'</a></li>';
		}
    	html += '</ul>';
    	html += '</div>';		
		return html;
	}
	return false;
};
function initPlayDetailNavi() {
    var layer1 = new UI.Layer('layer1','mainGenreBox');
    var layer2 = new UI.Layer('layer2','subGenreBox');
    layer1.contents = makeLayer(aMainGenres);
    layer2.contents = makeLayer(aSubGenres);
    layer1.addToggle('mainGenreBoxListener');
    layer2.addToggle('subGenreBoxListener');	
	layer1.render();
    layer2.render();
	UI.addEvent(UI.$('mainGenreBoxListener'), 'click', function() { layer2.hide() });
	UI.addEvent(UI.$('subGenreBoxListener'), 'click', function() { layer1.hide() });
};
function makeTxtLayer(txt) {	
	if(!!txt) {
    	var html = '';
    	html += '<div class="genreLink">';
		html += txt.replace('{','<').replace('}','>');  
    	html += '</div>';		
		return html;
	}
	return false;
};
function initShowTimeLayer(sShowTime) {
	var layer = new UI.Layer('layerShowTime', 'showTimeBox');
	layer.contents = makeTxtLayer(sShowTime);
	layer.addToggle('showTimeBoxListener');
	layer.render();
};
function initExtInfo(tempalte, contents) {
/*
 * TODO Extra Info를 초기화 한다.
 * template : layer의 템플릿 HTML;
 */ 
	var layer = new UI.Layer('layerShowTime', 'showTimeBox');
};