/**
 * @author setzer(mmx900@gmail.com)
 * @version 0.7, 06/20/08
 * index.html를 위한 자바스크립트 인터페이스.
 */
var win_dnd = new JDnd();
var win_dnd_gadgets = new JDnd();
var win_task = new JTaskBar();
var win_history = new JHistoryList();

function onload_init(){
	win_task.init(getFirstElementByClassName(document.getElementById("taskbar"), 'ul', 'windows'),win_dnd);
	
	var setInitWidth = function(obj){
		obj.style.left =
			(document.body.offsetWidth - document.getElementById("sidebar").offsetWidth - obj.offsetWidth - 30) + "px";
		obj.style.visibility = "visible";
	}
	
	setInitWidth(document.getElementById("bg_menu_gadget"));
	setInitWidth(document.getElementById("newest_documents_gadget_1"));
	setInitWidth(document.getElementById("newest_documents_gadget_2"));
	
	win_dnd_gadgets.add(document.getElementById("bg_menu_gadget"));
	win_dnd_gadgets.add(document.getElementById("newest_documents_gadget_1"));
	win_dnd_gadgets.add(document.getElementById("newest_documents_gadget_2"));
	document.onmousemove = function(event){
		win_dnd.mouseMoveHandler(event);
		win_dnd_gadgets.mouseMoveHandler(event);
		return false;//for IE, 기본 블럭 지정을 막기 위해
	}
}

function gadget_titlebar_mousedown(obj){
	var jwin = win_dnd_gadgets.getItem(obj.parentNode.parentNode);
	jwin.dragModeOn();
	document.onmouseup = function(event){
		jwin.dragModeOff();
		document.onmouseup = null;
	}
}
function gadget_resize_NW_mousedown(obj){
	var jwin = win_dnd_gadgets.getItem(obj.parentNode);
	jwin.resize_NW = true;
	document.onmouseup = function(event){
		jwin.resize_NW = false;
		document.onmouseup = null;
	}
}
function gadget_resize_NE_mousedown(obj){
	var jwin = win_dnd_gadgets.getItem(obj.parentNode);
	jwin.resize_NE = true;
	document.onmouseup = function(event){
		jwin.resize_NE = false;
		document.onmouseup = null;
	}
}
function gadget_resize_SW_mousedown(obj){
	var jwin = win_dnd_gadgets.getItem(obj.parentNode);
	jwin.resize_SW = true;
	document.onmouseup = function(event){
		jwin.resize_SW = false;
		document.onmouseup = null;
	}
}
function gadget_resize_SE_mousedown(obj){
	var jwin = win_dnd_gadgets.getItem(obj.parentNode);
	jwin.resize_SE = true;
	document.onmouseup = function(event){
		jwin.resize_SE = false;
		document.onmouseup = null;
	}
}

//탐색 입력창이 활성화되면 기본값 메시지를 삭제하고 스타일을 변경해준다.
function search_input_focus(obj){
	obj.value = "";
	obj.style.color = "black";
	obj.style.fontStyle = "normal";
}

function win_close_clicked(obj){
	var win = obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
	win.onclick = null;//기본 onclick 이벤트인 win_focus()가 실행되는 것을 막음.
	layer_remove(win);
	win_dnd.removeItem(win);
	win_task.sync();
}

function win_resize_NW_mousedown(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode);
	if(!jwin.maximized){
		jwin.resize_NW = true;
		win_editmode_on(jwin.domObj);
		document.onmouseup = function(event){
			jwin.resize_NW = false;
			win_editmode_off(jwin.domObj);
			document.onmouseup = null;
		}
	}
}

function win_resize_NE_mousedown(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode);
	if(!jwin.maximized){
		jwin.resize_NE = true;
		win_editmode_on(jwin.domObj);
		document.onmouseup = function(event){
			jwin.resize_NE = false;
			win_editmode_off(jwin.domObj);
			document.onmouseup = null;
		}
	}
}

function win_resize_SW_mousedown(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode);
	if(!jwin.maximized){
		jwin.resize_SW = true;
		win_editmode_on(jwin.domObj);
		document.onmouseup = function(event){
			jwin.resize_SW = false;
			win_editmode_off(jwin.domObj);
			document.onmouseup = null;
		}
	}
}

