/**
 * @module 콤포넌트 스크립트
 * @author RyongSu Kim <blond_***@hotmail.com>
 * @description: 콤포넌트 스크립트
 * @date: 2009년 5월 14일~28일
 */
/**
 * Version:
 * 		v1.0.0		component.relation.edit, component.schedule.edit
 */

var nwHandle;
function openCustomWindow(url, windowname, width, height, centerflag) {
	nwHandle = window.open(url, windowname, (width==""?"":dkCenterWindow(width,height, centerflag)) + ",scrollbars=1,resizable=1");
	nwHandle.focus();
}
function closeCustomWindow() {
	nwHandle.window.close();
}

// ----------------------------------------------------------------
// 					1. component.schedule.edit
// ----------------------------------------------------------------

/**
 * 함수설명: 여행일정편집창을 펼친다.
 * 파라메터:
 *		mode	= {'admin', 'user'}
**/
function openScheduleEditor(mode) {
	var actionurl = jReURL + "/?action=component.schedule.editor";
	if ( mode == 'admin' ) {
		openCustomWindow(actionurl, "__SCHEDULEEDITOR__", 800,500, true);
	} else {	// user
		
	}
}

/**
 * 함수설명: 출발날자별 가격편집창을 펼친다.
 * 파라메터:
 *		mode	= {'admin', 'user'}
**/
function openStartDateEditor(mode) {
	var actionurl = jReURL + "/?action=component.startdate.editor";
	if ( mode == 'admin' ) {
		openCustomWindow(actionurl, "__STARTDATEEDITOR__", 800,500, true);
	} else {	// user
		
	}
}

//2009.5.31 --------------------------------
function openPortInfoEditor(mode) {
	var actionurl = jReURL + "/?action=component.airline.editor";
	if ( mode == 'admin' ) {
		openCustomWindow(actionurl, "__PORTINFOEDITOR__", 800,500, true);
	} else {	// user
		
	}
}

//2009.5.31 --------------------------------
function openRentCarEditor(mode) {
	var actionurl = jReURL + "/?action=component.rentcar.editor";
	if ( mode == 'admin' ) {
		openCustomWindow(actionurl, "__RENTCAREDITOR__", 800,500, true);
	} else {	// user
		
	}
}

/**
 * 함수설명: opener로부터 스케쥴편집에 사용할 변수들을 얻는다.
 * 되돌림값:
 *		array ( "SCHEDULE":		스케쥴문자렬
 *		);
**/
function getScheduleParamsFromOpener() {
	var rtv = [];
	try {
		rtv["SCHEDULE"] = window.opener.document.DATA.SCHEDULE.value;
	} catch (e) { rtv["SCHEDULE"] = ""; }
	return rtv;
}

/**
 * 함수설명: opener로부터 출발날자별 가격편집에 사용할 변수들을 얻는다.
 * 되돌림값:
 *		array ( "STARTDATE":		스케쥴문자렬
 *		);
**/
function getStartDateParamsFromOpener() {
	var rtv = [];
	try {
		rtv["STARTDATE"] = window.opener.document.DATA.STARTDATE.value;
	} catch (e) { rtv["STARTDATE"] = ""; }
	return rtv;
}

//2009.5.31 ----------------------------------
function getPortInfoParamsFromOpener() {
	var rtv = [];
	try {
		rtv["PORTINFO"] = window.opener.document.DATA.PORT_INFO.value;
	} catch (e) { rtv["PORTINFO"] = ""; }
	return rtv;
}

//2009.5.31 ----------------------------------
function getRentCarParamsFromOpener() {
	var rtv = [];
	try {
		rtv["TIME_PRICES"] = window.opener.document.DATA.TIME_PRICES.value;
	} catch (e) { rtv["TIME_PRICES"] = ""; }
	return rtv;
}

/**
 * 함수설명: opener에 파라메터를 설정하고 파서를 진행한다.
 * 파라메터:
 *		arr = array ( "SCHEDULE":		스케쥴문자렬
 *		);
**/
function setScheduleParamsToOpener(arr) {
	var schedule = arr["SCHEDULE"];
	try {
		document.DATA.SCHEDULE.value = schedule;
	} catch(e) {}

	parserScheduleFieldToHTML("admin");
}

