// 스트링 객체에 바이트 리턴 메소드 추가
/*
String.prototype.bytes = function (str) {
  str = this != window ? this : str;
  var len = 0;
  for(j=0; j<str.length; j++) {
    var chr = str.charAt(j);
    len += (chr.charCodeAt() > 128) ? 2 : 1;
  }
  return len;
}

// 스트링 객체에 trim 메소드 추가
String.prototype.trim = function (str) {
  str = this != window ? this : str;
  return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

// 스트링 객체에 따옴표(',")가 있는지 검사
String.prototype.isquot = function (str) {
  str = this != window ? this : str;
  if ((str.indexOf("'") >= 0) || (str.indexOf("\"") >= 0)) return true;
  return false;
}
*/

function openWindow (uri, id, opts) {
  if (opts) window.open(uri, id, opts);
  else window.open(uri, id);
}
function openWindowSize (uri, id, width, height) {
  window.open(uri, id, 'width='+width+',height='+height+',scrollbars=yes,resizable=yes');
}

// checkbox 전체선택/해제 (해당 체크박스의 개수 리턴)
function QcheckAll(form, name) {
  var form_len = form.length;
  var chkcnt = 0;
  var chked = false;
  for(i=0; i<form_len; i++) {
    if(form.elements[i].name == name) {
      if (chkcnt == 0 && form.elements[i].checked == false) chked = true;
      form.elements[i].checked = chked;
      chkcnt++;
    }
  }
  return chkcnt;
}


function QopenMessage(uid, root_path) {
  var exescr;
  if (!root_path) exescr = "message_to_pop.php";
  else exescr = root_path+"mypage/message_to_pop.php";
  if (!uid) uid = '';
  window.open(exescr+"?uids="+uid, "messagePop", "width=500,height=500,scrollbars=yes,resizable=yes");
}


// 선택된 체크박스 개수를 리턴
function QcheckedCount(form, name, type) {
  var form_len = form.length;
  var chkcnt = 0;
  for(i=0; i<form_len; i++) {
    if(form.elements[i].name == name) {
      if (type == 'checkbox' && (form.elements[i].checked == true)) chkcnt++;
      else {
        if (type != 'checkbox' && form.elements[i].value.length) chkcnt++;
      }
    }
  }
  return chkcnt;
}

function QelementsCount(form, name) {
  var form_len = form.length;
  var cnt = 0;
  for(i=0; i<form_len; i++) {
    if(form.elements[i].name == name) cnt++;
  }
  return cnt;
}

// 트랙백 창 열기
function QopenTrackbackPing(hid, ano, root_dir) {
  if (!root_dir) root_dir = '../';
  window.open(root_dir+"admin_home/trackback_ctl.php?hid="+hid+"&ano="+ano, "trackback_ctl", "width=600,height=500,resizable=yes,scrollbars=yes");

}

// 각종 약관보기 팝업
function QopenAgreements (mode, root_path) {
  if (!mode) mode = 'privacy';
  if (!root_path) root_path = '../';
  window.open (root_path+"portal/show_agreements.php?mode="+mode, "Agreements", "width=600,height=600,scrollbars=yes,resizable=yes");
}

// 사용자정보 레이어
var Qlayer = {

  root_path : '/',
  layers : {
    'UI' : 'QlayerUI',
		'Addr' : 'QlayerAddr'
  },

  // 사용자정보
  showUI : function (event, evt_ele, uno) {

    var event = new Event(event);
    event.stop();
    if (!uno) {
      $(this.layers['UI']).innerHTML = '<div id="UInobody">비회원입니다.</div>';
      this._showLayer('UI', evt_ele);
      return;
    }
    var ajax = this._AjaxUpdater(this.root_path+'common/ui/ui.php', 'uno='+uno, 'UI', evt_ele);

  },

  // 주소검색
  showAddr : function (event, evt_ele, query) {

    var event = new Event(event);
    event.stop();
    var ajax = this._AjaxUpdater(this.root_path+'portal/join.php', query, 'Addr', evt_ele);

  },

  // 모든 레이어 숨김
  hideAll : function () {

    for (layer in this.layers) {
      //$(this.layers[layer]).style.display = 'none';
			if ($(this.layers[layer])) {
				var fx = new Fx.Style($(this.layers[layer]), 'opacity', {duration: 70, wait: false}).set(1);
				fx.start(0);
				$(this.layers[layer]).setStyle('display','none');
			}
    }

  },

  // Ajax Update
  _AjaxUpdater : function (url, data, ele_key, evt_ele) {

    var ajax = new Ajax(url, {method: 'get', data: data, update: $(this.layers[ele_key]), evalScripts: true,
      ele_key: ele_key,
      evt_ele: evt_ele,
      onComplete:
        function (result) {
          Qlayer._showLayer(ele_key, evt_ele);
        }
    });
    ajax.request();


  },

  // 지정한 레이어 표시
  _showLayer : function (ele_key, evt_ele) {

    var pos = $(evt_ele).getCoordinates();
    var ele = this.layers[ele_key];

    $(ele).setStyle('left', pos['left']+'px');
    $(ele).setStyle('top', pos['top'] + pos['height'] + 3 + 'px');
    $(ele).setStyle('display', 'block');

		var fx = new Fx.Style(ele, 'opacity', {duration: 80, wait: false}).set(0.4);
		fx.start(1);

		$(ele).addEvent('click', function (event) {
			var event = new Event(event);
			event.stopPropagation();
		});

    document.addEvent('click', function (event) {
      var event = new Event(event);
      Qlayer.hideAll();
    });

  }

}

