/**
 * Op Framework
 * @version 1.0.5

 * Included library
 * - SWFObject
 * - Date Format
 *
 * Change Log
 * http://local.dev.onlinepowers.com/download/opjs/opjs_change_log.php?version=105
 *
 * ONLINEPOWERS Library: JavaScript Framework
 */
var SCRIPT_PATH = '/opContent/scripts';

// Dynamic Load Script
DynamicLoad={quSXI:new Array(),quS:new Array(),isLoad:function(a){for(var b=this.quS.length-1;b>=0;b--){if(this.quS[b]===a){return true}}return false},_runOnload:function(b,a,c){if(!a){return}b.onloadDone=false;if(typeof b.onreadystatechange==="undefined"&&!b.onloadDone){b.onloadDone=true;if(c){setTimeout(a,100)}else{b.onload=a}}b.onreadystatechange=function(){if(("loaded"===b.readyState||"complete"===b.readyState)&&!b.onloadDone){b.onloadDone=true;setTimeout(a,100)}}},script:function(c,a){if(!this.isLoad(c)){this.quS[this.quS.length]=c;var b=document.createElement("script");b.type="text/javascript";b.src=c;b.charset="utf-8";document.getElementsByTagName("head")[0].appendChild(b);this._runOnload(b,a)}else{if(a){setTimeout(a,100)}}},style:function(c,a){if(!this.isLoad(c)){this.quS[this.quS.length]=c;var b=document.createElement("link");b.rel="stylesheet";b.type="text/css";b.href=c;b.charset="utf-8";document.getElementsByTagName("head")[0].appendChild(b);this._runOnload(b,a)}else{if(a){setTimeout(a,100)}}}};

document.write('<scr'+'ipt type="text/javascript" src="'+SCRIPT_PATH+'/op.config.js"><\/scr'+'ipt>');
document.write('<scr'+'ipt type="text/javascript" src="'+SCRIPT_PATH+'/op.message.js"><\/scr'+'ipt>');

