// ----------------------------------------------------------------- //
//	폼값 처리를 위한 함수 시작
// ----------------------------------------------------------------- //
var browser = (navigator.userAgent.indexOf("MSIE") != -1) ? "IE" : "FF";

function setStartpage()
{
	if (browser == "IE")
	{
		document.getElementById("bada_startpage").style.display = "";
	}
}

function setStartPage(obj)
{
	obj.style.behavior='url(#default#homepage)';
	obj.setHomePage('http://www.bada.us');
}

function addFavorites()
{
	var favoriteUrl="http://www.bada.us";
	var favoriteTitle="::: 미국생활의 바다 (Bada.US) :::";
	if (document.all) window.external.AddFavorite(favoriteUrl,favoriteTitle);
}

// 폼값을 자동으로 체크한다.
function checkFormEle(form)
{
	var i = 0;
	var chkType = "";
	var chkName = "";
	var chkMsg = "";
	var chkLimit = null;
	var aryLimit = null;
	var chkMin = null;
	var chkMax = null;

	for (i = 0; i < form.elements.length; i++)
	{
		chkLimit = new String("0,999999999");
		aryLimit = new Array();
		chkMin = "0";
		chkMax = "999999999";

		if (form.elements[i].getAttribute("MECheck") == "1" || form.elements[i].getAttribute("MECheck") == "0" && Trim(form.elements[i].value) != "")
		{
			// 입력구분 (E : 이메일, I : 숫자, C : 문자)
			chkType = form.elements[i].getAttribute("METype");
			if (!chkType || chkType == "undefined") chkType = "C";

			// 입력이름
			chkName = form.elements[i].title;
			if (chkName == "undefined" || !chkName) chkType = "입력한 메시지.";
			chkMsg = chkName ?  + "Please check " + chkName : "";

			if (form.elements[i].getAttribute("MELimit") != "undefined" && form.elements[i].getAttribute("MELimit")) chkLimit = form.elements[i].getAttribute("MELimit");
			aryLimit = chkLimit.split(",");

			chkMin = Trim(aryLimit[0]);
			chkMax = Trim(aryLimit[1]);

			if (chkType == "E")
			{
				if (!ChkEle(form.elements[i].value, "C", chkMin, chkMax)) return error_msg(chkMsg, form.elements[i]);
				if (!IsEmail(form.elements[i].value)) return error_msg(chkMsg, form.elements[i]);
			}
			else if (chkType == "S")
			{
				if (form.elements[i].value.length == 0) return error_msg(chkMsg, form.elements[i]);
			}
			else
			{
				if (!ChkEle(form.elements[i].value, chkType, chkMin, chkMax)) return error_msg(chkMsg, form.elements[i]);
			}
		}
	}
	return true;
}

function submitForm(fname)
{
	document.getElementById(fname).submit();
}

// 폼 요소의 값을 체크한다.
function ChkEle(str, type, min, max)
{
	var IsNum;
	var Block = true;
	str = Trim(str);

	if(str.length < 1) return false;

	if(type == "I")
	{
		str = str.replace(",", "");
		str = str.replace(".", "");
		if(!IsNumber(str)) return false;
		if(min >= 0 && max >= 0) return ChkLen(str, min, max);
	}
	else if(type == "C")
	{
		if(min >= 0 && max >= 0)
			return ChkStrLen(str,min,max)
	}
	else
		return false;
	return true;
}

function checkInput(mode)
{
	var str = event.srcElement.value;
	var title = event.srcElement.title;
	if (mode == 1)
	{
		if (IsOneByte(str)) return true;
		alert(title + "은(는) 영문 또는 숫자으로만 입력해주세요.");
		event.srcElement.value = getOneByte(str);
		event.srcElement.focus();
	}
	else if (mode == 2)
	{
		if (IsPhoneNumber(str)) return true;
		alert(title + "은(는) 숫자와 '-' 으로만 입력해주세요.");
		event.srcElement.value = getPhoneNumber(str);
		event.srcElement.focus();
	}
	else if (mode == 3)
	{
		if (IsNumber(str)) return true;
		alert(title + "은(는) 숫자만 입력해주세요.");
		event.srcElement.value = getNumber(str);
		event.srcElement.focus();
	}
	return false;
}

