﻿// 복사할 때 스타일이 복사되는 문제수정
// 기본폭설정 제대로 안되는 문제수정
// ()괄호 추가
// 기본언어 설정기능추가


google.load("language", "1");
google.setOnLoadCallback(init);

// 폼에 입력되는 langauge종류 초기화.Google API에서 읽어와 입력하는 Init callback function
function init() 
{
	var cval = GetCookie("gtrans");
	var gtransform = document.getElementById('googletrans_form');
	var def_lang = document.getElementById('def_lang');
	var lang_sel = document.getElementById('lang_sel');
	var translationDiv = document.getElementById('translation'); 
	translationDiv = translationDiv.childNodes.item(2);

	translationDiv.innerHTML = '<font style="font-size:12px"><span style="color:#f17b9c">내용을 입력해주세요</span></font>';

	// 쿠키값얻기에 실패하면 모든 언어값을 세팅
	if( !cval )
	{
		rep_lang_sel( lang_sel );	  
	  def_lang.checked = false;
	}
	else
	{
		dividedindex = cval.indexOf(",", 0 );
		lang_code = cval.substring( 0, dividedindex );
		lang_char = cval.substring( dividedindex+1, cval.length );
		lang_char = lang_char.toUpperCase();
		
		var newLangLable = document.createElement("span");
		newLangLable.setAttribute("id", "langselchange");
		newLangLable.setAttribute("value", lang_code);

		lang_char = "[ " + lang_char + " ]";

		//FF에서는 insertAdjacentText지원하지 않음
		//newLangLable.insertAdjacentText('afterBegin', lang_char);
		newLangLable.innerHTML = lang_char;

		addedlist = gtransform.insertBefore( newLangLable, lang_sel );	  
		sib = addedlist.nextSibling;
		gtransform.removeChild(sib);

		// select를 다른 태그로 바꿈.
		def_lang.checked = true;
	}

//  translate();
}

// 언어값을 찾아 list노드와 replace
function rep_lang_sel(list)
{
		var gtransform = document.getElementById('googletrans_form');

//	var newLangSel = document.createElement('<select id="langselchange" onChange="keywordKeyDown(event)"></select>');
//	var newLangSel = document.createElement("select");
//	newLangSel.setAttribute("id", "langselchange");
//	newLangSel.setAttribute("onChange", "keywordKeyDown(event)");

	var obj = document.createElement('input');
	obj["onclick"] = 'tmp';

	if(obj.getAttribute('onclick')){ //IE전용 객체 새로생성
	  var newLangSel = document.createElement('<select id="langselchange" onChange="keywordKeyDown(event)"></select>');
	}
	else{ //표준 지키는 멋진 브라우저는 기존 객체에 이벤트만 추가
		var newLangSel = document.createElement("select");
		newLangSel.setAttribute("id", "langselchange");
		newLangSel.setAttribute("onChange", "keywordKeyDown(event)");
	}
			
	var i=0;
  for (i in google.language.Languages) {
    var lng = i.toLowerCase();
    var lngCode = google.language.Languages[i];
    if (google.language.isTranslatable(lngCode)) {
  	  var addedOpt=document.createElement('OPTION');
			addedOpt.text=lng;
			addedOpt.value=lngCode;

			try {
				newLangSel.add(addedOpt, null); // standards compliant; doesn't work in IE
			}
			catch(ex) {
				newLangSel.add(addedOpt); // IE only
			}		
	  }
  }

  // firefox에서는 repalceNode안됨
  // list.replaceNode( newLangSel );	  
	addedlist = gtransform.insertBefore( newLangSel, list );	  
	sib = addedlist.nextSibling;
	gtransform.removeChild(sib);
	
//	alert(gtransform.innerHTML);
}


// 폼에서 입력된 text와 언어 종류를 가져와 번역한다.
function translate() {
  var value = document.getElementById('inputval').value;
  var lang_sel = document.getElementById('langselchange');

  if(lang_sel.tagName == "SELECT")
  	lang_sel = lang_sel.value;
  else
  	lang_sel = lang_sel.getAttribute("value");
  	
  google.language.translate(value, '', lang_sel, translateResult);

  return false;
}	

// 가져온 내용을 HTML로 써주는 Callback function
function translateResult(result) {
	var translationDiv = document.getElementById('translation'); 
	// 결과값을 복사할때 id가 복사되는 것을 방지하기위한 코드
	translationDiv = translationDiv.childNodes.item(2);
	
  if (result.translation) {
    var str = result.translation.replace('>', '&gt;').replace('<', '&lt;');
    translationDiv.innerHTML = '<font style="font-size:12px"><span style="color:#f17b9c">' + str + '(' + document.getElementById('inputval').value +')</span></font>';
  } else {
    translationDiv.innerHTML = '<font style="font-size:12px"><span style="color:#f17b9c">내용을 입력해주세요</span></font>';
  }
}