/*	SWFObject v2.2 <http://code.google.com/p/swfobject/>
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
jQuery.fn.delay = function(time, func){
	setTimeout(func, time);
	return this;
};
// get url parameter
$.extend({
	getUrlParams: function() {
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		for(var i = 0; i < hashes.length; i++) {
			hash = hashes[i].split('=');
			vars.push(hash[0]);
			vars[hash[0]] = hash[1];
		}
		return vars;
	},
	getUrlParam: function(name) {
		return $.getUrlParams()[name];
	}
});
(function($) {
	$.extend($.fn, {
		check: function() {
			$(this).attr('checked', true);
		},
		uncheck: function() {
			$(this).attr('checked', false);
		},
		opValidate: function (options) {
			if (!this.length) return;
			var _this = this;
			$.getScript(Config.path.validate, function() {
				jQuery(_this).validate(options);
			});
		},
		shiftCheck: function() {
			if (!this.length) return;
			var _this = this;
			$.getScript(Config.path.shiftCheckbox, function() {
				jQuery(_this).find('input:checkbox').shiftcheckbox();
			});
		},
		// jQuery('#swf_area').swfObject('gnb.swf', '800', '150', {m:4,s:3}, {menu:'false', bgcolor:'#000', wmode:'transparent'}, {id:'myId',name:'myName'}, function() {});
		swf: function(swfUrl, width, height, flashVars, params, attr, callbackFn) {
			if (!this.length) return;
			var _this = this;
			jQuery(_this).css({'backgroundImage':'url('+Config.path.swfObject.preloaderImage+')','backgroundRepeat':'no-repeat','backgroundPosition':'50% 50%','width':width,'height':height});
			swfobject.embedSWF(swfUrl, _this.attr('id'), width, height, '9', '', flashVars, params, attr, callbackFn);
		},
		opFade: function() {
			jQuery(this).fadeTo('slow', 0.5);
			jQuery(this).hover(function() {
				jQuery(this).stop().fadeTo('slow', 1.0);
			}, function() {
				jQuery(this).stop().fadeTo('slow', 0.5);
			});
		},
		opResize: function(options) {
			if (!this.length) return;
			var maxWidth = options.width;
			var maxHeight = options.heigth;
			var ratio = 0;
			var width = 0, height = 0;
			this.each(function(i) {
				width = jQuery(this).width();
				height = jQuery(this).height();
				if(maxWidth > 0 && width > maxWidth){
					ratio = maxWidth / width;
					jQuery(this).css("width", maxWidth);
					jQuery(this).css("height", height * ratio);
					height = height * ratio;
					width = width * ratio;
				}
				if(maxHeight > 0 && height > maxHeight){
					ratio = maxHeight / height;
					jQuery(this).css("height", maxHeight);
					jQuery(this).css("width", width * ratio);
					width = width * ratio;
				}
			});
		},
		opZoom: function() {
			if (!this.length) return;
			var _this = this;
			DynamicLoad.style(Config.path.imageZoom.css);
			DynamicLoad.script(Config.path.imageZoom.js, function() {
				jQuery(_this).imageZoom();
			});
		},
		opLayer: function() {
			if (!this.length) return;
			var _this = this;
			jQuery(_this).fancybox();
		},
		opIframe: function() {
			if (!this.length) return;
			var _this = this;
			jQuery(_this).fancybox({
				'width'				: '75%',
				'height'			: '75%',
				'autoScale'			: false,
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'type'				: 'iframe'
			});
		},
		opGallery: function() {
			if (!this.length) return;
			var _this = this;
			var className = jQuery(_this).attr('class');
			className = replaceAll(className, ' ', '_');
			jQuery(_this).attr('rel', className);
			jQuery(_this).fancybox({
				'titlePosition' : 'over',
				'titleFormat'	: function(title, currentArray, currentIndex, currentOpts) {
					return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
				}
			});
		},
		opClipboard: function(btnId) {
			if (!this.length) return;
			var _this = this, content;
			if (jQuery(_this).attr('type') == undefined) {
				content = jQuery(_this).text();
			} else {
				content = jQuery(_this).val();
			}
			DynamicLoad.script(Config.path.zeroClipboard.js, function() {
				var clipBoard = null;
				clipBoard = new ZeroClipboard.Client();

				// cursor hand type
				clipBoard.setHandCursor(true);

				// 버튼 활성화
				clipBoard.glue(btnId);

				// 마우스 클릭시에 이벤트 발생. - clipboard에 저장
				clipBoard.addEventListener('mouseOver', function (client) {
					clipBoard.setText(content);
				});

				// copy 완료시에 발생할 callback함수
				clipBoard.addEventListener('complete', function (client) {
					alert("복사되었습니다.\n\n붙여넣기(Ctrl + v)를 이용하세요.");
				});
			});
		},
		opCalendar: function(options) {
			
			if (!this.length) return;
			var _this = this, content;
			var _id = $(this).attr('id');
			var tch = '', trh = '';
			options = jQuery.extend({
				editable: true,
				loading: function(bool) {
					if (bool) {
					} else {
					}
				},
				eventDrop: function(event, delta) {
					// TODO event drag&drop
				},
				header: {
					left: '',
					center: '',
					right: ''
				},
				monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
			    dayNames: ['일', '월', '화', '수', '목', '금', '토'],
			    dayNamesShort: ['<img src="'+Config.path.fullCalendar.imgFolder+'/sunday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/monday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/tuesday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/wednesday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/thursday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/friday.gif" />', '<img src="'+Config.path.fullCalendar.imgFolder+'/saturday.gif" />'],
			    timeFormat: 'H:mm{~H:mm}',
			    titleFormat: {
			        month: 'yyyy년 MMM월',                             // September 2009
			        week: "yyyy년 MMM월 d일{ '~'[ MMM]월 d일}", // Sep 7 - 13 2009
			        day: 'yyyy년 MMM월 d일 ddd요일'                  // Tuesday, Sep 8, 2009
			    },
			    skin: 1,
				todayColor: '#ffc'
			}, options);

			DynamicLoad.style(Config.path.fullCalendar.css);
			function init() {
				$.getScript(Config.path.fullCalendar.js, function() {
					
					var date = new Date();
					var yyyy = date.getFullYear();
					var mm = date.format('mm');
					var style = '';
					var color = options.color ? options.color : 'transparent';
					style += '#'+_id+' div.fc-content table th.fc-widget-header { padding: 7px 0 0 7px; height: 26px; text-align: left; border: 0px; border-top: 1px solid #D8D8D8;}';
					style += '#'+_id+' div.fc-grid div.fc-day-number {float: left;	padding: 3px 5px; font: bold 11px/18px Tahoma, sans-serif; color: #313131; height: 18px;}';
					style += '#'+_id+' div.fc div.fc-content td.fc-sun div.fc-day-number {color: #FD6A5F}';
					style += '#'+_id+' div.fc div.fc-content td.fc-sat div.fc-day-number {color: #84BBDB}';
					style += '#'+_id+' div.fc-event-inner > span.fc-event-time {padding: 0 1px;font-family: \'Tahoma\';font-size: 11px; font-weight: bold; !important}';
					style += '#'+_id+' div.fc-event-inner > span.fc-event-title {padding: 0 1px;font-family: \'Malgun Gothic\', \'dotum\', \'Tahoma\';font-size: 9pt; !important}';
					style += '#'+_id+' table td.fc-state-highlight {background-color:'+options.todayColor+'}';
					if (options.skin == 1) {
						style += 'div.fc-event-skin, a.fc-event-skin {background-color:'+color+';color:'+options.textColor+'}';
					} else if (options.skin == 2) {
						style += 'div.fc-event-skin, a.fc-event-skin {background-color:transparent;border:0;color:'+options.textColor+'}';
					}
					
					$('<style>'+style+'</style>').appendTo($('head:eq(0)'));
					
					$(_this).fullCalendar(options);
					
					tch += '<div id="op_calendar_header" style="margin-bottom: 15px">';
					tch +=     '<span style="" id="now_year"><img src="'+Config.path.fullCalendar.imgFolder+'/year-'+yyyy+'.gif" alt="" /></span>';
					tch +=     '<span style="margin-left: 10px"><a href="#이전달" onclick="opCalendar.changeMonth(\''+_id+'\', \'prev\');return false;"><img src="'+Config.path.fullCalendar.imgFolder+'/year-prev.gif" alt="이전달" /></a></span>';
					tch +=     '<span style="margin: 0 20px" id="now_month"><img src="'+Config.path.fullCalendar.imgFolder+'/month-'+mm+'.gif" alt="" style="margin-bottom: -5px" /></span>';
					tch +=     '<span style=""><a href="#다음달" onclick="opCalendar.changeMonth(\''+_id+'\', \'next\');return false;"><img src="'+Config.path.fullCalendar.imgFolder+'/year-next.gif" alt="다음달" /></a></span>';
					tch += '</div>';
					$('table.fc-header td.fc-header-center').html(tch);

					trh += '<div id="op_calendar_select" style="float: right;padding-top: 10px">';
					trh +=   '<select id="select_year" style="vertical-align: top">';
					for ( var m = 2011; m < 2020; m++) {
						trh += '<option value="'+m+'">'+m+'년</option>';
					}
					trh +=   '</select>&nbsp;';
					trh +=   '<select id="select_month" style="vertical-align: top">';
					for ( var m = 1; m < 13; m++) {
						trh +=     '<option value="'+m+'">'+m+'월</option>';
					}
					trh +=   '</select>&nbsp;';
					trh +=   '<a href="#" onclick="opCalendar.selectMonth(\''+_id+'\');return false;"><img src="'+Config.path.fullCalendar.imgFolder+'/btn-directoGo.gif" alt="" /></a>';
					trh += '</div>';
					$('table.fc-header td.fc-header-right').html(trh);
					$('div.fc-content table th.fc-widget-header', $(_this)).css('background', 'url("'+Config.path.fullCalendar.imgFolder+'/day-div.gif") no-repeat scroll left top #F8F8F8');
					opCalendar.changeMonth(_id);
				});
			}
			setTimeout(init, 1);
		}
	});
})(jQuery);

var opCalendar = {
	changeMonth: function(id, type) {
		$selector = $('#'+id);
		if (type != undefined) {
			$selector.fullCalendar(type);
		}
		var date = $selector.fullCalendar('getDate');
		var month = date.format('mm');
		if (month == '12' || month == '01') {
			var year = date.getFullYear();
			$('div#op_calendar_header > span#now_year > img', $selector).attr('src', Config.path.fullCalendar.imgFolder+'/year-'+year+'.gif');
			$('div#op_calendar_select > select#select_year', $selector).val(year);
		}
		$('div#op_calendar_header > span#now_month > img', $selector).attr('src', Config.path.fullCalendar.imgFolder+'/month-' + month + '.gif');
		$('div#op_calendar_select > select#select_month', $selector).val(date.format('m'));
	},
	selectMonth: function(id) {
		$selector = $('#'+id);
		var year = $('div#op_calendar_select > select#select_year', $selector).val();
		var month = $('div#op_calendar_select > select#select_month', $selector).val();
		$selector.fullCalendar('gotoDate', year, month - 1);
		$('div#op_calendar_header > span#now_year > img', $selector).attr('src', Config.path.fullCalendar.imgFolder+'/year-'+year+'.gif');
		$('div#op_calendar_header > span#now_month > img', $selector).attr('src', Config.path.fullCalendar.imgFolder+'/month-' + leadingZeros(month) + '.gif');
	}
}


var Load = {
	log: function() {
		DynamicLoad.style(Config.path.blackbird.css);
		DynamicLoad.script(Config.path.blackbird.js);
	},
	fancybox: function() {
		DynamicLoad.style(Config.path.fancybox.css);
		DynamicLoad.script(Config.path.jquery.mousewheel);
		DynamicLoad.script(Config.path.fancybox.js);
	}
};

/**
 * Tab
 * @version v1.0.1
 */
