/**
 *	디지틀 조선일보 위젯 프레임 - 마이홈 위젯프레임을 구동한다.
 *
 *	created by 제다, 2007.12.11
 */

/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *	상수정의
 */
var	__CONTAINER = null;
var MYHOMECONST = Class.create();

MYHOMECONST.saveProxy = "/php/repSaveProxy.php";
MYHOMECONST.loadProxy = "/php/repLoadProxy.php";
//MYHOMECONST.baseUrl = "http://203.255.102.67";
//MYHOMECONST.baseUrl = "http://comdev.chosun.com:1472";
MYHOMECONST.baseUrl = "http://myhome.chosun.com";

MYHOMECONST.myremoteMaxLink = 9;
MYHOMECONST.myremoteCookieName = "myremote_links";

/** channelbox등 RSS테이블 행수 정의 */
MYHOMECONST.LINENO_DEFS = [ 5, 10, 15, 20 ];

/** 기본적인 위젯윈도우 테두리 및 제목행 색상정의 */
MYHOMECONST.COLORS = 
[
	[
		"http://image.chosun.com/cs/myhome/box01.gif"
		, "http://image.chosun.com/cs/myhome/box05.gif"
		, "http://image.chosun.com/cs/myhome/box02.gif"
		, "http://image.chosun.com/cs/myhome/box07.gif"
		, ""
		, "http://image.chosun.com/cs/myhome/box08.gif"
		, "http://image.chosun.com/cs/myhome/box03.gif"
		, "http://image.chosun.com/cs/myhome/box06.gif"
		, "http://image.chosun.com/cs/myhome/box04.gif"
	]
	, [
		"http://image.chosun.com/cs/myhome/box11.gif"
		, "http://image.chosun.com/cs/myhome/box15.gif"
		, "http://image.chosun.com/cs/myhome/box12.gif"
		, "http://image.chosun.com/cs/myhome/box17.gif"
		, ""
		, "http://image.chosun.com/cs/myhome/box18.gif"
		, "http://image.chosun.com/cs/myhome/box13.gif"
		, "http://image.chosun.com/cs/myhome/box16.gif"
		, "http://image.chosun.com/cs/myhome/box14.gif"
	]
	, [
		"http://image.chosun.com/cs/myhome/box21.gif"
		, "http://image.chosun.com/cs/myhome/box25.gif"
		, "http://image.chosun.com/cs/myhome/box22.gif"
		, "http://image.chosun.com/cs/myhome/box27.gif"
		, ""
		, "http://image.chosun.com/cs/myhome/box28.gif"
		, "http://image.chosun.com/cs/myhome/box23.gif"
		, "http://image.chosun.com/cs/myhome/box26.gif"
		, "http://image.chosun.com/cs/myhome/box24.gif"
	]
	, [
		"http://image.chosun.com/cs/myhome/box31.gif"
		, "http://image.chosun.com/cs/myhome/box35.gif"
		, "http://image.chosun.com/cs/myhome/box32.gif"
		, "http://image.chosun.com/cs/myhome/box37.gif"
		, ""
		, "http://image.chosun.com/cs/myhome/box38.gif"
		, "http://image.chosun.com/cs/myhome/box33.gif"
		, "http://image.chosun.com/cs/myhome/box36.gif"
		, "http://image.chosun.com/cs/myhome/box34.gif"
	]

];


/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *	변수정의
 */
var MYHOMEVAR = Class.create();
MYHOMEVAR.myremoteLink = [];

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var MYHOMEAPI = Class.create();

/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *	구동함수 정의
 */

// 마이홈 위젯프레임 관련 자바스크립트 함수 적재용 객체선언
var MyhomeScriptLoader = Class.create(__ScriptLoader, {

	sucess : function($super)
	{
		// 테마설정을 했는지 확인한다. 안했다면 테마창을 보여주고 ...
		// 설정을 이미 했다면 바로 프레임을 구동한다. 아니면 테마설정후 구동한다.
		if ( MYHOMEAPI.checkTheme() ) MYHOMEAPI.launchFrame();
	}
	
	, fail : function($super)
	{
		alert("위젯프레임 자바스크립트를 읽어오는 도중 오류가 발생하였습니다.");
	}

});

MYHOMEAPI.startFrame = function()
{
	// 위젯프레임 버전을 검사한다.
	if ( DWFInfo.majorVersion < 0 )
	{
		alert("지원되지 않는 위젯프레임입니다.");
		return;
	}

	// 스크립트를 적재한다.
	var	baseUrl = MYHOMECONST.baseUrl + "/lib/impl/myhome/";
	var	scripts =
	[
		"myhome_dwf.js"
		, "wzdwidget.js"
	];
	
	var	scriptLoader = new MyhomeScriptLoader(baseUrl, scripts);
	scriptLoader.load();
}