function win_resize_SE_mousedown(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode);
	if(!jwin.maximized){
		jwin.resize_SE = true;
		win_editmode_on(jwin.domObj);
		document.onmouseup = function(event){
			jwin.resize_SE = false;
			win_editmode_off(jwin.domObj);
			document.onmouseup = null;
		}
	}
}

function win_double_clicked(obj){
	win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode).maximize();
}

function win_maximize_clicked(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
	jwin.maximize();
	obj.parentNode.className = jwin.maximized ? "unmaximize_btn" : "maximize_btn";
}

function win_minimize_clicked(obj){
	layer_toggle(obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
	win_task.sync();
}

function win_titlebar_mousedown(obj){
	var jwin = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode);
	jwin.dragModeOn();
	win_editmode_on(jwin.domObj);
	document.onmouseup = function(event){
		jwin.dragModeOff();
		win_editmode_off(jwin.domObj);
		document.onmouseup = null;
	}
}

function win_editmode_on(obj){
	//if(JEnv.performance == "low"){
		obj = JEnv.browser == "IE" ? obj.childNodes[0] : obj.childNodes[1];
		obj.style.display = "none";
	//}
}
	
function win_editmode_off(obj){
	//if(JEnv.performance == "low"){
		obj = JEnv.browser == "IE" ? obj.childNodes[0] : obj.childNodes[1];
		obj.style.display = "block";
	//}
}

function win_directories_open(obj,menu_id){
	//메뉴 열기
	var c = getFirstElementByClassName(obj, 'div', 'directories');
	c.appendChild(document.getElementById("menu_" + menu_id).cloneNode(true));
}

//열려있는 페이지 내용을 클립보드로 복사한다.
function win_page_content_copy(obj){
	if(JEnv.browser == "IE"){	//TODO 복사된 컨텐츠 하단에 external.png 3단 분리
		var win = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode);
		var f = win.getContentFrame();
		var fdoc = f.contentWindow.document;
		var fbody = fdoc.body;
		var div = fdoc.createElement("div");
		div.style.width = "100%";
		div.innerHTML = "<img src=\"" + JEnv.rootUri + "img/external/vista_logo.png\" style=\"margin-right:10px;float:left;display:inline;\" /><div style=\"margin-bottom: 5px; border-bottom: 1px solid #7584B0;\"><img src=\"" + JEnv.rootUri + "img/external/windows_vista.png\" /></div><a href=\"http://www.microsoft.com/\">http://www.microsoft.com/korea/windowsvista/</a><img src=\"" + JEnv.rootUri + "img/external/microsoft_logo.png\" style=\"float:right;\" />";
		div.innerHTML += "";
		fbody.appendChild(div);
		
		//절대경로를 취득
		var uri = fdoc.location.href.substring(0,fdoc.location.href.lastIndexOf("/")+1);
		
		//모든 img 태그의 상대경로를 절대경로로 변환
		var imgs = fbody.getElementsByTagName("img");
		for(y=0;y<imgs.length;y++){
			imgs[y].src = imgs[y].src;
			//src 속성은 입력된 상대 경로(src)를 무시하고 무조건 절대 경로를 반환하기 때문에,
			//이렇게 하는 것 만으로도 ie7에서는 문제없이 절대경로로 바꿀 수 있다. 
			if(imgs[y].src.indexOf("http://") == -1) imgs[y].src = uri + imgs[y].src;
		}
		
		//모든 a 링크의 경로를 절대경로로 변환
		var anchors = fbody.getElementsByTagName("a");
		for(y=0;y<anchors.length;y++){
			anchors[y].href = anchors[y].href;//img.src와 마찬가지로 동작
			if(anchors[y].href.indexOf("http://") == -1) anchors[y].href = uri + anchors[y].href;
		}
		
		var Range = fbody.createTextRange();
		Range.execCommand("Copy");
		alert('내용이 복사되었습니다.');
		fbody.removeChild(div);
	}else{
		alert("IE 전용 기능입니다.");
	}
}