/**
 * 함수설명: opener에 파라메터를 설정하고 파서를 진행한다.
 * 파라메터:
 *		arr = array ( "SCHEDULE":		스케쥴문자렬
 *		);
**/
function setStartDateParamsToOpener(arr) {
	var startdate = arr["STARTDATE"];
	try {
		document.DATA.STARTDATE.value = startdate;
	} catch(e) {}

	parserStartDateFieldToHTML("admin");
}

//2009.5.31 --------------------------------
function setPortInfoParamsToOpener(arr) {
	var portinfo = arr["PORTINFO"];
	try {
		document.DATA.PORT_INFO.value = portinfo;
	} catch(e) {}

	parserPortInfoFieldToHTML("admin");
}

//2009.5.31 --------------------------------
function setRentCarParamsToOpener(arr) {
	var time_prices = arr["TIME_PRICES"];
	try {
		document.DATA.TIME_PRICES.value = time_prices;
	} catch(e) {}

	parserRentCarFieldToHTML("admin");
}


/**
 * 함수설명: 문자렬을 파서하여 HTML코드를 생성하는 함수이다.
 * 파라메터:
 *		mode	= {'admin', 'user'}
 * 		schedule	: 스케쥴마당
 * 출력방식:
 *		divSCHEDULE 오브젝트에 출력
 */
function parserScheduleFieldToHTML(mode) {
	var rtvstr = "";
	var jscdstr = (mode=='admin'?document.DATA.SCHEDULE.value:document.getElementById('hdSCHEDULE').value);
	var tablestr = (mode=='admin'?' class="line_lt" border="0" cellpadding="3" cellspacing="1" width="100%"':'');
	var thstr = (mode=='admin'?'class="list_hd"':'');
	var tdstr = (mode=='admin'?'class="content"':'');
	var jscdarr = jscdstr.split("##");
	rtvstr = "<table "+tablestr+">";
	rtvstr += '<tr>'
		+'<th '+thstr+' align="center" width="10%">날자</th>'
		+'<th '+thstr+' align="center" width="20%">장소</th>'
		+'<th '+thstr+' align="center" width="70%">내용</th>'
	+'</tr>';
	
	for ( var i = 0 ; i < jscdarr.length ; i++ ) {
		var jso = jscdarr[i];
		if ( jso == "" ) continue;
		rtvstr += "<tr rowspan=2>";
		var jsoarr = jso.split("||");
		/*for ( var j = 0; j < 4 ; j++ ) {
			rtvstr += "<td "+tdstr+" >" + (jsoarr[j]==""?"&nbsp;":jsoarr[j]) + "</td>";
		}*/
		rtvstr += "<td valign=top "+tdstr+" rowspan=2>" + (jsoarr[0]==""?"&nbsp;":jsoarr[0]) + "</td>";
		rtvstr += "<td valign=top "+tdstr+" >" + (jsoarr[1]==""?"&nbsp;":jsoarr[1]) + "</td>";
		rtvstr += "<td "+tdstr+">" + (jsoarr[2]==""?"&nbsp;":jsoarr[2]) + "</td></tr>";
		rtvstr += "</tr>";
		rtvstr += "<tr>";
		rtvstr += "<td "+tdstr+" align=right>호텔/식사&nbsp</td>";
		rtvstr += "<td "+tdstr+">" + (jsoarr[3]==""?"&nbsp;":jsoarr[3]) + "</td>";
		rtvstr += "</tr>";
	}
	rtvstr += "</table>";
	// 출력시작
	try {
		document.getElementById('divSCHEDULE').innerHTML = rtvstr;
	} catch(e) {}
	
	return rtvstr;
}


/**
 * 함수설명: 문자렬을 파서하여 HTML코드를 생성하는 함수이다.
 * 파라메터:
 *		mode	= {'admin', 'user'}
 * 		startdate	: 출발시간마당
 * 출력방식:
 *		divSTARTDATE 오브젝트에 출력
 */