// 입력값이 숫자나문자인지 체크
function IsAlNum(str)
{
	for(var i=0; i<str.length; i++)
	{
		var chr = str.substr(i,1);
		if((chr < '0' || chr > '9') && (chr < 'a' || chr > 'z') && (chr < 'A' || chr > 'Z'))
		{
			return false;
		}
	}
	return true;
}

// 아이디로 가능한 문자인지 체크
function IsIDStr(str)
{
	var chr;

	chr = str.substr(0,1);
	if((chr < 'a' || chr > 'z') && (chr < 'A' || chr > 'Z'))
	{
		return false;
	}

	for(var i=0; i<str.length; i++)
	{
		chr = str.substr(i,1);
		if((chr < '0' || chr > '9') && (chr < 'a' || chr > 'z') && (chr < 'A' || chr > 'Z') && chr != '_')
		{
			return false;
		}
	}
	return true;
}

// 현재 이벤트값이 숫자인지 아닌지
function onlyNumber(code)
{
	if (code < 48 || code > 57) return false;
	return true;
}

function onlyNumberEvent(evt)
{
	if (Prototype.Browser['IE'])
	{
		var code = evt.keyCode;
	}
	else if (Prototype.Browser['Opera'] || Prototype.Browser['Gecko'])
	{
		var code = evt.which;
	}
	if (code != 8 && code < 48 || code > 57) return false;
	return true;
}

function menuSelect(id, evt)
{
	if (Prototype.Browser['IE'])
	{
		if (evt.button == 1)
		{
			$("dirMenu").style.display = $("dirMenu").style.display == "block" ? "none" : "block";
		}
	}
	else if (Prototype.Browser['Opera'] || Prototype.Browser['Gecko'])
	{
		if (evt.button == 0)
		{
			$("dirMenu").style.display = $("dirMenu").style.display == "block" ? "none" : "block";
		}
	}
}


// 1byte 문자만 허용
function IsOneByte(str)
{
	var Str  = new String(str);
	var i;
	var strOneChar;

	for (i = 0; i < Str.length; i++)
	{
		strOneChar = Str.charAt(i);
		if (escape(strOneChar).length > 4 || strOneChar == "\n") return false;
	}
	return true;
}

// 1byte 문자만 리턴
function getOneByte(str)
{
	var Str  = new String(str);
	var i;
	var strOneChar = "";
	var strNewStr = "";

	for (i = 0; i < Str.length; i++)
	{
		strOneChar = Str.charAt(i);
		if (escape(strOneChar).length > 4 || strOneChar == "\n") continue;
		strNewStr += strOneChar;
	}
	return strNewStr;
}

// 입력값이 숫자인지 검사
function IsNumber(str)
{
	var temp;
	var digits = "0123456789";

	for(var i=0; i<str.length; i++)
	{
		temp = str.charAt(i);
		if(digits.indexOf(temp)==-1)
			return false
	}
	return true;
}

// 입력받은 문자열을 해당폼에 숫자만 리턴한다.
function getNumber(str)
{
	var Str  = new String(str);
	var i;
	var strOneChar = "";
	var strNewStr = "";

	for (i = 0; i < Str.length; i++)
	{
		strOneChar = Str.charAt(i);
		if (!IsNumber(strOneChar)) continue;
		strNewStr += strOneChar;
	}
	return strNewStr;
}

// 입력받은 문자열을 해당폼에 숫자만 리턴한다.
function GetNumber(form,str)
{
	var i;
	var chr;
	var returnNum = "";

	for(i=0; i<str.length; i++)
	{
		chr = str.charAt(i);
		if(IsNumber(chr))
			returnNum += chr;
	}
	form.value = returnNum;
}

// 입력값이 전화번호인지 검사
function IsPhoneNumber(str)
{
	var Str  = new String(str);
	var i;
	var strOneChar = "";
	var digits = "-0123456789";

	for (i = 0; i < Str.length; i++)
	{
		strOneChar = Str.charAt(i);
		if (digits.indexOf(strOneChar) == -1) return false
	}
	return true;
}