//어디에서든 상관없이 주어진 윈도우에서 페이지를 연다.
function win_page_open(win, uri){
	var f = win.getContentFrame();
	if(JEnv.browser == "IE"){
		f.src = uri;
	}else{
		f.data = uri; //ie에서 미동작
	}
	
	//타이틀바 변경
	var info = load_site_info(uri);
	var titleTxt = info != null ? info.title : "Microsoft Windows Vista";
	var titleHtml = "<img src=\"img/icons/folder_16.gif\" /><a class='left_arrow' href='javascript:void(0)'>.</a>&nbsp;"+replaceAll(titleTxt,"&gt;","<a class='right_arrow' href='javascript:void(0)'>.</a>");
	win.setTitle(titleTxt, titleHtml);
	
	//탐색 버튼 변경
	win_history_btn_sync(win.domObj);
	
	//태스크바 변경
	win_task.sync();
}

function win_page_refresh(obj){
	var win = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
	var f = win.getContentFrame();
	if(JEnv.browser == "IE"){
		f.src = f.contentWindow.document.location.href;
	}else{
		f.data = f.contentDocument.location.href;
	}
}

//iframe 안에서 페이지가 변경되었을 경우 호출
function win_page_change(obj, uri, title, menu_id){
	//index.html 페이지가 처음 호출 될 때는 실행되지 않도록
	if(uri && uri != "about:blank"){//ff에선 빈 값, ie에서는 about:blank가 첫 로딩시 들어온다.
		win_history.add({"uri":uri,"title":title,"menu_id":menu_id});
		win_history_btn_sync(obj.parentNode.parentNode.parentNode.parentNode.parentNode);
	}
}

//히스토리에서 뒤 페이지로 이동
function win_history_back(obj){
	var o = win_history.goBack();
	if(o){
		var win = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode)
		win_history.locked = true;
		win_page_open(win, o.uri);
	}
}

//히스토리에서 앞 페이지로 이동
function win_history_forward(obj){
	var o = win_history.goForward();
	if(o){
		var win = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode)
		win_history.locked = true;
		win_page_open(win, o.uri);
	}
}

//히스토리 버튼 재정의
function win_history_btn_sync(obj){
	//두번 루프를 돌게 되므로 확률이 높은 쪽을 먼저 선택
	var c = getFirstElementByClassName(obj, "li", "backward_btn_active");
	if(!c) c = getFirstElementByClassName(obj, "li", "backward_btn");
	
	c.className = (win_history.cursor > 0) ? "backward_btn_active" : "backward_btn";
	
	var c = getFirstElementByClassName(obj, "li", "forward_btn");
	if(!c) c = getFirstElementByClassName(obj, "li", "forward_btn_active");
	c.className = (win_history.cursor < win_history.length-1) ? "forward_btn_active" : "forward_btn";
}