$.fn.opTab = function(options) {
	options = jQuery.extend({
		tag: 'h3',		 		// Tab menu tag
		event: 'click', 		// Tab menu event
		on: '_on',
		off: '_off',
		ext: '.gif'
	}, options);
	this.each(function() {
		var $selector = $(this);
		var tabHeight = $selector.find(options.tag + ' > a > img:eq(0)').height();
		var tabWidth = $selector.find(options.tag + ' > a > img:eq(0)').width();
		var moreWidth = $selector.find('p > a > img:eq(0)').width();
		var width = tabWidth*3 + parseInt(moreWidth+20, 10);
		var idx;

		// 첫번째 컨텐츠를 제외하고 숨김
		$selector.find('div.tabContent:eq(0) ~ div.tabContent').hide();
		$selector.find('p:eq(0) ~ p').hide();

		// style
		$selector.css({
			'position':'relative',
			'width':width+'px'
		}).find(options.tag).css({
			'position':'absolute',
			'top':'0'
		}).end().find('p').css({
			'position':'absolute',
			'top':'7px',
			'right':'5px'
		}).end().find('li > span').css({
			'position':'absolute',
			'right':0
		}).end().find('div.tabContent').css({
			'padding-top':Number(tabHeight+10)+'px'
		});
		// event
		$selector.find(options.tag + ' > a').bind(options.event, function(){
			$selector.find(options.tag + ' > a > img').each(function() {
				$(this).attr('src', $(this).attr('src').replace(options.on + options.ext, options.off + options.ext));
			});
			idx = $selector.find(options.tag + ' > a').index(this);
			$('div.tabContent', $selector).hide().eq(idx).show();
			$('p', $selector).hide().eq(idx).show();
			$('img', this).attr('src', $('img', this).attr('src').replace(options.off + options.ext, options.on + options.ext));
		});
	});
};

/**
 * Navigation
 * @version v1.0.1
 */
$.fn.opNavi = function(options) {
	options = jQuery.extend({
		f: 0,
		s: 0,
		horizontal: false,
		ext: '.gif',
		on : '_on',
		off: '',
		event: 'mouseenter focusin',
		effect: '',
		position: '[]',
		speed: 0
	}, options);
	
	$selector = $(this);
	$('> ul > li > ul', $selector).hide();
	if (options.horizontal) {
		$('ul > li', $selector).css({float:'left'}).find('ul').css({position:'absolute'});
	} else {
		//$('> ul > li', $selector).css({float:'left'}).find('ul').css({position:'absolute'});
	}
	
	// Horizontal position
	if (options.position.length > 0) {
		for ( var i = 0; i < options.position.length; i++) {
			if (parseInt(options.position[i], 10) != 0) {
				$('ul > li > ul', $selector).eq(i).css({'marginLeft':parseInt(options.position[i], 10)+'px'});
			}
		}
	}
	// first menu
	$('> ul > li > a', $selector).bind(options.event, function() {
		$('ul > li > ul', $selector).hide().filter(':animated').stop(true, true);
		// effect
		if (options.effect == 1) {
			$(this).next('ul').slideDown();
		} else if (options.effect == 2) {
			$(this).next('ul').fadeIn();
		} else if (options.effect > 2) {
			var easing;
			if (options.effect == 3) {
				easing = 'easeOutQuint';
			} else if (options.effect == 4) {
				easing = 'easeOutBounce';
			} else if (options.effect == 5) {
				easing = 'easeOutElastic';
			} else if (options.effect == 6) {
				easing = 'easeOutBack';
			}

			var ml = $(this).next('ul').css('marginLeft') ? parseInt($(this).next('ul').css('marginLeft'), 10) : 0;
			$(this).next('ul').css({'marginLeft': ml + 150 + 'px'}).show()
				.animate({'marginLeft':'-=150px'}, options.speed, easing);
		} else {
			$(this).next('ul').show();
		}

		$('> ul > li > a > img', $selector).each(function() {
			$(this).attr('src', $(this).attr('src').replace(options.on + options.ext, options.off + options.ext));
		});
		if ($('img', this).size() > 0) $('img', this).attr('src', $('img', this).attr('src').replace(options.off + options.ext, options.on + options.ext));
		$('img', $(this).next('ul')).each(function() {
			$(this).attr('src', $(this).attr('src').replace(options.on + options.ext, options.off + options.ext));
		})
	});
	// second menu
	$('> ul > li > ul > li > a', $selector).bind(options.event, function() {
		$('img', $(this).closest('ul')).each(function() {
			$(this).attr('src', $(this).attr('src').replace(options.on + options.ext, options.off + options.ext));
		})
		$('img', this).attr('src', $('img', this).attr('src').replace(options.off + options.ext, options.on + options.ext));
	});
	// menu active
	function menuActive() {
		if (options.f > 0) {
			$('> ul > li > a', $selector).eq(options.f-1).triggerHandler(options.event.split(' ')[0]);
			if (options.s > 0) {
				$('> ul > li > a', $('> ul > li', $selector).eq(options.f-1)).eq(options.s-1).triggerHandler(options.event.split(' ')[0]);
			}
		} else {
			$('> ul > li > ul', $selector).hide();
			$('> ul > li > a > img', $selector).each(function() {
				$(this).attr('src', $(this).attr('src').replace(options.on + options.ext, options.off + options.ext));
			});
		}
	}
	menuActive();
	$selector.bind('mouseleave', function() {
		menuActive();
	});
};