function parserStartDateFieldToHTML(mode) {
	var rtvstr = "";
	var jscdstr = (mode=='admin'?document.DATA.STARTDATE.value:document.getElementById('hdSTARTDATE').value);
	var tablestr = (mode=='admin'?' class="line_lt" border="0" cellpadding="3" cellspacing="1" width="100%"':'');
	var thstr = (mode=='admin'?'class="list_hd"':'');
	var tdstr = (mode=='admin'?'class="content"':'');
	var jscdarr = jscdstr.split("##");
	rtvstr = "<table "+tablestr+">";
	rtvstr += '<tr>'
		+'<th '+thstr+' align="center" width="10%">년도</th>'
		+'<th '+thstr+' align="center" width="10%">월</th>'
		+'<th '+thstr+' align="center" width="60%">출발일자</th>'
		+'<th '+thstr+' align="center" width="10%">성인가격</th>'
		+'<th '+thstr+' align="center" width="10%">아동가격</th>'
	+'</tr>';
	
	for ( var i = 0 ; i < jscdarr.length ; i++ ) {
		var jso = jscdarr[i];
		if ( jso == "" ) continue;
		rtvstr += "<tr>";
		var jsoarr = jso.split("||");
		for ( var j = 0; j < 5 ; j++ ) {
			rtvstr += "<td "+tdstr+" >" + (jsoarr[j]==""?"&nbsp;":jsoarr[j]) + "</td>";
		}
		rtvstr += "</tr>";
	}
	rtvstr += "</table>";
	// 출력시작
	try {
		document.getElementById('divSTARTDATE').innerHTML = rtvstr;
	} catch(e) {}
	
	return rtvstr;
}

//2009.5.31 -------------------------------------
function parserPortInfoFieldToHTML(mode) {
	var rtvstr = "";
	var jscdstr = (mode=='admin'?document.DATA.PORT_INFO.value:document.getElementById('hdPORTINFO').value);
	var tablestr = (mode=='admin'?' class="line_lt" border="0" cellpadding="3" cellspacing="1" width="100%"':'');
	var thstr = (mode=='admin'?'class="list_hd"':'');
	var tdstr = (mode=='admin'?'class="content"':'');
	var jscdarr = jscdstr.split("##");
	rtvstr = "<table "+tablestr+">";
	rtvstr += '<tr>'
		+'<th '+thstr+' align="center" width="30%">출발지</th>'
		+'<th '+thstr+' align="center" width="30%">출발일</th>'
		+'<th '+thstr+' align="center" width="30%">시간</th>'
	+'</tr>';
	
	for ( var i = 0 ; i < jscdarr.length ; i++ ) {
		var jso = jscdarr[i];
		if ( jso == "" ) continue;
		rtvstr += "<tr>";
		var jsoarr = jso.split("||");
		for ( var j = 0; j < 3 ; j++ ) {
			rtvstr += "<td "+tdstr+" >" + (jsoarr[j]==""?"&nbsp;":jsoarr[j]) + "</td>";
		}
		rtvstr += "</tr>";
	}
	rtvstr += "</table>";
	// 출력시작
	try {
		document.getElementById('divPortInfo').innerHTML = rtvstr;
	} catch(e) {}
	
	return rtvstr;
}

//2009.5.31 -------------------------------------
function parserRentCarFieldToHTML(mode) {
	var rtvstr = "";
	var jscdstr = (mode=='admin'?document.DATA.TIME_PRICES.value:document.getElementById('hdTIMEPRICES').value);
	var tablestr = (mode=='admin'?' class="line_lt" border="0" cellpadding="3" cellspacing="1" width="100%"':'');
	var thstr = (mode=='admin'?'class="list_hd"':'');
	var tdstr = (mode=='admin'?'class="content"':'');
	var jscdarr = jscdstr.split("##");
	
	rtvstr = "<table "+tablestr+">";
	var trstr1 = "<tr><td "+tdstr+" >시간</td>";
	var trstr2 = "<tr><td "+tdstr+" >가격</td>";
	
	for ( var i = 0 ; i < jscdarr.length ; i++ ) {
		var jso = jscdarr[i];
		if ( jso == "" ) continue;
		var jsoarr = jso.split("||");
		trstr1 += "<td "+tdstr+" >" + (jsoarr[0]==""?"&nbsp;":jsoarr[0]) + "</td>";
		trstr2 += "<td "+tdstr+" >" + (jsoarr[1]==""?"&nbsp;":jsoarr[1]) + "</td>";
	}
	trstr1 += '</tr>';
	trstr2 += '</tr>';
	rtvstr += trstr1 + trstr2;
	
	rtvstr += "</table>";
	// 출력시작
	try {
		document.getElementById('divTimePrices').innerHTML = rtvstr;
	} catch(e) {}
	
	return rtvstr;
}