// 입력받은 문자열을 해당폼에 숫자만 리턴한다.
function getPhoneNumber(str)
{
	var Str  = new String(str);
	var i;
	var strOneChar = "";
	var strNewStr = "";

	for (i = 0; i < Str.length; i++)
	{
		strOneChar = Str.charAt(i);
		if (!IsPhoneNumber(strOneChar)) continue;
		strNewStr += strOneChar;
	}
	return strNewStr;
}

// 입력값의 길이가 min < str < max 인지 체크
function ChkStrLen(str, min, max)
{
	if(!min) min = 0;
	if(!max) max = 999;
	min = parseInt(min);
	max = parseInt(max);

	if(str.length >= min && str.length <= max)
	{
		return true;
	}
	return false;
}

// 입력값의 범위가 min < str < max 인지 체크
function ChkLen(digit, min, max)
{
	digit = parseInt(digit);
	min = parseInt(min, 10);
	max = parseInt(max, 10);

	if(!(min >= 0)) min = 0;
	if(!(max >= 0)) max = 9;

	if(digit >= min && digit <= max)
		return true;
	return false;
}

// trim()함수 정의
function Trim(str)
{
	if(!str) str = "";
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

// 에러 및 포커스
function error_msg(msg, ele)
{
	if (msg) alert(msg);
	if (ele != null) ele.focus();
	return false;
}
// ----------------------------------------------------------------- //
//	폼값 처리를 위한 함수 끝
// ----------------------------------------------------------------- //



// 주민번호 검사입력값 검사
function Is_SSNO(formnm, formname)
{
	var form = eval("document." + formnm + "." + formname);
	var f = eval("document." + formnm);
	var max_length;
	var next_form;
	var prev_form;

	// signform의 다음 elements의 이름을 구한다.
	for(var i=0; i<f.elements.length; i++)
	{
		if(f.elements[i].name == form.name)
			break;
	}
	next_form = eval(f.elements[i+1]);
	prev_form = eval(f.elements[i-1]);

	// 숫자인지 검사
	if(!IsNumber(form.value))
	{
		alert("주민등록번호는 숫자로만 구성됩니다.\n\n다시입력해주세요.");
		form.value="";
		form.focus();
		return false;
	}

	// 자리수검사 및 다음 폼으로 포커스 이동
	if(formname == "fr_cm_jumin1")
	{
		max_length = 6;
		if(form.value.length != max_length)
			return false;
		next_form.focus();
	}
	else
	{
		max_length = 7;

		if(form.value.length != max_length)
			return false;

		if(!CheckSSNO(prev_form.value, form.value))
		{
			alert("잘못된 주민등록번호입니다.\n\n정확하게 입력해주세요.");
			prev_form.value = "";
			form.value = "";
			prev_form.focus();
			return false;
		}
	}
	return true;
}

// 주민번호 검사입력값 검사
function IsSSNO(formname, mode)
{
	var form = eval("document.signform." + formname);
	var max_length;
	var next_form;
	var prev_form;

	// signform의 다음 elements의 이름을 구한다.
	for(var i=0; i<document.signform.elements.length; i++)
	{
		if(document.signform.elements[i].name == form.name)
			break;
	}
	next_form = eval(document.signform.elements[i+1]);
	prev_form = eval(document.signform.elements[i-1]);

	// 숫자인지 검사
	if(!IsNumber(form.value))
	{
		alert("주민등록번호는 숫자로만 구성됩니다.\n\n다시입력해주세요.");
		form.value="";
		form.focus();
		return false;
	}

	// 자리수검사 및 다음 폼으로 포커스 이동
	if(mode == 1)
	{
		max_length = 6;
		if(form.value.length != max_length)
			return false;
		next_form.focus();
	}
	else
	{
		max_length = 7;

		if(form.value.length != max_length)
			return false;

		if(!CheckSSNO(prev_form.value, form.value))
		{
			alert("잘못된 주민등록번호입니다.\n\n정확하게 입력해주세요.");
			prev_form.focus();
			prev_form.value = "";
			form.value = "";
			return false;
		}
	}

	return true;
}

// 주민번호 검사
function CheckSSNO(ssno1, ssno2)
{
	var check_num = "234567892345";
	var ssno = ssno1 + ssno2;
	var res = 0;

	//-- 입력값 체크 시작
	if(ssno1.length != 6 || ssno2.length != 7)
		return false;

	if(!IsNumber(ssno1) || !IsNumber(ssno2))
		return false;

	if(ssno1.substr(2,2) > 12 || ssno1.substr(4,2) > 31)
		return false;

	if(ssno2.substr(0,1) > 2 || ssno2.substr(0,1) < 1)
		return false;
	//-- 입력값 체크 끝

	for(var i=0; i<12; i++)
		res += ssno.substr(i,1) * check_num.substr(i,1);
	res = (11 - (res % 11)) % 10;

	if(res != ssno.substr(12,1))
		return false;

	return true;
}

// 이메일 검사
function IsEmail(str)
{
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;

	if(((str.search(exclude)!=-1)||(str.search(check))==-1)||(str.search(checkend)==-1))
		return false;
	else
		return true;
}

// 화면중앙에 새창띄우기 함수
function new_window(url, name, option, width, height, left, top)
{
	var win_width;
	var win_height;

	// 새창을 위한 좌표값을 구한다.
	if(screen.width < width)
	{
		win_width = 0;
		width = screen.width;
	}
	else
	{
		win_width = (screen.width - width) / 2;
	}

	if(screen.height < height)
	{
		win_height = 0;
		height = screen.height;
	}
	else
	{
		win_height = (screen.height - height) / 2;
	}

	// 옵션처리
	if(!option)
	{
		option = "resizable=no,scrollbars=yes,menubar=no,status=no";
	}

	if(left)
		win_width = left;

	if(top)
		win_height = top;

	// 새창을 띄운다.
	window.open(url,name,option+',width='+width+',height='+height+',left='+win_width+',top='+win_height);
}

// 로그인시 체크사항
function checkIt2()
{
	var form = eval("document.signform2");
	if(!ChkEle(form.fr_cm_id.value, "C", 4, 20)) return error_msg("아이디를 입력해주세요.\n\n아이디는 4자 이상입니다.!", form.fr_cm_id);
	if(!ChkEle(form.fr_cm_passwd.value, "C", 4, 30)) return error_msg("패스워드를 입력해주세요.\n\n패스워드는 4자 이상입니다.!", form.fr_cm_passwd);
	return true;
}

function imgSize(max_width)
{
   var lo_img     = window.event.srcElement;

   var li_width   = lo_img.width;
   var li_height  = lo_img.height;

    var temp = 0;
    if (!max_width) var max_width= 500;   // 이미지의 최대 크기

    if ( li_width > max_width ) {  // 이미지가 600보다 크다면 너비를 600으로 맞우고 비율에 맞춰 세로값을 변경한다.
       li_height = li_height/(li_width / max_width);
      lo_img.width = max_width;
      lo_img.height = li_height;
    }
}

function f_resize()
{
   // 이미지객체지정
   var lo_img     = window.event.srcElement;

   var li_width   = lo_img.width+30;
   var li_height  = lo_img.height+60;

   window.resizeTo(li_width,li_height);
}

function isImage(strImg)
{
    // 이미지
    var iStart = strImg.lastIndexOf(".") + 1;
    var strExt = strImg.substr(iStart).toLowerCase();
    if (strExt == "jpg" || strExt == "gif" || strExt == "png") return true;
    return false;
}

function isFlash(strImg)
{
    // 이미지
    var iStart = strImg.lastIndexOf(".") + 1;
    var strExt = strImg.substr(iStart).toLowerCase();
    if (strExt == "swf") return true;
    return false;
}

// 이미지를 업로드한 경우 이미지 미리보기 처리
function PreviewImage(imgLayerName, width)
{
	var objImg = window.event.srcElement;
	if (!isImage(objImg.value))
	{
		error_msg(objImg.title + "을(를) 등록해주세요.");
	}
	else
	{
		var strLayer = eval(imgLayerName)
		strLayer.innerHTML = "<img src='" + objImg.value + "' onLoad='imgSize(" + width + ")'><br><br>";
	}
}

// 이미지를 업로드한 경우 이미지를 미리보기 처리2
function PreviewImageDom(obj, width)
{
	var objImg = window.event.srcElement;
	var strLayer = obj.parentNode.getElementsByTagName("SPAN")[0];

	if (!isImage(objImg.value))
	{
		strLayer.innerHTML = "";
		error_msg(objImg.title + "을(를) 등록해주세요.");
	}
	else
	{
		strLayer.innerHTML = "<img src='" + objImg.value + "' onLoad='imgSize(" + width + ")'><br><br>";
	}
}

// img 오브젝트의 이미지를 바꾼다.
function setObjectImg(obj, img)
{
	obj.src = img;
}

// select option 을 추가한다.
function addOption(oSelect, v, t)
{
	var oOption = document.createElement("OPTION");

	oOption.value = v;
	oOption.text = t;

	if (browser == "IE")
	{
		oSelect.add(oOption);
	}
	else if (browser == "FF")
	{
		oSelect.appendChild(oOption);
	}
}

// select option 값을 제거한다.
function removeOption(selName, idx)
{
	if (browser == "IE")
	{
		oSelect.remove(idx);
	}
	else
	{
		oSelect.removeChild(idx);
	}
}

// select option 값을 초기한다.
function removeOptions(oSelect)
{
	for (var i = oSelect.length; i > 0; i--)
	{
		if (browser == "IE")
		{
			oSelect.remove(i - 1);
		}
		else
		{
			oSelect.removeChild(i - 1);
		}
	}
}


// 레이어 보이기 / 숨기기
function openLayer(layerId)
{
	$(layerId).style.display = "";
}

function closeLayer(layerId)
{
	$(layerId).style.display = "none";
}

/* 팝업 띄우기 */
function popupWin(filename,winname,width,height,scroll,left,top)	{
window.open("" + filename + "","" + winname +"","scrollbars=" + scroll + ",toolbar=no,location=no,directories=no,width=" + width + ",height=" + height + ",resizable=no,mebar=no,left=" + left + ",top=" + top + "");
}


/* 레이어 보이기_감추기 */
function show(obj) {
	document.getElementById([obj]).style.display ='block';
}
function hide(obj) {
	document.getElementById([obj]).style.display ='none';
}


/* 사이트맵 롤오버 */
function sitemapOn(imgName) {
	document [imgName].src = const_imghost + "/html/images/sitemap/" + imgName + "_on.gif";
}
function sitemapOff(imgName) {
	document [imgName].src = const_imghost + "/html/images/sitemap/" + imgName + ".gif";
}



/* 좌측 메뉴 롤오버 */
function leftOn(imgName) {
	document [imgName].src = const_imghost + "/html/images/common/" + imgName + "_on.gif";
}
function leftOff(imgName) {
	document [imgName].src = const_imghost + "/html/images/common/" + imgName + ".gif";
}



/* 좌측 메뉴 롤오버 및 레이어 */
function bothOn(layerName,imgName) {
	document [imgName].src = const_imghost + "/html/images/common/" + imgName + "_on.gif";
	document.getElementById([layerName]).style.display ='block';
}
function bothOff(layerName,imgName) {
	document [imgName].src = const_imghost + "/html/images/common/" + imgName + ".gif";
	document.getElementById([layerName]).style.display ='none';
}


/* 우측 퀵배너 롤오버 및 레이어 */
function wingOn(layerName,imgBorder) {
			document.getElementById([layerName]).style.display ='block';
			document.getElementById([imgBorder]).style.borderColor='#000000';
}
function wingOff(layerName,imgBorder) {
			document.getElementById([layerName]).style.display ='none';
			document.getElementById([imgBorder]).style.borderColor='#FFFFFF';
}


/* 투명이미지 */
 function setPng24(obj) {
        obj.width=obj.height=1;
        obj.className=obj.className.replace(/\bpng24\b/i,'');
        obj.style.filter =
        "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ obj.src +"',sizingMethod='image');"
        obj.src='';
        return '';
    }

// obj 에 값을 변경한다.
function chkValue(obj, defaultValue, changeValue)
{
	if (obj.value == defaultValue)
	{
		obj.value = changeValue;
	}
}

// 포커스 변경, obj 를 숨기고 id 객체에 포커스
function changeFocus(obj, id)
{
	var obj2 = $(id);
	obj.style.display = "none";
	obj2.style.display = "inline";
	obj2.focus();
}

// 포커스 변경, obj.value 가 없는경우 obj 를 숨기고 id 객체에 포커스
function changeFocus2(obj, id)
{
	var obj2 = $(id);
	if (Trim(obj.value) == "")
	{
		obj.style.display = "none";
		obj2.style.display = "inline";
	}
}

function bt(id,after)
{
	eval(id+'.filters.blendTrans.stop();');
	eval(id+'.filters.blendTrans.Apply();');
	eval(id+'.src="'+after+'";');
	eval(id+'.filters.blendTrans.Play();');
}

/**
 * AutoSourcing (Opensource ver)
 * @author gony (AjaxUI3 Team)
 */

var AutoSourcing={div:null,id:"",timer:null,regex:null,strings:[],skip:false,handlers:{},init:function(format,enable){var t=this;var n=navigator;var is_safari=(n.userAgent.indexOf("WebKit")>-1&&n.vendor.indexOf("Apple")>-1);this.div=document.createElement("div");this.div.className=(/MSIE|Gecko/.test(n.userAgent)&&!is_safari)?"autosourcing-stub":"autosourcing-stub-extra";this.id="autosourcing_tmp_"+(Math.random()*10000);this.regex=new RegExp(format.replace("%id%","(\\d+)"));this.handlers.copy=function(){t.copy()};this.handlers.keydown=function(evt){t.keydown(evt)};this.handlers.keypress=function(evt){t.keypress(evt)};if(typeof enable=="undefined")enable=true;this.setEnable(enable);},setEnable:function(bool){if(bool){if(typeof document.body.oncopy!="undefined"){this.addEvent(document.body,"copy",this.handlers.copy);}else{this.addEvent(document,"keydown",this.handlers.keydown);this.addEvent(document,"keypress",this.handlers.keypress);this.addEvent(document,"contextmenu",this.handlers.copy);}}else{if(typeof document.body.oncopy!="undefined"){this.removeEvent(document.body,"copy",this.handlers.copy);}else{this.removeEvent(document,"keydown",this.handlers.keydown);this.removeEvent(document,"keypress",this.handlers.keypress);this.removeEvent(document,"contextmenu",this.handlers.copy);}}},getId:function(rng){var range_s,range_e,par,id;range_s=this.cloneRange(rng)
range_s.collapse(true);par=this.getParentElement(range_s);while(par&&par.parentNode){if(par.nodeType==1&&this.regex.test(par.id)){id=parseInt(RegExp.$1);return isNaN(id)?0:id;}
par=par.parentNode;}
range_e=this.cloneRange(rng)
range_e.collapse(false);par=this.getParentElement(range_e);while(par&&par.parentNode){if(par.nodeType==1&&this.regex.test(par.id)){id=parseInt(RegExp.$1);return isNaN(id)?0:id;}
par=par.parentNode;}
return 0;},getSelection:function(){if(window.getSelection){return window.getSelection();}else{return document.selection;}},getRange:function(selection){selection=selection||this.getSelection();if(selection.getRangeAt){return selection.getRangeAt(0);}else{return selection.createRange();}},cloneRange:function(rng){rng=rng||this.getRange();if(rng.duplicate){return rng.duplicate();}else{return rng.cloneRange();}},getParentElement:function(range){var par=range.parentElement?range.parentElement():range.commonAncestorContainer;if(!par)return null;while(par.nodeType!=1){par=par.parentNode;}
return par;},setString:function(id,sTitle,sName,sLink){var data={name:sName,link:sLink,title:sTitle};this.strings[id]=this._template.replace(/\{(\w+)\}/g,function(m0,m1){return data[m1]?data[m1]:"";});},copy:function(evt){var evt=evt||window.event;var self=this;var sel=this.getSelection();var rng=this.getRange(sel);var rngtmp=this.cloneRange(rng);var regcopy=/(?:p|<div)[^<>]+class\s*=\s*"?autosourcing\-stub(?:\-extra)?\-saved(?:\b|")/i;var regtag=/textarea|input/i;var id=this.getId(rng);var node_rng;this.skip=false;clearTimeout(this.timer);if(id==0){try{this.div.parentNode.removeChild(this.div)}catch(e){};return;}
if(evt&&evt.srcElement&&evt.srcElement.tagName.toUpperCase()=="A")return;this.div.innerHTML=this.strings[id];if(window.getSelection){var html=(window.XMLSerializer)?new XMLSerializer().serializeToString(rng.cloneContents()):"";if(regcopy.test(html)||regtag.test(rng.commonAncestorContainer.tagName)){this.skip=true;return;}
rngtmp.collapse(false);rngtmp.insertNode(this.div);if(this.div.nextSibling){rng.setEndBefore(this.div.nextSibling);}else{rng.setEndAfter(this.div);}
sel.removeAllRanges();sel.addRange(rng);}else if(document.selection){var body=document.body||document.getElementsByTagName("body")[0];var div=document.createElement("div");var span=document.createElement("span");span.id=this.id;if(regcopy.test(rng.htmlText)||regtag.test(rng.parentElement().tagName)){this.skip=true;return;}
rngtmp.collapse(false);rngtmp.pasteHTML(span.outerHTML+'&nbsp;<a></a>');span=document.getElementById(this.id);(span||rngtmp.parentElement()).insertAdjacentElement("afterEnd",this.div);do{rng.moveEnd("character",1);(rngtmp=rng.duplicate()).collapse(false);}while(rngtmp.offsetLeft==0);try{rng.select();}catch(e){}
if(span&&span.parentNode){span.parentNode.removeChild(span.nextSibling.nextSibling);span.parentNode.removeChild(span.nextSibling.nextSibling);span.parentNode.removeChild(span);}
if(div.parentNode){div.parentNode.removeChild(div);}}
if(typeof document.body.oncopy!="undefined"){this.timer=setTimeout(function(){self.aftercopy(rng);},1);}},aftercopy:function(rng){if(this.skip)return;try{this.div.parentNode.removeChild(this.div);if(/WebKit/.test(navigator.userAgent)){var sel=this.getSelection();sel.removeAllRanges();sel.addRange(rng);}}catch(e){}},keydown:function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode==67){this.copy();}},keypress:function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode==67){var t=this;this.timer=setTimeout(function(){t.aftercopy();},10);}},mousedown:function(e){},setTemplate:function(html){this._template=html;},addEvent:function(obj,sEvent,pFunc){function addEventIE(obj,sEvent,pFunc){obj.attachEvent("on"+sEvent,pFunc);}
function addEventFF(obj,sEvent,pFunc){obj.addEventListener(sEvent,pFunc,false);}
if(obj.attachEvent)this.addEvent=addEventIE;else this.addEvent=addEventFF;this.addEvent(obj,sEvent,pFunc);},removeEvent:function(obj,sEvent,pFunc){function removeEventIE(obj,sEvent,pFunc){obj.detachEvent("on"+sEvent,pFunc);}
function removeEventFF(obj,sEvent,pFunc){obj.removeEventListener(sEvent,pFunc,false);}
if(obj.detachEvent)this.removeEvent=removeEventIE;else this.removeEvent=removeEventFF;}}

function xAddEventListener(e,eT,eL,cap)
{
  if(!(e=xGetElementById(e))) return;
  eT=eT.toLowerCase();
  if((!xIE4Up && !xOp7Up) && e==window) {
    if(eT=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eL; xResizeEvent(); return; }
    if(eT=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eL; xScrollEvent(); return; }
  }
  var eh='e.on'+eT+'=eL';
  if(e.addEventListener) e.addEventListener(eT,eL,cap);
  else if(e.attachEvent) e.attachEvent('on'+eT,eL);
  else eval(eh);
}