// String Util
(function($) {
	$.extend($.fn, {
		replaceAll : function(targetString, replacement) {
			return replaceAll(jQuery(this).val(), targetString, replacement);
		}
	});
})(jQuery);


function replaceAll(org, targetString, replacement) {
	var t = new RegExp(targetString, "g");
	str = org.replace(t, replacement);
	return str;
}

// Date Util
var dateFormat=function(){var a=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,b=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,d=/[^-+\dA-Z]/g,c=function(f,e){f=String(f);e=e||2;while(f.length<e){f="0"+f}return f};return function(i,v,q){var g=dateFormat;if(arguments.length==1&&Object.prototype.toString.call(i)=="[object String]"&&!/\d/.test(i)){v=i;i=undefined}i=i?new Date(i):new Date;if(isNaN(i)){throw SyntaxError("invalid date")}v=String(g.masks[v]||v||g.masks["default"]);if(v.slice(0,4)=="UTC:"){v=v.slice(4);q=true}var t=q?"getUTC":"get",l=i[t+"Date"](),e=i[t+"Day"](),j=i[t+"Month"](),p=i[t+"FullYear"](),r=i[t+"Hours"](),k=i[t+"Minutes"](),u=i[t+"Seconds"](),n=i[t+"Milliseconds"](),f=q?0:i.getTimezoneOffset(),h={d:l,dd:c(l),ddd:g.i18n.dayNames[e],dddd:g.i18n.dayNames[e+7],m:j+1,mm:c(j+1),mmm:g.i18n.monthNames[j],mmmm:g.i18n.monthNames[j+12],yy:String(p).slice(2),yyyy:p,h:r%12||12,hh:c(r%12||12),H:r,HH:c(r),M:k,MM:c(k),s:u,ss:c(u),l:c(n,3),L:c(n>99?Math.round(n/10):n),t:r<12?"a":"p",tt:r<12?"am":"pm",T:r<12?"A":"P",TT:r<12?"AM":"PM",Z:q?"UTC":(String(i).match(b)||[""]).pop().replace(d,""),o:(f>0?"-":"+")+c(Math.floor(Math.abs(f)/60)*100+Math.abs(f)%60,4),S:["th","st","nd","rd"][l%10>3?0:(l%100-l%10!=10)*l%10]};return v.replace(a,function(m){return m in h?h[m]:m.slice(1,m.length-1)})}}();dateFormat.masks={"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"};dateFormat.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]};Date.prototype.format=function(a,b){return dateFormat(this,a,b)};


/**
 * Response Handler
 * @param resp
 * @param success
 * @param error
 * @requires
 * @example responseHandler();
 * =>
 * @since 1.0.2
 */
function responseHandler(resp, success, error) {
	if (resp.isSuccess) {
		if (success != undefined) {success()}
	} else {
		if (resp.errorMessage) {
			// TODO alert type 정의
			alert(resp.errorMessage);
		} else {
			if (error != undefined) {error(); return}
		};
	}
}






/**
 * 브라우저 이름과 버전 등을 반환하는 메서드가 있다.
 * @namespace
 */
var Browser = {
	ua: navigator.userAgent.toLowerCase(),
	f: function(s, h){ return ((h||'').indexOf(s) > -1); },
	v: navigator.vendor || '',
	/**
	 * WebKit 여부
	 * @returns {Boolean}
	 */
	isWebkit: function() {
		return this.f('webkit', this.ua);
	},
	/**
	 * Opera 여부
	 * @returns {Boolean}
	 */
	isOpera: function() {
		return (typeof window.opera != "undefined") || this.f("opera", this.ua);
	},
	/**
	 * IE 여부
	 * @returns {Boolean}
	 */
	isIe: function() {
		return !this.isOpera() && this.f("msie", this.ua);
	},
	/**
	 * Chrome 여부
	 * @returns {Boolean}
	 */
	isChrome: function() {
		return this.isWebkit() && this.f("chrome", this.ua);
	},
	/**
	 * Safari 여부
	 * @returns {Boolean}
	 */
	isSafari: function() {
		return this.isWebkit() && !this.isChrome() && this.f("Apple", this.v);
	},
	/**
	 * Firefox 여부
	 * @returns {Boolean}
	 */
	isFirefox: function() {
		return this.f("firefox", this.ua);
	},
	/**
	 * Mozilla 여부
	 * @returns {Boolean}
	 */
	isMozilla: function() {
		return this.f("Gecko", this.ua) && !this.isSafari() && !this.isChrome() && !this.isFirefox();
	},
	/**
	 * OmniWeb 여부
	 * @returns {Boolean}
	 */
	isOmniweb: function() {
		return this.f("omniweb", this.ua);
	},
	/**
	 * Mobile 접근 여부
	 * @returns {Boolean}
	 */
	isMobile: function() {
		return (this.f("Mobile", this.ua) || this.f("Android", this.ua) || this.f("Nokia", this.ua)
				|| this.f("webOS", this.ua) || this.f("Opera Mini", this.ua) || this.f("BlackBerry", this.ua) || this.f("PPC", this.ua)
				|| this.f("Smartphone", this.ua) || this.f("IEMobile", this.ua)) && !this.f("iPad", this.ua);
	},
	/**
	 * Mobile Safari 여부
	 * @returns {Boolean}
	 */
	isMobileSafari: function() {
		return (!this.f("IEMobile", this.ua) && this.f("Mobile", this.ua)) || (this.f("iPad", this.ua) && this.f("Safari", this.ua));
	},
	/**
	 * Mobile Opera 여부
	 * @returns {Boolean}
	 */
	isMobileOpera: function() {
		return this.f("Opera Mini", this.ua);
	},
	/**
	 * Mobile IE 여부
	 * @returns {Boolean}
	 */
	isMobileIe: function() {
		return this.f("PPC", this.ua) || this.f("Smartphone", this.ua) || this.f("IEMobile", this.ua);
	},
	/**
	 * 브라우저 이름을 소문자로 반환하며 Internet Explorer는 ie로 반환한다.<br />
	 * 지원 브라우저 : Internet Explorer, Chrome, Opera, FireFox, Safari
	 * @returns {String}
	 */
	getName: function() {
		var ua = this.ua;
		if (ua.indexOf('chrome') != -1) return 'chrome';
		if (ua.indexOf('opera') != -1) return 'opera';
		if (ua.indexOf('firefox') != -1) return 'firefox';
		if (ua.indexOf('safari') != -1) return 'safari';
		if (ua.indexOf('msie') != -1) return 'ie';
		if (ua.indexOf('netscape') != -1) return 'netscape';
		if (ua.indexOf('mozilla/5.0') != -1) return 'mozilla';
		if (ua.indexOf('\/') != -1) {
			if (ua.substr(0,ua.indexOf('\/')) != 'mozilla') {
				return navigator.userAgent.substr(0,ua.indexOf('\/'));
			} else return 'netscape';
		} else if (ua.indexOf(' ') != -1) return navigator.userAgent.substr(0,ua.indexOf(' '));
		else return navigator.userAgent;
	},
	/**
	 * 브라우저 버전을 반환합니다.<br />
	 * 지원 브라우저 : Internet Explorer, Chrome, Opera, FireFox, Safari
	 * @returns {Float}
	 */
	getVersion: function() {
		var version;
		try {
			if (this.isIe()) {
				ver = this.ua.match(/(?:msie) ([0-9.]+)/)[1];
				if (this.ua.match(/(?:trident)\/([0-9.]+)/)&&this.ua.match(/(?:trident)\/([0-9.]+)/)[1]==4){
					nativeVersion = 8;
				}
			} else if (this.isSafari() || this.isMobileSafari()) {
				ver = parseFloat(this.ua.match(/version[ \/]([0-9.]+)/)[1]);
			} else if (this.isMobileOpera()) {
				ver = this.ua.match(/(?:opera\smini)\/([0-9.]+)/)[1];
			} else if (this.isFirefox() || this.isOmniweb()) {
				ver = this.ua.match(/(?:firefox|omniweb)\/([0-9.]+)/)[1];
			} else if (this.isMozilla()) {
				ver = this.ua.match(/rv:([0-9.]+)/)[1];
			} else if (this.isChrome()) {
				ver = this.ua.match(/chrome[ \/]([0-9.]+)/)[1];
			} else if (this.isOpera()) {
				ver = this.ua.match(/ersion[ \/]([0-9.]+)/)[1];
			}
			version = parseFloat(ver);
			if (isNaN(version)) version = -1;
		} catch(e) {
			version = -1;
		}

		return version;
	}

};