// ----------------------------------------------------------------
// 					2. component.relation.edit
// ----------------------------------------------------------------
// 		파라메터:
//				mode = 		{'admin', 'user'}
//				worktype =	{'LODGING', 'TOURINFO'}
// ----------------------------------------------------------------

function openRelationEditor(mode, worktype, checkvalidateurl) {
	var actionurl = jReURL + "/?action=component.relation.editor";
	actionurl += "&worktype=" + worktype;
	if (  checkvalidateurl ) actionurl += "&checkurl=true";		// 선택된 url의 유효성을 검사한다.
	if ( mode == 'admin' ) {
		openCustomWindow(actionurl, "__RELATIONEDITOR__", 800,500, true);
	} else {	// user
		
	}
}

/**
 * 함수설명: opener로부터 스케쥴편집에 사용할 변수들을 얻는다.
 * 되돌림값:
 *		array ( "DATA":		설정되어있던 문자렬
 *		);
**/
function getRelationParamsFromOpener(worktype) {
	var rtv = [];
	try {
		if ( worktype == 'LODGING' ) {
			rtv["TITLE"] = "숙박정보"
			rtv["DATA"] = window.opener.document.DATA.LODGING.value;
		} else if ( worktype == 'TOURINFO' ) {
			rtv["TITLE"] = "여행정보"
			rtv["DATA"] = window.opener.document.DATA.TOURINFO.value;
		}
	} catch (e) {
		rtv["DATA"] = "";
	}
	return rtv;
}

/**
 * 함수설명: opener에 파라메터를 설정하고 파서를 진행한다.
 * 파라메터:
 *		arr = array ( "DATA":		설정된 값 문자렬
 *		);
**/
function setRelationParamsToOpener(worktype, arr) {
	var tmpv = arr["DATA"];
	try {
		if ( worktype == 'LODGING' )
			document.DATA.LODGING.value = tmpv;
		else if ( worktype == 'TOURINFO' )
			document.DATA.TOURINFO.value = tmpv;
	} catch(e) {}

	parserRelationFieldToHTML(worktype, "admin");
}



/**
 * 함수설명: 문자렬을 파서하여 HTML코드를 생성하는 함수이다.
 * 파라메터:
 *		mode	= {'admin', 'user'}
 * 		schedule	: 스케쥴마당
 * 출력방식:
 *		divSCHEDULE 오브젝트에 출력
 */
function parserRelationFieldToHTML(worktype, mode) {
	var rtvstr = "";
	var jscdstr = "";
	if ( worktype == 'LODGING' )
		jscdstr = (mode=='admin'?document.DATA.LODGING.value:document.getElementById('hdLODGING').value);
	else if ( worktype == 'TOURINFO' )
		jscdstr = (mode=='admin'?document.DATA.TOURINFO.value:document.getElementById('hdTOURINFO').value);
	var tablestr = (mode=='admin'?' border="0" cellpadding="5" cellspacing="0" width="100%"':'');
	var thstr = (mode=='admin'?'class="list_hd" align="left" ':'');
	var tdstr = (mode=='admin'?'class="content" style="padding-left:22px;"':'');
	var jscdarr = jscdstr.split("##");
	rtvstr = "<table "+tablestr+">";
	
	for ( var i = 0 ; i < jscdarr.length ; i++ ) {
		var jso = jscdarr[i];
		if ( jso == "" ) continue;
		var jsoarr = jso.split("||");
		rtvstr += "<tr>";
		rtvstr += "<th "+thstr+" ><a href=\""+(jsoarr[2]==""?"#":jsoarr[2])+"\" target='_blank'> " + (jsoarr[0]==""?"&nbsp;":jsoarr[0]) + "</a></th>";
		rtvstr += "</tr>";
		rtvstr += "<tr>";
		rtvstr += "<td "+tdstr+" >" + (jsoarr[1]==""?"&nbsp;":jsoarr[1]) + "</td>";
		rtvstr += "</tr>";
	}
	rtvstr += "</table>";
	// 출력시작
	try {
		document.getElementById('div'+worktype).innerHTML = rtvstr;
	} catch(e) {}
	
	return rtvstr;
}




