/*
 * xcalendar.js v1.0
 * ext-js 2.1와 xwindow을 기반으로 작성하였습니다.
 * 
 *  1. 화일이름		: xcalendar.js
 *  2. 작성자			: 김상욱
 *  3. 작성일자		: 2008. 07. 29
 *  4. 파일설명		: 윈도우 상자 구현을 위한 스크립트
 *  5. 프로그램 변경 내역
 *     1) 2008.07.29 / 배포 / 최초 포맷 설정
 */

xcalendar = function() {
};

xcalendar.version = "1.0";

xcalendar.dependency = "ext-js 2.1, xwindow";
xcalendar.format = "Ymd";
xcalendar.dummyNo = 0;

/**
 * 캘린더 객체를 생성하여 리턴한다.
 * func : 캘린더의 선택시 실행할 콜백함수 function(obj, date) {...}
 */
xcalendar.createCalendar = function(func) {
	return new Ext.DatePicker({
		okText: "확인",
		cancelText: "취소",
		dayNames: ["일", "월", "화", "수", "목", "금", "토"],
		monthNames: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
		todayText: "오늘",
		listeners: {
			"select": func	
		}
	});
};

/**
 * 캘린더 윈도우 객체를 생성하여 리턴한다.
 * 
 * title : 윈도우의 타이틀
 * func : 캘린더의 선택시 실행할 콜백함수 function(date) {...}
 */
xcalendar.createWindow = function(title, func) {
	var no = xcalendar.dummyNo++;
	var id = "xcalDiv_" + no;
	$j(document.body).append("<div id='" + id + "' class='x-hidden'></div>");
	var cal = xcalendar.createCalendar(function(obj, date) {
		func(date.format(xcalendar.format));
	});
	cal.render(id);
	return xwindow.createWindow(title, 198, 228, id, false, false);
};

/**
 * 캘린더를 렌더링한다.
 * 
 * cal : 캘린더 객체
 * render : 랜더링할 대상 객체 혹은 그 아이디
 * isVisible : 랜더링 후 랜더링 한 내용을 표시할 것인가 감출것인지 여부
 */
xcalendar.render = function(cal, render, isVisible) {
	cal.render(render);
	if (!isVisible) {
		cal.hide();
	}
};

/**
 * 캘린더 윈도우 객체를 보여준다.
 * left와 top이 생략된 경우에는 이벤트가 발생한 위치에 보여준다.
 * 
 * win : 캘린더윈도우
 * left : x좌표
 * top : y좌표
 */
xcalendar.showWindow = function(win, left, top) {
	if (left == null && top == null) {
		var e = this.event;
		if(!e) e = window.event; 
		var x = 0;
		var y = 0;
		if (e.pageX || e.pageY) { 
		    x = e.pageX; 
		    y = e.pageY; 
		} else if (e.clientX || e.clientY) { 
		    x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; 
		    y = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop; 
		}
		left = x;
		top = y;
	}
	xwindow.setPosition(win, left, top);
	xwindow.show(win);
	xwindow.syncSize(win);
};

/**
 * 캘린더 윈도우 객체를 감춘다.
 * 
 * win : 캘린더윈도우
 */
xcalendar.hideWindow = function(win) {
	xwindow.hide(win);
};

/**
 * 캘린더 객체를 보여준다.
 * 
 * cal : 캘린더
 */
xcalendar.show = function(cal) {
	if (cal == null || cal == "" || cal == "null" ) {
		return;
	}
	cal.show();
};

/**
 * 캘린더 객체를 감춘다.
 * 
 * cal : 캘린더
 */
xcalendar.hide = function(cal) {
	if (cal == null || cal == "" || cal == "null" ) {
		return;
	}
	cal.hide();
};

xcalendar.syncSize = function(win, div) {
	xwindow.setSize(win, div);
};