/**
 * 운영체제의 대한 정보를 반환하는 메서드가 있다.
 * @namespace
 */
var Os = {
	ua: navigator.userAgent.toLowerCase(),
	p: navigator.platform,
	f: function(s, h){ return ((h||'').indexOf(s) > -1); },
	/**
	 * Windows 여부
	 * @returns {Boolean}
	 */
	isWin: function() {
		return this.f("Win", this.p);
	},
	/**
	 * Mac 여부
	 * @returns {Boolean}
	 */
	isMac: function() {
		return this.f("Mac", this.p);
	},
	/**
	 * Linux 여부
	 * @returns {Boolean}
	 */
	isLinux: function() {
		return this.f("Linux", this.p);
	},
	/**
	 * Windows 2000 여부
	 * @returns {Boolean}
	 */
	isWin2000: function() {
		return this.isWin && (this.f("nt 5.0", this.ua) || this.f("2000", this.ua));
	},
	/**
	 * Windows xp 여부
	 * @returns {Boolean}
	 */
	isWinXp: function() {
		return this.isWin && this.f("nt 5.1", this.ua);
	},
	/**
	 * Vista 여부
	 * @returns {Boolean}
	 */
	isVista: function() {
		return this.isWin && this.f("nt 6.0", this.ua);
	},
	/**
	 * Windows7 여부
	 * @returns {Boolean}
	 */
	isWin7: function() {
		return this.isWin && this.f("nt 6.1", this.ua);
	},
	/**
	 * iPad 여부
	 * @returns {Boolean}
	 */
	isIPad: function() {
		return this.f("ipad", this.ua);
	},
	/**
	 * iPhone 여부
	 * @returns {Boolean}
	 */
	isIPhone: function() {
		return this.f("iphone", this.ua) && !this.isIPad;
	},
	/**
	 * Android 여부
	 * @returns {Boolean}
	 */
	isAndroid: function() {
		return this.f("android", this.ua);
	},
	/**
	 * Nokia 여부
	 * @returns {Boolean}
	 */
	isNokia: function() {
		return this.f("nokia", this.ua);
	},
	/**
	 * WebOS 여부
	 * @returns {Boolean}
	 */
	isWebOS: function() {
		return this.f("webos", this.ua);
	},
	/**
	 * BlackBerry 여부
	 * @returns {Boolean}
	 */
	isBlackBerry: function() {
		return this.f("blackberry", this.ua);
	},
	/**
	 * Mobile Windows 여부
	 * @returns {Boolean}
	 */
	isMobileWindow: function() {
		return this.f("ppc", this.ua) || this.f("smartphone", this.ua) || this.f("iemobile", this.ua);
	},
	/**
	 * 운영체제 이름을 반환한다.
	 * @returns {String}
	 */
	getName: function() {
		var name;
		try {
			if (this.isWin2000()) {
				name = 'win2000';
			} else if (this.isWinXp()) {
				name = 'winxp';
			} else if (this.isVista()) {
				name = 'vista';
			} else if (this.isWin7()) {
				name = 'win7';
			} else if (this.isWin()) {
				name = 'win';
			} else if (this.isMac()) {
				name = 'mac';
			} else if (this.isLinux()) {
				name = 'linux';
			} else if (this.isIPad()) {
				name = 'ipad';
			} else if (this.isIPhone()) {
				name = 'iphone';
			} else if (this.isAndroid()) {
				name = 'android';
			} else if (this.isNokia()) {
				name = 'nokia';
			} else if (this.isWebOS()) {
				name = 'webos';
			} else if (this.isBlackBerry()) {
				name = 'blackberry';
			} else if (this.isMobileWindow()) {
				name = 'mobilewindow';
			} else {
				name = 'none';
			}
		} catch(e) {
			name = 'none';
		}
		return name;
	}
};