MYHOMEAPI.launchFrame = function(themeid)
{
	// 위자드위젯용 설정
	wzdWidget.APP_URL_HOST              = MYHOMECONST.baseUrl;
	wzdWidget.APP_URL_PROXY             = '/php/httpProxy.php?feedURL=http://';
	wzdWidget.APP_URL_SAVE_TITLE        = '';
	wzdWidget.APP_URL_SAVE_PREFERENCES  = '/php/wizardSaveProxy.php';
	wzdWidget.APP_KEY                   = '234jk49vjk4943498f';
	wzdWidget.APP_URL_PROXY_ENCODE      = true;
	wzdWidget.error                     = function(error)
	{
        alert("WIZARD ERROR:" + error.message);
   	}

	// 프레임의 특화된 API와 상수를 정의한다.
	DWFAPI.CUSTOMAPI = MYHOMEAPI;
	/** 위젯이 사용하는 특화된 상수값을 정의한다. */
	DWFAPI.CUSTOMCONST = MYHOMECONST;

	// 프레임을 보여준다.
	$("DWFREGION").innerHTML = "";
	__CONTAINER = new MyhomeContainer;
	__CONTAINER.start($("DWFREGION"));
	
	// 레이아웃 설정파일을 읽어서 레이아웃을 설정한다.
	// 이 때 구동중인 위젯을 미리 갈무리 한다.
	var	layout = new MyhomeLayout(themeid);
	__CONTAINER.setLayout(layout);
}

MYHOMEAPI.checkTheme = function()
{
	var	isCheck = eval(MYHOMEAPI.loadCookie("check_theme"));
	if ( isCheck ) return true;
	
	__changeOpacity($("Header"), 0.4);
	__changeOpacity($("myhome_bn"), 0.4);
	__changeOpacity($("Footer"), 0.4);

	$("theme").style.left = ((document.viewport.getWidth() - 596) / 2) + "px";
	$("theme").show();
	return false;
}

MYHOMEAPI.selectTheme = function(themeid)
{
	$("theme").hide();
	__changeOpacity($("Header"), 1);
	__changeOpacity($("myhome_bn"), 1);
	__changeOpacity($("Footer"), 1);
	
	//MYHOMEAPI.saveCookie("check_theme", "true", 365)
	MYHOMEAPI.saveCookie("check_theme", "true", 365, null, ".chosun.com");
	MYHOMEAPI.launchFrame(themeid);
}

/**
 *	최초 화면을 보여줄 때 해당 채널이 구동이 되었는지 확인한기 위해서 사용한다.
 */
MYHOMEAPI.runningChannels = new Hash();

/**
 *	쿠키값을 설정한다.
 *	@param keywords: 검색어 배열
 */