// 브라우저 가로, 세로, 위, 아래 값 구하기
function QgetScreen(toolbar){

	var sW=0;	// 가로폭
	var sH=0;	// 세로폭
	var hT=0;	// 위쪽 여백
	var hL=0;	// 왼쪽 여백
	var hW=0;	// 가로 (여백포함)
	var hH=0;	// 세로 (여백포함)

	if(toolbar){

		sW = screen.availWidth;
		sH = screen.availHeight;

	}else{

		sW = document.documentElement.clientWidth;
		sH = document.documentElement.clientHeight;

	}

	hL=(document.documentElement.scrollLeft || document.body.scrollLeft);	
	hT=(document.documentElement.scrollTop || document.body.scrollTop);
	hW=(document.documentElement.scrollWidth || document.body.scrollWidth);
	hH=(document.documentElement.scrollHeight || document.body.scrollHeight);

	var newEle=new Object();

	newEle.width=sW;
	newEle.height=sH;
	newEle.screenTop=hT;
	newEle.screenLeft=hL;
	newEle.screenWidth=hW;
	newEle.screenHeight=hH;

	return newEle;

}

// 특정 레이어의 화면 배치할 수치 
function QLayerLocationSet(id){

	var aEle=$(id).getCoordinates();
	var sEle=QgetScreen(false);	// 스크린 정보 가져오기

	if(clickEle){

		// 개체의 중심으로 정렬
		var bEle=$(clickEle).getCoordinates();
		var centerWidth=Math.round(Number(bEle.width)/2);
		var centerHeight=Math.round(Number(bEle.height)/2);

		var lH=Number(bEle.top)+centerHeight;
		var lW=Number(bEle.left)+centerWidth;

		lH=lH-Math.round(Number(aEle.height)/2);
		lW=lW-Math.round(Number(aEle.width)/2);

	}else{

		// 화면 센터로 정렬
		var screenWidth=Math.round((Number(sEle.width)-Number(aEle.width))/2);
		var screenHeight=Math.round((Number(sEle.height)-Number(aEle.height))/2);

		var lH=Number(sEle.screenTop)+screenHeight;
		var lW=Number(sEle.screenLeft)+screenWidth;

	}

	var rO=new Object();
	rO.left=lW;
	rO.top=lH;
	
	return rO;

}



// 툴팁
/*
window.addEvent('load', function () {
  var tooltip = new Tips($$('.tooltip'), {
    initialize:function(){
      this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 100, wait: false}).set(0);
    },
    onShow: function(toolTip) {
      this.fx.start(0.9);
    },
    onHide: function(toolTip) {
      this.fx.start(0);
    },
    showDelay: 500,
    hideDelay: 200,
    fixed: true
  });

});
*/

// 아이디 형식체크
function QchkUID(val) {
  if (val.length < 3 || val.length > 16) return false;
  var pattern = /^[a-zA-Z0-9][_a-zA-Z0-9]+$/;
  return pattern.test(val);
}

// 이메일 형식체크
function QchkEmail(val) {
  var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
  return pattern.test(val);
}

// 숫자와 영문인지 체크
function QchkALNUM(val) {
  var pattern = /^[a-zA-Z0-9]+$/;
  return (pattern.test(val));
}

// 휴대전화번호 체크
function QchkCphone(val) {
  var pattern = /^[0][0-9]{2}-*[1-9][0-9]{2,3}-*[0-9]{4}$/;
  return pattern.test(val);
}