/**
 * 팝업 띄우는 메서드. <br />Chrome에서는 스크롤바 제어를 해당 페이지에서 스타일을 줘야 가능(overflow: hidden)<br />
 * @param {String} [url=""] URL
 * @param {String} popupName popup 이름
 * @param {int} [width="400"] 가로 사이즈
 * @param {int} [height="400"] 세로 사이즈
 * @param {int or String} [scrollbars="0"] 스크롤 여부 (예: yes, 1 아니오: n, no, 0)
 * @param {int} [xPosition="c"] 가로 위치 (가운데: c)
 * @param {int} [yPosition="c"] 세로 위치 (가운데: c)
 * @requires popupName
 * @description <pre class="code">
popup('../../src/sample/popup.html', 'popup1')<br />
=> <input type="button" class="btn" value="실행" onclick="popup('../../src/sample/popup.html', 'popup1');return false;" /><br />
popup('../../src/sample/popup.html', 'popup2', 200, 300, 'no')<br />
=> <input type="button" class="btn" value="실행" onclick="popup('../../src/sample/popup.html', 'popup2', 200, 300, 'no');return false;" /><br />
popup('../../src/sample/popup.html', 'popup3', 200, 300, 'no', 100, 100)<br />
=> <input type="button" class="btn" value="실행" onclick="popup('../../src/sample/popup.html', 'popup3', 200, 300, 'no', 100, 100);return false;" />
</pre>
 */
function popup(url, popupName, width, height, scrollbars, xPosition, yPosition) {
	var xP = 0, yP = 0, xC = 0, yC = 0, scr = 0, zero = 0, one = 1;
	var target = url == null || url == '' ? '' : url;
	var w = width == null || width == '' ? 400 : width;
	var h = height == null || height == '' ? 400 : height;

	if (parseInt(navigator.appVersion) >= 4) {
		xC = (screen.width - w) / 2;
		yC = (screen.height - h) / 2;
	}

	xP = xPosition == null || xPosition == 'c' ? xC : xPosition;
	yP = yPosition == null || yPosition == 'c' ? yC : yPosition;
	scr = scrollbars == null || scrollbars == 'n' ? 0 : scrollbars;

    var parameters = 'location=' + zero +
                     ',menubar=' + zero +
                     ',height=' + h +
                     ',width=' + w +
                     ',toolbar=' + zero +
                     ',scrollbars=' + scr +
                     ',status=' + zero +
                     ',resizable=' + one +
                     ',left=' + xP +
                     ',screenX=' + xP +
                     ',top=' + yP +
                     ',screenY=' + yP;

	newWin = window.open(target, popupName, parameters);
	newWin.focus();
};

/**
 * 레이어 팝업 메서드.
 * @param objCss
 * @param left
 * @param top
 * @param fixed
 * @requires
 * @example layerPopup();
 * =>
 */
function layerPopup(objCss, left, top, fixed) {
	if (objCss != undefined || objCss != '') {
		var w = jQuery(objCss).outerWidth(), h = jQuery(objCss).outerHeight(),
			t = top == undefined || top == '' ? (jQuery(window).height() / 2) - (h / 2) : top,
			l = left == undefined || left == '' ? '50%' : left,
			ml = -(w / 2) + 'px',
			f = fixed == undefined || fixed == true ? true : false,
			p = f ? (Browser.isIe() && Browser.getVersion() == 6 ? 'absolute' : 'fixed') : 'absolute';
		if (jQuery(objCss).css('display') == 'none') {
			jQuery(objCss).css({
				'top':t,
				'left':l,
				'margin-left':ml,
				'position':p,
				'background-color':'#fff'
			}).show();
		} else {
			jQuery(objCss).hide();
			return;
		}
		if (f && Browser.isIe() && Browser.getVersion() == 6) {
			jQuery(window).scroll(function () {
				jQuery(objCss).css('top', t + jQuery(this).scrollTop());
			});
		}
	}
}


/**
 * 즐겨찾기<br />
 * chrome은 되지 않음
 * @param title 즐겨찾기 제목
 * @param url 즐겨찾기 URL
 * @requires title, url
 * @example
 * bookmark('온라인파워스', 'http://www.onlinepowers.com');
 * @description
 * <br /><input type="button" class="btn" value="실행" onclick="bookmark('온라인파워스', 'http://www.onlinepowers.com');return false;" />
 */
function bookmark(title, url){
	if (window.sidebar) {	// firefox
		window.sidebar.addPanel(title, url, '');
	} else if (window.opera && window.print) {	// opera
		var elem = document.createElement('a');
		elem.setAttribute('href', url);
		elem.setAttribute('title', title);
		elem.setAttribute('rel', 'sidebar');
		elem.click();
	} else if(document.all) { 	// ie
		window.external.AddFavorite(url, title);
	}
}




/**
 * 이미지 toggle view
 * @param selector
 * @requires
 * @example show();
 * =>
 */
function show(selector) {
	if ($(selector).css('display') == 'block') {
		$(selector).hide();
	} else {
		$(selector).show();
	}
}

/**
 * 탈퇴처리
 * @param userId
 * @requires
 * @example secede(userId);
 * @description
<br />back-end 에서는 session 비교하여 탈퇴 처리, session destory 후 return.<br />
	<input type="button" class="btn" value="secede('koolkyo');" onclick="secede('koolkyo');" />
	<input type="button" class="btn" value="secede('kyowon');" onclick="secede('kyowon');" />
 */
function secede(userId) {
	if(confirm(Message[Config.language].secedeConfirm)){
		jQuery.ajax({
			type: "POST",
		    url: Config.path.secede,
		    dataType: 'json',
		    data: 'userId='+userId,
		    success: function(resp) {
		    	if (resp.isSuccess) {
					alert(Message[Config.language].secedeComplete);
					document.location.replace(Config.path.logout);
		    	} else {
		    		alert(Message[Config.language].secedeError);
		    	}
		    }
		});
	}
}


function leadingZeros(n, digits) {
	var zero = '';
	if (digits == undefined) digits = 2;
	n = n.toString();

	if (n.length < digits) {
		for (var i = 0; i < digits - n.length; i++)
		zero += '0';
	}
	return zero + n;
}






function checkValidation(obj, fn) {
	if (!jQuery(obj).validation()) return false;
	return (fn == undefined ? true : fn());
}