MYHOMEAPI.saveCookie = function(name, value)
{
	var argv = arguments;
	var argc = arguments.length;
	var expires = (2 < argc) ? argv[2] : null;
	var path = (3 < argc) ? argv[3] : null;
	var domain = (4 < argc) ? argv[4] : null;
	var secure = (5 < argc) ? argv[5] : false;

	var today = null;
	if(expires!=null) {
		var today = new Date();
		today.setDate( today.getDate() + parseInt( expires ) );
	}

	var cookieVal = name + "=" + escape(value) +
		((today == null) ? "" : ("; expires="+today.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");

	document.cookie  = cookieVal
}

/**
 *	쿠키값을 읽어온다.
 *	@param keywords: 검색어 배열
 */
MYHOMEAPI.loadCookie = function(name)
{
	var cookies = document.cookie.split("; ");

	for ( var i = 0; i < cookies.length; i++ )
	{
		var tokens = cookies[i].split("=");
		if ( name == tokens[0] ) return unescape(tokens[1]);
	}

	return null;
}


/**
 *	관심키워드에 등록된 검색어를 저장한다.
 *	@param keywords: 검색어 배열
 */
MYHOMEAPI.saveKeywords = function(keywords)
{
	var	respository = new MyhomeRepository("conf");
	respository.save("keywords.txt", keywords.toJSON());
}

/**
 *	이전에 저장된 관심키워드 검색어를 읽어온다.
 *	@return 검색어 배열
 */
MYHOMEAPI.loadKeywords = function()
{
	var	respository = new MyhomeRepository("conf");
	var	jsonStr = respository.load("keywords.txt");
	return (jsonStr != undefined && /\S+/.test(jsonStr)) ? jsonStr.evalJSON() : [];
}

/**
 *	마이리모콘에 설정된 바로가기를 저장한다.
 *	@param links: 바로가기 배열
 */
MYHOMEAPI.saveRemoteLinks = function(links)
{	
	var	value = links.toJSON();

	//MYHOMEAPI.saveCookie(MYHOMECONST.myremoteCookieName, value, 365, null, ".chosun.com");
	//MYHOMEAPI.saveCookie(MYHOMECONST.myremoteCookieName, value, 365);
	//위 2줄 막음, 아래 1줄로 변경 20081128
	MYHOMEAPI.saveCookie(MYHOMECONST.myremoteCookieName, value, 365, "/", ".chosun.com");	
}

/**
 *	마이리모콘에 설정된 바로가기를 읽어한다.
 *	@return links: 바로가기 배열
 */
MYHOMEAPI.loadRemoteLinks = function()
{
	var	jsonStr = MYHOMEAPI.loadCookie(MYHOMECONST.myremoteCookieName);
	return (jsonStr != undefined && /\S+/.test(jsonStr)) ? jsonStr.evalJSON() : MYREMOTECONST.DEFAULT;
}

/**
 *	channel위젯을 구동한다.
 */
MYHOMEAPI.launchChannelWidget = function(uri)
{
	if ( uri != "") __CONTAINER.addWidget(uri); 
	else
	{
		alert('채널정보가 잘못되었습니다.');
	}
}

/**
 *	channel위젯을 종료한다. 
 */
MYHOMEAPI.closeChannelWidget = function(uri)
{
	if ( uri != "") __CONTAINER.removeWidget(uri); 
	else
	{
		alert('채널정보가 잘못되었습니다.');
	}
}

/**
 *	메뉴상자에 있는 channel위젯과 관련된 checkbox상태를 변경한다.
 */
MYHOMEAPI.changeChannelCheck = function(uri, checked)
{
	if ( !checked ) MYHOMEAPI.runningChannels.unset(uri);
	MENUBOXAPI.changeChannelCheck(uri, checked);
}

/**
 *	특정 채널위젯이 현재 돌고 있는지 확인한다.
 *	@return true이면 돌고있음, false면 아님
 */
MYHOMEAPI.isRunChannelWidget = function(uri)
{
	return MYHOMEAPI.runningChannels.get(uri) != undefined;
}

/**
 *	위자드업체제공 위젯을 구동한다.
 */
MYHOMEAPI.launchWizardWidget = function(uri)
{
	if ( uri != "") __CONTAINER.addWidget(uri); 
	else
	{
		alert('위젯정보가 잘못되었습니다.');
	}
}

/**
 *	RSS위젯을 구동한다.
 */
MYHOMEAPI.launchRssWidget = function(rssUrl)
{
	var	params = new Hash();
	params.set("rssUrl", rssUrl);
	__CONTAINER.addWidget("/modules/myhome/rssWidget/simplerss.xml", params); 
}

/**
 *	블로그/카페위젯을 구동한다.
 */
MYHOMEAPI.launchBlogWidget = function(frm)
{
	if ( /\S+/.test(frm.baseurl.value) && /\S+/.test(frm.blogid.value) && frm.blogid.value != "ID" )
	{
		if ( frm.baseurl.value.indexOf("@") == -1 )
		{
			MYHOMEAPI.alert("잘못된 블로그주소입니다.");
			return;
		}
		
		var	rssUrl = frm.baseurl.value.replace(/@/, frm.blogid.value);
		MYHOMEAPI.launchRssWidget(rssUrl);
	}
}

/**
 *	경고창이 아닌 내부적으로 메시지창을 띄운다.
 */
MYHOMEAPI.alert = function(msg)
{
	var	scrollOffset = document.viewport.getScrollOffsets();
	
	Element.absolutize($("myhome_alert"));
	$("myhome_alert").style.left = ((document.viewport.getWidth() - 300) / 2) + "px";
	$("myhome_alert").style.top = (scrollOffset[1] + 200) + "px";
	$("myhome_alert").style.width = "300px";
	$("myhome_alert").style.height = "100px";
	$("myhome_alert").show();
	$("myhome_alert_msg").innerHTML = msg + "<br><br><br>";
	
	// 확인버튼에 포커스를 줘서 엔터키가 먹도록 한다.
	$("myhome_alert_anchor").focus();
}

MYHOMEAPI.alertClose = function(msg)
{
	$("myhome_alert").hide();
}

/**
 *	마이리모콘 설정화면을 구성하고 제어하는 함수를 제공한다.
 *	ver 1.0
 *
 */

/** 화면을 구성한다. */
var	__REMOTE_STTING_SHOW = false;
var	__REMOTE_STTING_DIV = $('myremot_set');
var	__REMOTE_STTING_SHOW_BASE = 0;
var	__REMOTE_STTING_SHOW_OFFSET = 0;
var	__REMOTE_STTING_SHOW_WIDTH = 604;
var	__REMOTE_STTING_READ = false;

MYHOMEAPI.showRemoteSetting = function(wnd)
{
	__REMOTE_STTING_SHOW = !__REMOTE_STTING_SHOW;
	
	if ( __REMOTE_STTING_SHOW )
	{
		// 꼭,이곳에서 설정을 읽어와서 설정판을 구성한다.
		// 그 이유는, 입력값 캐싱된 것과 충돌을 피할 수 있고, 초기화면뜨는 시간을 조금이라도 덜 수 있다.
		if ( !__REMOTE_STTING_READ )
		{
			MYHOMEVAR.myremoteLink = MYHOMEAPI.loadRemoteLinks();

			var	remoteFinder = "";
			for ( var i = 0; i < MYHOMEVAR.myremoteLink.length; i++ ) remoteFinder += ("^" + MYHOMEVAR.myremoteLink[i] + "$");
			
			var	remoteCheckboxs = document.getElementsByName("remote_checkbox");
			for ( var i = 0; i < remoteCheckboxs.length; i++ )
			{
				remoteCheckboxs[i].onclick = myremoteChecked.bind(remoteCheckboxs[i]);
				remoteCheckboxs[i].checked = (remoteFinder.indexOf("^" + remoteCheckboxs[i].value + "$") != -1);
			}
			
			__REMOTE_STTING_READ = true;
		}

		//설정판 위치지정
		var	pos1 = Position.cumulativeOffset(wnd.frameElement);
		//var	pos2 = [ __CONTAINER.coord.basePt.x + __REMOTE_STTING_SHOW_WIDTH, pos1[1] ];
		var posRight = (document.body.scrollWidth - pos1[0]) + 19;	//19: frame사이 간격

		var	settingBrd = $('myremot_set');
		settingBrd.style.zIndex = 9999;
		settingBrd.style.top = pos1[1];
		settingBrd.style.right = posRight;
		
		/* 
		//설정판 슬라이딩
		var	slider = new __Slider($('myremot_set'), pos2, __Slider.WEST, __REMOTE_STTING_SHOW_WIDTH);
		slider.slide();
		*/
		settingBrd.style.display='block';
		settingBrd.style.visibility = 'visible';
	}
	else
	{
		$('myremot_set').style.display = "none";
		$('myremot_set').style.visibility = "hidden";
	}
}

// 마이리모콘 설정 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function myremoteChecked()
{
	if ( this.checked )
	{
		if ( MYHOMEVAR.myremoteLink.length < MYHOMECONST.myremoteMaxLink )
		{
			if(this.value == "온라인서점" || this.value == "게임조선")
			{
				this.checked = false;
				alert("준비중입니다.");
				return;
			}
			MYHOMEVAR.myremoteLink[MYHOMEVAR.myremoteLink.length] = this.value;
		
		}
		else
		{
			this.checked = false;
			alert("최대 9개까지 설정이 가능합니다.");
			return;
		}
	}
	else if ( !this.checked )
	{
		// 삭제위치를 찾는다.
		var	index = 0;
		for ( ; index < MYHOMEVAR.myremoteLink.length; index++ )
		{
			if ( MYHOMEVAR.myremoteLink[index] == this.value ) break;
		}
		
		// 삭제하고, 댕긴다.
		var	endIndex = MYHOMEVAR.myremoteLink.length - 1;
		for ( var i = index; i < endIndex; i++ )
		{
			MYHOMEVAR.myremoteLink[i] = MYHOMEVAR.myremoteLink[i + 1];
		}
		
		MYHOMEVAR.myremoteLink.length--;
	}
}

// 마이리모콘 설정 저장 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function saveRemoteSetting()
{
	// 저장한다.
	MYHOMEAPI.saveRemoteLinks(MYHOMEVAR.myremoteLink);

	alert("설정정보가 저장되었습니다");

	// 마이리모콘 관련 요소들이 연동이 되도록 한다.
	if ( MYREMOTEAPI != undefined ) MYREMOTEAPI.refresh();
	if ( MYHOMEAPI.myremoteWidgetRefresh != undefined ) MYHOMEAPI.myremoteWidgetRefresh();
}

// 마이리모콘 설정 해제 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

function resetRemoteCheck()
{
	//alert("length:"+MYHOMEVAR.myremoteLink.length);

	var	remoteCheckboxs = document.getElementsByName("remote_checkbox");
	for ( var i = 0; i < remoteCheckboxs.length; i++ )
	{
		if(remoteCheckboxs[i].checked) {
			remoteCheckboxs[i].checked = false;
			MYHOMEVAR.myremoteLink.length = 0;
		}
	}
}

// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function select_widget(obj){
	
	if(obj.value !=""){
		
		var rssUri = obj.value;
		
		__CONTAINER.addWidget(rssUri); 
		
	}else{
		alert('미구현');
	}
}

function close_widget(url){
	
	//선택 해제 함수 호출...myHomeMenuBox.js
	closeMyHomePanel(url);
	
	//위젯을 닫는다.
}

function change_layout(layoutName)
{
	__CONTAINER.getLayout().changeColumn(layoutName);
}