// 전화번호 형식체크
function QchkTel(val) {
  var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
  return (pattern.exec(val)) ? true : false;
}

// URI 체크
function QchkURI(val) {
  var pattern = new RegExp("^(http:\/\/|https:\/\/|ftp:\/\/|mms:\/\/){1}(www\.)?([가-힝a-zA-Z0-9-]+\.[a-zA-Z0-9]{1,4})","i");
  return pattern.test(val);
}

// 천단위 콤마찍기
function QnumberFormat (val) {
  var cnum = "";
  var cnum_k = "";
  val = QnumberUnFormat(val);
  for (i=val.length-1; i>=0; i--) {
    cnum_k = val.substr(i, 1) + cnum_k;
    //alert(cnum_k);
    if (cnum_k.length >= 3) {
      if (i > 0) cnum = "," + cnum_k + cnum;
      else cnum = cnum_k + cnum;
      cnum_k = "";
    }
    if (i == 0) cnum = cnum_k + cnum;
  }
  return cnum;
}

// 천단위 콤마 및 기타 문자를 제거하고 숫자열만 리턴
function QnumberUnFormat (val) {
  val = String(val);
  if (val == '') return '';
  var cnum = "";
  var char_ = "";
  for (i=0; i<val.length; i++) {
    char_ = val.substr(i, 1);
    if (char_ < '0' || char_ > '9') continue;
    cnum = cnum + char_;
  }
  return cnum;
}

// 플래쉬 삽입
function QinsertFlash(file, width, height){
	document.writeln("<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" WIDTH=\""+width+"\" HEIGHT=\""+height+"\" id=\"contents\" align=\"\">");
	document.writeln("<param name=\"movie\" value=\""+file+"\" />");
	document.writeln("<param name=\"quality\" value=\"high\" />");
	document.writeln("<param name=\"bgcolor\" value=\"#FFFFFF\" />");
	document.writeln("<param name=\"wmode\" value=\"transparent\" />");
	document.writeln("<embed src=\""+file+"\" wmode=\"transparent\" quality=\"high\" bgcolor=\"#FFFFFF\" width=\""+width+"\" height=\""+height+"\" name=\"contents\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />");
	document.writeln("</OBJECT>");
}

// 아작스 처리후 결과
function QresultMsg(result, msg){

	if(msg) alert(msg);
	if(result) location.reload();

}


// 블라인드 레이어
function Q_blindLayer(type,lObj){

	var ele=$("blind");
	if(!ele) return false;

	if(!type) type=ele.getStyle("display");

	switch(type){

		case "none":

			hiddenSelect("hidden");	// select 박스 숨김

			ele.setStyle("display","block");
			var sEle=QgetScreen(false);	

			ele.setStyle("width",sEle.screenWidth+"px");
			ele.setStyle("height",sEle.screenHeight+"px");
			ele.setOpacity(0.5);

			if(lObj) hiddenSelect("visible",lObj);	// 특정 레이어 내의 select 박스는 보이기

			return true;

		break;
		case "block":

			hiddenSelect("visible");	// select 박스 노출
			ele.setStyle("display","none");
			return false;

		break;

	}

}

// 레이어 창 가운데 좌표값
function Q_layerArrange(obj){

	var retObj=new Object;
	retObj.top=0;
	retObj.width=0;

	if(!obj.getCoordinates) return retObj;

	var sEle=QgetScreen(false);	// 브라우저 크기 반환
	var width=Number(sEle.screenWidth);
	var height=Number(sEle.screenHeight);

	var oWidth=obj.getCoordinates().width;
	var oHeight=obj.getCoordinates().height;

	var top=Number((height-oHeight)/2);
	var left=Number((width-oWidth)/2);

	retObj.top=top;
	retObj.left=left;

	return retObj;

}

function hiddenSelect(type,obj){

	// select 박스 숨김

	if(obj){
		var tEle=obj.getElementsByTagName("select");
	}else{
		var tEle=document.getElementsByTagName("select");
	}

	var leng=tEle.length;

	for(var i=0 ; i < leng ; i++){

		tEle[i].style.visibility=type;

	}

}