function checkSsn(ssn){
	if (ssn.length == 13){
		a = new Array(13);
		for (var i=0; i < 13; i++) {
			a[i] = parseInt(ssn.charAt(i));
		}
		var k = 11 - (((a[0] * 2) + (a[1] * 3) + (a[2] * 4) + (a[3] * 5) + (a[4] * 6) + (a[5] * 7) + (a[6] * 8) + (a[7] * 9) + (a[8] * 2) + (a[9] * 3) + (a[10] * 4) + (a[11] * 5)) % 11);
		if (k > 9){
			k -= 10;
		}
		if (k == a[12]){
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

// 외국인 등록번호 체크
function checkFsn(fsn){
	if (fsn.length == 13){
		var fsnNumber = fsn;
		var sum = 0;
		var odd = 0;
		var error = '';
		var birthYear = '';
		buf = new Array(13);

		if (fsnNumber.length != 13) error = 1;
		if ((fsnNumber.charAt(6) == "5") || (fsnNumber.charAt(6) == "6")){
			birthYear = "19";
		} else if ((fsnNumber.charAt(6) == "7") || (fsnNumber.charAt(6) == "8")){
			birthYear = "20";
		} else if ((fsnNumber.charAt(6) == "9") || (fsnNumber.charAt(6) == "0")){
			birthYear = "18";
		} else {
			error = 1;
		}
		if (birthYear) {
			birthYear += fsnNumber.substr(0, 2);
			birthMonth = fsnNumber.substr(2, 2) - 1;
			birthDate = fsnNumber.substr(4, 2);
			birth = new Date(birthYear, birthMonth, birthDate);

			if (birth.getYear() % 100 != fsnNumber.substr(0, 2) ||
				birth.getMonth() != birthMonth ||
				birth.getDate() != birthDate){
				error = 1;
			}
		}
		for (i = 0; i < 13; i++) buf[i] = parseInt(fsnNumber.charAt(i));
		odd = buf[7] * 10 + buf[8];
		if(odd % 2 != 0) error = 1;
		if ((buf[11] != 6) && (buf[11] != 7) && (buf[11] != 8) && (buf[11] != 9)) error = 1;
		multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
		for (i = 0, sum = 0; i < 12; i++) sum += (buf[i] *= multipliers[i]);
		sum = 11 - (sum % 11);
		if(sum >= 10) sum -= 10;
		sum += 2;
		if(sum >= 10) sum -= 10;
		if(sum != buf[12]) error = 1;
		return (error) ? false : true;
	} else {
		return false;
	}
}

/**
 * 신용카드 번호 체크
 * @param cardNumber 신용카드 번호
 * @returns {Boolean}
 * @requires cardNumber
 * @example checkCardNumber('3562-9717-5305-2006');
 * checkCardNumber('3562971753052006');	// 하이픈에 상관없이 됨
 */
function checkCardNumber(cardNumber) {
	var a, b, c, d = 0;
	var cn = cardNumber.replace(/-/gi, '');
	if (cn.length == 16){
		for (var i = 0; i < 16; i++) {
			a = i % 2 == 0 ? 2 : 1;
			b = a * cn.charAt(i);
			c = b > 9 ? b % 10 + 1 : b;
			d += c;
		}
		return d % 10 == 0 ? true : false;
	} else {
		return false;
	}
}


/**
 * 주민등록번호로 생일, 나이 등을 리턴한다.
 * @param number1 주민등록번호 앞자리
 * @param number2 주민등록번호 뒷자리
 * @param type 리턴 타입 (birthday: 생일, age: 나이)
 * @param birthType 리턴 타입이 생일일 경우 문자열 타입
 * @returns {String}
 * @requires number1, number2, type
 * @example getBirthInfo('840111', '1111111', 'birthday', 'YYYY-MM-DD');
 */
function getBirthInfo(number1, number2, type, birthType) {
	var info = null;
	var year = '19';
	var birthYear;
	var now = new Date();
	var thisYear = now.getFullYear();
	if (number2.charAt(0) == '3' || number2.charAt(0) == '4' || number2.charAt(0) == '7' || number2.charAt(0) == '8') {
		year = '20';
	} else if (number2.charAt(0) == '9' || number2.charAt(0) == '0') {
		year = '18';
	}
	if (type == 'birthday') {
		info = birthType.replace('YYYY', year + number1.substr(0, 2)).replace('YY', number1.substr(0, 2));
		info = info.replace('MM', number1.substr(2, 2)).replace('M', parseInt(number1.substr(2, 2), 10));
		info = info.replace('DD', number1.substr(4, 2)).replace('D', parseInt(number1.substr(4, 2), 10));
	} else if (type == 'age') {
		birthYear = year + number1.substr(0, 2);
		info = thisYear - Number(birthYear) + 1;
	}
	return info;
}

/**
 * 사업자 등록번호 체크
 * @param bizID 사업자 등록번호
 * @returns {Boolean}
 * @requires bizID
 * @example
 * checkBusinessNumber('220-81-55597');
 * checkBusinessNumber('2208155597');  // 하이픈에 상관없이 됨
 */
function checkBusinessNumber(bizID) {
	if (!bizID) return false;
	var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1);
	var tmpBizID, i, chkSum=0, c2, remander;
	bizID = bizID.replace(/-/gi, '');

	for (i=0; i<=7; i++) chkSum += checkID[i] * bizID.charAt(i);
	c2 = "0" + (checkID[8] * bizID.charAt(8));
	c2 = c2.substring(c2.length - 2, c2.length);
	chkSum += Math.floor(c2.charAt(0)) + Math.floor(c2.charAt(1));
	remander = (10 - (chkSum % 10)) % 10 ;

	if (Math.floor(bizID.charAt(9)) == remander) return true ; // OK!
		return false;
}

/**
 * 우편번호 찾기
 * @param obj element object
 * @requires obj
 * @example searchPost(this);
 */
function searchPost(obj) {
	jQuery('span.addressFlag').remove();
	jQuery(obj).after('<span class="addressFlag" style="display:none;" />');
	var post = popup(Config.path.post, 'post', 400, 400);
	return post;
}

/**
 * 우편번호 입력<br />
 * opener의 input element에 주소 정보를 입력
 * @param post1
 * @param post2
 * @param address
 * @requires post1, post2, address
 * @example insertPost('153', '701', '서울 금천구 시흥1동 금천구청');
 */
function insertPost(post1, post2, address) {
	if (jQuery('span.addressFlag', opener.document).size() == 1) {
		jQuery('span.addressFlag', opener.document).siblings('input:text').eq(0).val(post1);
		jQuery('span.addressFlag', opener.document).siblings('input:text').eq(1).val(post2);
		jQuery('span.addressFlag', opener.document).siblings('input:text').eq(2).val(address);
		jQuery('span.addressFlag', opener.document).siblings('input:text').eq(3).val('').focus();
		self.close();
	} else {
		alert('error!');
		return;
	}
}

/**
 * keyCode가 무시할수 있는 type이면 true를 리턴한다.<br />
 * 9 Tab, 16 Shift, 17 Ctrl, 18 Alt, 19 Pause Break, 20 Caps Lock<br />
 * 27 Esc, 33 Page Up, 34 Page Down, 35 End, 36 Home<br />
 * 37 Left Arrow, 38 Up Arrow, 39 Right Arrow, 40 Down Arrow<br />
 * 45 Insert, 46 Forward Delete, 144 Num Lock, 145 Scroll Lock
 * @param keyCode
 * @returns {Boolean}
 * @requires
 * @example isIgnoreKey(9);
 */
function isIgnoreKey(keyCode) {
	// 9 Tab, 16 Shift, 17 Ctrl, 18 Alt, 19 Pause Break, 20 Caps Lock
    // 27 Esc, 33 Page Up, 34 Page Down, 35 End, 36 Home
    // 37 Left Arrow, 38 Up Arrow, 39 Right Arrow, 40 Down Arrow
    // 45 Insert, 46 Forward Delete, 144 Num Lock, 145 Scroll Lock
	var kc = parseInt(keyCode, 10);
	var ignoreKeyCodes = [9,16,17,18,19,20,27,33,34,35,36,37,38,39,40,45,46,144,145,undefined];
	if ( jQuery.inArray(kc, ignoreKeyCodes) > -1 ) return true;
	else return false;
}




jQuery(function() {
	// 이미지 롤 오버
	if (jQuery('._rollOver').size() > 0) {
		jQuery('._rollOver').mouseover(function() {
			if(jQuery(this).attr('src').indexOf('_on.') == '-1') {
				jQuery(this).attr('src', jQuery(this).attr('src').replace('.', '_on.'));
			}
		}).mouseout(function() {
			jQuery(this).attr('src', jQuery(this).attr('src').replace('_on.', '.'));
		});
	}


	// label image 클릭시 radio, checkbox 체크
	jQuery('label img').click( function() {
		var forName = jQuery(this).parent().attr('for');
		if (jQuery('#'+forName).is(':checkbox'))	{
			if (Browser.isIe()) {
				if (jQuery('#'+forName).attr('checked')) jQuery('#'+forName).trigger('click').attr('checked', false);
				else jQuery('#'+forName).trigger('click').attr('checked', true);
			} else {
				if (jQuery('#'+forName).attr('checked')) jQuery('#'+forName).trigger('click').attr('checked', true);
				else jQuery('#'+forName).trigger('click').attr('checked', false);
			}
		} else {
			jQuery('#'+forName).trigger('click');
		}
	});

	// 폼 리스트 디자인
	if (Config.listForm.cssName && jQuery('table' + Config.listForm.cssName + ' td input:checkbox').size() > 0) {
		jQuery('table' + Config.listForm.cssName + ' td select').bind('change', function() {
			jQuery(this).closest('tr').css('backgroundColor', Config.listForm.check_color).find('input:checkbox').attr('checked', true);
		});
		jQuery('table' + Config.listForm.cssName + ' td').delegate('input:text, input:password', 'keypress', function(event) {
			if (isIgnoreKey(event.which)) return;
			jQuery(this).closest('tr').css('backgroundColor', Config.listForm.check_color).find('input:checkbox').attr('checked', true);
		}).delegate('input:checkbox, input:radio', 'click', function(event) {
			if (jQuery(this).attr('checked')) {
				jQuery(this).closest('tr').css('backgroundColor', Config.listForm.check_color);
			} else {
				jQuery(this).closest('tr').css('backgroundColor', Config.listForm.defaultColor);
			}
		});
		jQuery('table' + Config.listForm.cssName + ' th').delegate('input:checkbox', 'click', function(event) {
			if (jQuery(this).attr('checked')) {
				jQuery(this).closest('table').find('tr').has('td').css('backgroundColor', Config.listForm.check_color);
			} else {
				jQuery(this).closest('table').find('tr').has('td').css('backgroundColor', Config.listForm.defaultColor);
			}
		});
	}

	// 전체 체크 (checkAll)
	jQuery(':checkbox[id^=check]').click(function() {
		var idName = jQuery(this).attr('id');
		if (jQuery(this).attr('checked')) jQuery(':checkbox.'+idName).attr('checked', true);
		else jQuery(':checkbox.'+idName).attr('checked', false);
	});
	jQuery(':checkbox[class^=check]').click(function() {
		var className = jQuery(this).attr('class');
		if (!jQuery(this).attr('checked')) jQuery(':checkbox#'+className).attr('checked', false);
	});

	// 자동 탭
	jQuery('input.autoTab').bind('keydown keyup', function(event) {
	    if (isIgnoreKey(event.which)) return;
	    if ( event.which == 8 && event.type == 'keydown' ) return;
	    var $this = jQuery(this);
	    var currentLength = $this.val().length;
	    var maximumLength = $this.attr('maxlength');

	    if ( event.which == 8 && currentLength == 0) { // 8: backspace
	        $this.prev().focus();
	    }

	    if ( currentLength == maximumLength && event.type == 'keyup' ) {
	        $this.next().select().focus();
	    }
	});

	// 키워드 TODO 키워드
	if (jQuery('form input[name=keyword]').size() > 0) {
		jQuery('form input[name=keyword]').focus();
	} else if (jQuery('form input[name=kw]').size() > 0) {
		jQuery('form input[name=kw]').focus();
	} else if (jQuery('form input:text').size() > 0) {
		jQuery('form input:eq(0)').focus();
	}

	// 숫자만 입력
	jQuery('._number').bind('keypress', function(event) {
		if (!(event.which && ((event.which  > 47 && event.which  < 58) || event.which == 8 || event.which == 13 || event.which == 9))) {		// backspace, enter 추가
			event.preventDefault();
		}
	});
});