// ----------- global functions --------------
function getLocationParameter(pname) {
	return getUrlParameter(pname, window.location.href);
}
function getUrlParameter(pname, purl) {
	var rtvstr = "";
	var tlhref = purl;
	var tlhrefarr = tlhref.split("?"); 
	if ( tlhref && tlhrefarr.length >= 2 ) {
		var paramstr = tlhrefarr[1];
		var params = paramstr.split("&");
		for ( var i = 0 ; i < params.length ; i++ ) {
			var tmpparamstr = params[i];
			var tmpparam = tmpparamstr.split("=")
			if ( tmpparam[0] == pname ) {
				rtvstr = tmpparam[1];
				break;
			}
		}
	}
	return rtvstr;
}

// ----------- debugging... ------------

function debugObject(obj) {
	var str = "";
	for ( var i in obj ) {
		str += i + ", ";
	}
	prompt("debug",str);
}
	
// ----------- selecting start date functions ----------
function setYearsFromStartDate(val){
	try{
		var selYear = document.getElementById('startyear');
		removeChildrenElements(selYear);
		var opt = document.createElement("option");
		opt.value = "";
		opt.appendChild(document.createTextNode("선택"));
		selYear.appendChild(opt);
		for(key in val){
			opt = document.createElement("option");
			opt.value = key;
			opt.appendChild(document.createTextNode(key));
			selYear.appendChild(opt);
		}
	}catch(e){}
	setMonthsFromStartDate(val);
	setDaysFromStartDate(val);
}
function setMonthsFromStartDate(val){
	try{
		var selMonth = document.getElementById('startmonth');
		removeChildrenElements(selMonth);
		var year = document.PRODUCT.startyear.value;
		var opt = document.createElement("option");
		opt.value = "";
		opt.appendChild(document.createTextNode("선택"));
		selMonth.appendChild(opt);
		
		if(year != '') for(key in val[year]){
			opt = document.createElement("option");
			opt.value = key;
			opt.appendChild(document.createTextNode(key));
			selMonth.appendChild(opt);
		}
	}catch(e){}
	setDaysFromStartDate(val);
}
function setDaysFromStartDate(val){
	try{
		var selDate = document.getElementById('startday');
		removeChildrenElements(selDate);
		var year = document.PRODUCT.startyear.value;
		var month = document.PRODUCT.startmonth.value;
		var opt = document.createElement("option");
		opt.value = "";
		opt.appendChild(document.createTextNode("선택"));
		selDate.appendChild(opt);
		
		if(year != '' && month != '') for(key in val[year][month]){
			opt = document.createElement("option");
			opt.value = key;
			opt.appendChild(document.createTextNode(key));
			selDate.appendChild(opt);
		}
	}catch(e){}
	setPackagePrice(val);
}
function setPackagePrice(val){
	//try{
		var year = document.PRODUCT.startyear.value;
		var month = document.PRODUCT.startmonth.value;
		var date = document.PRODUCT.startday.value;
		var numAdult = document.PRODUCT.quantity.value;
		var numChild = document.PRODUCT.quantity2.value;
		var packagePrice = document.getElementById("divPrice");
		var price;
		if(year == "" || month == "" || date == "") price = 0;
		else price = val[year][month][date]['adult'] * numAdult + val[year][month][date]['child'] * numChild;
		if(price != 0){
			document.PRODUCT.price.value = price;
		}else{
			document.PRODUCT.price.value = 0;
		}
	//}catch(e){}
}
function removeChildrenElements(element){
	while(element.lastChild){
		var child = element.lastChild;
		element.removeChild(child);
	}
}