// 캡차 레이어 창
var clickEle='';
function Q_CaptchaForm(form,type,obj){

	if(obj)	clickEle=obj;

	if(Q_blindLayer(type)){	// 블라인드 레이어

		// 아작스로 캡차 코드 및 코드 이미지 생성
		var uri=Object.toQueryString({cmd:'captcha_create'});
		var ajx=new Ajax(form.action,{data:uri, method:"post", onComplete:function() {

			$("captcha_code").src=Qlayer.root_path+this.response.text;	// 반환된 캡차 코드 이미지 경로

			// 캡차 코드 입력 폼

			var form=$("FORM_captcha");
			form.setStyle("display","block");

			var aEle=QLayerLocationSet('FORM_captcha');

			form.setStyle("top",aEle.top+"px");
			form.setStyle("left",aEle.left+"px");

			// 레이어가 화면 밖으로 나가는 지 확인

			var aEle=$('FORM_captcha').getCoordinates();
			var sEle=QgetScreen(false);	// 스크린 정보 가져오기

			if(aEle.top < sEle.screenTop) aEle.top+=(sEle.screenTop-aEle.top);		// 상단
			if(aEle.left < sEle.screenLeft) aEle.left+=(sEle.screenLeft-aEle.left)	// 좌측
			if(aEle.bottom > (sEle.height + sEle.screenTop)) aEle.top-=(aEle.bottom-(sEle.height + sEle.screenTop))	// 하단
			if(aEle.right > (sEle.width + sEle.screenLeft)) aEle.left-=(aEle.right-(sEle.width + sEle.screenLeft))	// 우측

			form.setStyle("top",aEle.top+"px");
			form.setStyle("left",aEle.left+"px");

			$("FORM_captcha").captcha.focus();

		}});
		ajx.request();

	}else{

		var form=$("FORM_captcha");
		form.setStyle("display","none");

	}
	
}

// 캡차 인증
function Q_CaptchaCompare(form){

	var captcha=$("FORM_captcha").captcha;

	if(captcha.value==''){

		alert('코드를 입력하여 주세요.');
		captcha.focus();
		return false;

	}

	var uri=Object.toQueryString({cmd:'captcha_compare', captcha:captcha.value});
	
	var ajx=new Ajax($("FORM_captcha").action,{data:uri, method:"post", onComplete:function() {

		processCpatcha(form,this.response.text);	// 캡차 결과 처리

	}});
	ajx.request();

}

// 캡차 비교 결과 처리
function processCpatcha(form,resultText){

	form.captcha.value=resultText;

	switch(form.captcha.value){

		case "true":

			alert('입력하신 코드가 일치 하지 않습니다. 대소문자에 유의하여 다시 시도하여 주십시오.');
			$("FORM_captcha").captcha.value='';
			$("captcha_code").src='';
			Q_CaptchaForm(form,'none');
			return false;

		break;
		case "false":

			if(formSubmit) formSubmit(form);
			Q_CaptchaForm(form);
			return true;
		break;
		default:

	}

}

//상세설명 보기
function detailVew(id){

	var ele=$(id);

	if(Q_blindLayer(false)){

		$(id).setStyle('display','block');

		var lEle=QLayerLocationSet(id);

		$(id).setStyle('top',lEle.top+'px');
		$(id).setStyle('left',lEle.left+'px');

	}else{

		$(id).setStyle('display','none');

	}



}

// 옵션 항목 순서이동
function QMoveOption(id,kind,target){

	var ele=$(id);
	var len=ele.length;

	// 선택된 항목의 인덱스 키 알아오기
	var selectedIndex=0;
	for(var i=0 ; i < len ; i++){

		if(!ele[i].selected==true) continue;
		selectedIndex=i;
		break;

	}

	// 바로 위 항목과 아래 항목의 인덱스키 알아오기	
	var preIndex=0;
	var nextIndex=len-1;
	if(selectedIndex > preIndex) preIndex=selectedIndex-1;	// 선택된 항목이 첫번째 항목이 아니면
	if(selectedIndex < nextIndex) nextIndex=selectedIndex+1;// 선택된 항목이 마지막 항목이 아니면

	// 현재 항목 자료 백업
	var backupArr=new Array();
	backupArr['value']=ele[selectedIndex].value;
	backupArr['text']=ele[selectedIndex].text;
	backupArr['selected']=ele[selectedIndex].selected;

	switch(kind){

		case"up":

			// 데이터 교환
			ele[selectedIndex].value=ele[preIndex].value;
			ele[selectedIndex].text=ele[preIndex].text;
			ele[selectedIndex].selected=ele[preIndex].selected;

			ele[preIndex].value=backupArr['value'];
			ele[preIndex].text=backupArr['text'];
			ele[preIndex].selected=backupArr['selected'];

		break;
		case"down":

			// 데이터 교환
			ele[selectedIndex].value=ele[nextIndex].value;
			ele[selectedIndex].text=ele[nextIndex].text;
			ele[selectedIndex].selected=ele[nextIndex].selected;

			ele[nextIndex].value=backupArr['value'];
			ele[nextIndex].text=backupArr['text'];
			ele[nextIndex].selected=backupArr['selected'];
		
		break;

	}

	var str='';
	for(var i=0 ; i < len ; i++){

		str+=ele[i].value+",";

	}

	$(target).value=str;

}