// 글자가 입력되었을때 실시간으로 확인해준다.
function keywordKeyDown(event)
{
		if(navigator.appName=="Microsoft Internet Explorer")
		{	
			var keyCode = window.event.keyCode;
		}
		else
		{
			var keyCode = event.which;    
		}
	
    
    if(keyCode ==  9)   return;     //Tab
    if(keyCode == 13)   return;     //Enter
    if(keyCode == 16)   return;     //Shift
    if(keyCode == 16)   return;     //Ctrl
    if(keyCode == 18)   return;     //Alt
    if(keyCode == 45)   return;     //Ins
    if(keyCode == 46)   return;     //Del
    if(keyCode == 33)   return;     //PgUp
    if(keyCode == 34)   return;     //PgDn
    if(keyCode == 35)   return;     //End
    if(keyCode == 36)   return;     //Home
    
    if(keyCode >= 37 && keyCode <= 40)   return;     //방향키
    
    //Keydown 이벤트 발생 시점에는 아직 TextField에 사용자가 입력한 키 값이 설정되지 않았기 때문에
    //브라우저가 이벤트에 반응하여 값을 설정할때 까지 잠시 기다린다.
    setTimeout('translate()', 250);    		
}

function SetCookie( cookiename, cookieval, expdate )
{
	// 현재 날짜를 구해서 exp날짜를 더한다.
	var dateset = new Date();
	dateset.setDate( dateset.getDate() + parseInt( expdate ) );

	// 쿠키셋.
	document.cookie = cookiename + "=" + escape( cookieval ) + "; expires=" + dateset.toGMTString() + ";";
}

function GetCookie( cookiename )
{
	var search = cookiename + "=";
	var allcookie = document.cookie;
	var startindex, endindex;
	
	//쿠키가 존재하는 경우
	if( allcookie.length > 0 )
	{
		//구글 검색에 대한 쿠키를 검색
		startindex = allcookie.indexOf( cookiename );
		
		//존재한다면
		if( startindex != -1 )
		{
			//값을 찾기위한 인덱스 이후의 val시작 인덱스
			startindex += cookiename.length;
			//끝인덱스
			endindex = allcookie.indexOf(";", startindex );
			// 끝 인덱스가 없으면 쿠키 전체로 설정
			if( endindex == -1 ) endindex = allcookie.length;
			
			//쿠키값리턴
			return unescape( allcookie.substring( startindex+1, endindex ));
		}
		else	//검색된 해당쿠키가 없을경우
		{
			return false;
		}
	}
	else	//쿠키 자체가 없을경우
	{
		return false;
	}			
}


function DeleteCookie( cookiename )
{
	var expireDate = new Date();
  
  //어제 날짜를 쿠키 소멸 날짜로 설정.
  expireDate.setDate( expireDate.getDate() - 1 );
  document.cookie = cookiename + "= " + "; expires=" + expireDate.toGMTString();
}


//버튼에 호출 이벤트 추가할것.
function deflangset()
{
	var lang_sel = document.getElementById('langselchange');
	var def_lang = document.getElementById('def_lang');
	var gtransform = document.getElementById('googletrans_form');
	
	// init에서 계속 체크할것.
	
	if(def_lang.checked)
	{
		var lang_char, lang_code;

	  var i=0;
	  for (i in google.language.Languages) {
	    var lng = i.toUpperCase();
	    var alllngCode = google.language.Languages[i];
	    if (alllngCode == lang_sel.options[lang_sel.selectedIndex].value) {
				lang_char = i;
			}
		}
		lang_code = lang_sel.options[lang_sel.selectedIndex].value 
		
	  cookieval = lang_code + "," + lang_char;

		SetCookie( "gtrans", cookieval, 1);
				
		var newLangLable = document.createElement("span");
		newLangLable.setAttribute("id", "langselchange");
		newLangLable.setAttribute("value", lang_code);

		lang_char = "[ " + lang_char + " ]";

		newLangLable.innerHTML = lang_char;

		addedlist = gtransform.insertBefore( newLangLable, lang_sel );	  
		sib = addedlist.nextSibling;
		gtransform.removeChild(sib);
	}	
	else
	{
		// 쿠키값 삭제
		DeleteCookie( "gtrans" );

		// 테이블값 돌려줌
		rep_lang_sel( lang_sel );		
	}
}