//윈도우 내부의 디렉토리 목록에서 페이지를 열기 위해 호출한다.
function win_page_clicked(obj, menu_id, uri){
	var win = win_dnd.getItem(obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
	win_page_open(win, uri == null ? obj.href : uri);
	return false;
}
function win_page_clicked_2(obj, menu_id){
	return win_page_clicked(obj.parentNode.parentNode, menu_id, obj.href)
}

//주어진 창을 제외한 나머지 모든 창을 뒤로 보낸다. 시작메뉴가 띄워져 있으면 닫는다.
function win_focus(obj){
	win_blur_all();
	win_dnd.getItem(obj).focus();
	layer_off('start_menu');
	win_task.sync();
}

//모든 창을 뒤로 보낸다.
function win_blur_all(){
	for(i=0;i<win_dnd.items.length;i++){
		win_dnd.items[i].blur();
	}
}

//JWindow의 크기가 변경되면 그에 맞추어 내부 프레임의 크기를 변경한다.
function resizeHandler(jwin){
	var win = jwin.domObj;
	var height = win.offsetHeight;
	//ie에서는 resize가 화면에 반영되기 전에 이 함수가 호출되기 때문에, offsetHeight를 얻을 수 없다.
	//이때 전체 화면 크기인 sidebar의 길이를 이용한다.
	if(!height) height = document.getElementById("sidebar").offsetHeight;
	//최대화 상태일 경우 하단 작업표시줄 만큼의 길이를 제거한다.
	if(jwin.maximized) win.style.height = (height - 27) + "px";
	var div_wrap_middle = getFirstElementByClassName(win, 'div', 'wrap_middle');
	var margin_bottom = JEnv.browser == "IE" ? JEnv.isIE6 ? 168 : 172 : 169;
	div_wrap_middle.style.height = (height - margin_bottom) + "px";//180
	
}

//창을 열 때마다 시작 위치를 조금씩 아래로 변경시키기 위한 변수.
var win_last_top_offset = 0;
var win_last_left_offset = 0;
function win_create(default_uri,menu_id){
	//ie6에서의 position:fixed 지원을 위해 #desktop의 하위 요소로 삽입한다.
	var parent = (JEnv.isIE6) ? document.getElementById("desktop") : document.body;  
	var new_layer = layer_copy('window_0',null,parent);
	new_layer.style.top = win_last_top_offset + "px"; win_last_top_offset += 20;
	new_layer.style.left = win_last_left_offset + "px"; win_last_left_offset += 20;
	var idx = win_dnd.add(new_layer);
	win_dnd.items[idx].resizeListener = resizeHandler;
	//최초 실행을 통해 프레임 크기를 맞춘다.
	resizeHandler(win_dnd.items[idx]);
	//기본 페이지를 연다.
	win_page_open(win_dnd.getItem(new_layer),default_uri);
	if(menu_id)win_directories_open(new_layer,menu_id);

	win_focus(new_layer);
	
	return false;
}

function taskbar_win_clicked(id){
	var obj = win_dnd.getItem(id);
	if(obj.hasFocus()){
		layer_off(id);
		obj.blur();
	}else{
		layer_on(id);
		obj.focus();
		win_focus(document.getElementById(id));
	}
	win_task.sync();
}

function startmenu_mode_switch(num){ /* 기본 퀵메뉴 / 사이트맵간 전환 이벤트를 처리한다. */
	document.getElementById("main_menu_" + num).style.display = "none";
	document.getElementById("main_menu_" + (num == 1 ? 2 : 1)).style.display = "block";
}
function startmenu_menu_toggle(obj){//내부 메뉴 펼침/접힘 제공
	layer_toggle(obj.parentNode.childNodes[2]);
}
function dir_toggle(obj){
	layer_toggle(obj.parentNode.childNodes[2]);
	obj.childNodes[0].className = obj.childNodes[0].className == "dir_arrow" ? "dir_list_arrow" : "dir_arrow";
}
function load_site_info(uri){//사이트 정보 json 으로부터 정보를 가져옴 //TODO:XML기반으로 ASPX를 통해 JSON 내용을 구성하는 식으로 변경할 것.
	var arr = [
		{"title":"비스타 기능 &gt; 모든 사용자를 위한 기능","uri":"01function/01_alluser.html"},
		{"title":"비스타 기능 &gt; 가정 사용자를 위한 기능","uri":"01function/01_home.html"},
		{"title":"비스타 기능 &gt; 비즈니스 사용자를 위한 기능","uri":"01function/01_business.html"},
		{"title":"비스타 기능 &gt; IT 전문가를 위한 기능","uri":"01function/01_itpro.html"},
		{"title":"나에게 맞는 에디션 &gt; 에디션 비교하기","uri":"02edition/02_contrast.html"},
		{"title":"나에게 맞는 에디션 &gt; 모든 기능을 포함한 Ultimate &gt; Vista Ultimate K","uri":"02edition/02_ultimate_k.html"},
		{"title":"나에게 맞는 에디션 &gt; 모든 기능을 포함한 Ultimate &gt; Vista Ultimate KN","uri":"02edition/02_ultimate_kn.html"},
		{"title":"나에게 맞는 에디션 &gt; 가정&amp;모바일을 위한  Home Premium &gt; Vista Home Premium K","uri":"02edition/02_home_premium_k.html"},
		{"title":"나에게 맞는 에디션 &gt; 가정&amp;모바일을 위한  Home Premium &gt; Vista Home Premium KN","uri":"02edition/02_home_premium_kn.html"},
		{"title":"나에게 맞는 에디션 &gt; 기본적인 기능을 제공하는 Home Basic &gt; Vista Home Basic K","uri":"02edition/02_home_basic_k.html"},
		{"title":"나에게 맞는 에디션 &gt; 기본적인 기능을 제공하는 Home Basic &gt; Vista Home Basic KN","uri":"02edition/02_home_basic_kn.html"},
		{"title":"나에게 맞는 에디션 &gt; 중소기업에 적합한 Business &gt; Vista Home Business K","uri":"02edition/02_business_k.html"},
		{"title":"나에게 맞는 에디션 &gt; 중소기업에 적합한 Business &gt; Vista Home Business K","uri":"02edition/02_business_kn.html"},
		{"title":"나에게 맞는 에디션 &gt; 대기업을 위한 Enterprise &gt; Vista Enterprise K","uri":"02edition/02_enterprise_k.html"},
		{"title":"나에게 맞는 에디션 &gt; 대기업을 위한 Enterprise &gt; Vista Enterprise KN","uri":"02edition/02_enterprise_kn.html"},
		{"title":"구입 및 업그레이드 &gt; 비스타 저렴하게 구매하기","uri":"03buy/03_buy.html"},
		{"title":"구입 및 업그레이드 &gt; 비스타 업그레이드 하기","uri":"03buy/03_upgrade.html"},
		{"title":"비스타 따라잡기 &gt; 비스타 배워보기","uri":"04learn/04_learn.html"},
		{"title":"비스타 따라잡기 &gt; 비스타 활용하기","uri":"04learn/04_application.html"},
		{"title":"비스타 따라잡기 &gt; 동영상 강좌","uri":"04learn/04_webcast.html"},
		{"title":"비스타 따라잡기 &gt; 비스타 Tip","uri":"04learn/04_tip.html"},
		{"title":"다운로드 &amp; 고객지원 &gt; FAQ","uri":"05download/05_faq_list.html"},
		{"title":"다운로드 &amp; 고객지원 &gt; 도움말","uri":"http://windowshelp.microsoft.com/Windows/ko-KR/default.mspx"},
		{"title":"다운로드 &amp; 고객지원 &gt; 고객지원","uri":"http://windowshelp.microsoft.com/Windows/ko-KR/techsupport.mspx"},
		{"title":"다운로드 &amp; 고객지원 &gt; 비스타 서비스팩 1","uri":"05download/05_sp1.html"},
		{"title":"기타 비스타 정보 &gt; 블로그 &amp; 커뮤니티","uri":"06etc/06_blog.html"},
		{"title":"기타 비스타 정보 &gt; News &amp; Article","uri":"06etc/06_news.html"},
		{"title":"기타 비스타 정보 &gt; 비스타 체험하기","uri":"http://windowsvista.msn.co.kr/flash.asp"},
		{"title":"기타 비스타 정보 &gt; 비스타 체험지수","uri":"http://www.brainbox.co.kr/wei/main.asp"},
		{"title":"기타 비스타 정보 &gt; 비스타 찰떡궁합 하드웨어","uri":"06etc/06_hardware.html"},
		{"title":"기타 비스타 정보 &gt; 비스타 호환성 정보","uri":"06etc/06_compatibil.html"},
		{"title":"기타 비스타 정보 &gt; 비스타맨 &gt; 비스타맨 1편","uri":"06etc/06_vistaman01.html"},
		{"title":"기타 비스타 정보 &gt; 비스타맨 &gt; 비스타맨 2편","uri":"06etc/06_vistaman02.html"},
		{"title":"기타 비스타 정보 &gt; 비스타맨 &gt; 비스타맨 3편","uri":"06etc/06_vistaman03.html"},
		{"title":"기타 비스타 정보 &gt; 비스타맨 &gt; 비스타맨 4편","uri":"06etc/06_vistaman04.html"}
	];
	var result = null;
	for(i=0;i<arr.length;i++){
		if(uri.indexOf(arr[i].uri) != -1){
			result = arr[i];
			break;
		}
	}
	return result;
}

function taskbar_show_preview(offsetLeft){
	var p = layer_get('preview');
	p.className = "preview_1"
	//p.style.left = (parseInt(obj.offsetLeft) - 27) + "px";
	p.style.left = (offsetLeft - 137) + "px";
	p.style.display = "block";
}
function taskbar_hide_preview(obj){
	layer_off('preview');
}