function moveLayer(obj){

	var myDrag = new Drag.Move(obj, {

		droppables: '.view_image',

		onDrop: function(obj, droppable){
			if (!droppable) console.log(obj, ' dropped on nothing');
			else console.log(obj, 'dropped on', droppable);
		},
	 
		onEnter: function(obj, droppable){
			console.log(obj, 'entered', droppable);
		},
	 
		onLeave: function(obj, droppable){
			console.log(obj, 'left', droppable);
		}
	 
	});

}


// 쿠키 읽어오기
function getCookies(cookieName){

	var allCookies=document.cookie.split('; ');
	var len=allCookies.length;

	for(var i=0 ; i < len ; i++){

		var str=allCookies[i];
		var cookieArray=str.split('=');

		if(cookieArray[0]==cookieName) return cookieArray[1];

	}

	return false;

}

// 팝업창 띄우기
function QPopup(type,code,setTime,obj){

//name="nameValue"; expires="expireDate"; path="pathHolders"; domain="domainName"; secure

	// 레이어창이 있는지 확인
	var ele=$("GRP_layer_popup_"+code);
	if(!ele) return false;

	var sEle=QgetScreen(false);

	var cookieName='layerPopup'+code;

	switch(type){

		case 'open':

			obj.motion=(obj.motion)? obj.motion:'NONE' ;

			// GRP_container 레이어 위치 구하기
			var contain=$("GRP_container").getCoordinates();
			
			var result=getCookies(cookieName);
			if(result=='ok') return false;	// 쿠키가 존재하지 않으면 리턴
			ele.setStyle('display','block');	// 레이어 열기

			var gapTop=0;
			var gapLeft=0;

			switch(obj.position){

				case 'LEFTTOP':

					gapTop=0;
					gapLeft=contain.left;

				break;
				case 'CENTER':

					gapTop=Math.round((sEle.height-ele.getCoordinates().height)/2);
					gapLeft=Math.round((sEle.width-ele.getCoordinates().width)/2);

				break;

			}

			switch(obj.motion){

				case 'NONE':

					ele.setStyle("top",(gapTop+obj.top)+"px");
					ele.setStyle("left",(gapLeft+obj.left)+"px");

				break;
				case 'DROP':

					var top=(obj.top*-1)-obj.height;
					var myEffect = new Fx.Styles(ele, {duration: 3600, transition: Fx.Transitions.Circ.easeOut}).set(0);
					myEffect.start({

						'opacity': [100, 100],
						'top': [top, (gapTop+obj.top)],
						'left': [(obj.left+gapLeft), (obj.left+gapLeft)],
						'width': [obj.width, obj.width],
						'height' : [obj.height, obj.height]
						
					});

				break;

			}

		break;
		case 'close':

			var dateStr='';

			$("GRP_layer_popup_"+code).setStyle('display','none');	// 레이어 닫기

			if(setTime<0) return false;
			if(setTime>0){

				var now=date=new Date();
				date.setDate(now.getDate()+setTime);
				dateStr=date.toGMTString();
				dateStr="expires="+dateStr;

			}

			document.cookie=cookieName+"=ok; "+dateStr+'; ';

		break;

	}

}

// 카피라이트 위치 재조정 (하단에 위치)
function QReLocation(){
	
	this.getElementFoot=function (){

		var ele=$("GRP_footer");
		if(ele) return ele;
		var ele=$("LO_foot");
		if(ele) return ele;

	}

	var ele=this.getElementFoot();
	var loca=ele.getCoordinates();
	var sEle=QgetScreen(false);

	if(((sEle.screenTop+sEle.height)-loca.top)>0){	// 카피라이트 위치가 하단에 공백이 생기면

		if((sEle.screenTop+sEle.height)-loca.top <= loca.top) return false;


		var top=(sEle.screenTop+sEle.height)-loca.height;

		ele.setStyle('position','absolute');
		ele.setStyle('top',top+'px');

	}

}