0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload", b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&& !F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&& l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;Ha";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"), k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false, scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent= false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom= 1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="
";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display= "none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h= c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando); else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h
t -1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one"; if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h =0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true}, attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&& b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0}; c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem, arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid= d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+ c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h =0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== 8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k=== "click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+ d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f -1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired= B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type=== "file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]=== 0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h 0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); (function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3]; break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr, q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h= l;g.sort(w);if(h)for(var i=1;i 0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p ":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n, m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]- 0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n =0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]]; if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m, g);else if(typeof g.length==="number")for(var p=g.length;n";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g); n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&& function(){var g=k,i=t.createElement("div");i.innerHTML="";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F|| p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g= t.createElement("div");g.innerHTML="";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition? function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h 0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e -1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h= h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e -1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context): c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a, 2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a, b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&& e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1, ""],legend:[1,""],thead:[1," ","
"],tr:[2,"","
"],td:[3,""],col:[2,"
"," "],area:[1,""],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div
"," ",""];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null; else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>$2>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append", prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f 0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument|| b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===" "&&!x?r.childNodes:[];for(o=k.length- 1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script")))); d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i, jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true, zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b), h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b); if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f= d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left; e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/This is a p * @before $.metadata.setType("elem", "script") * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" * @desc Reads metadata from a nested script element * * @param String type The encoding type * @param String name The name of the attribute to be used to get metadata (optional) * @cat Plugins/Metadata * @descr Sets the type of encoding to be used when loading metadata for the first time * @type undefined * @see metadata() */ (function($) { $.extend({ metadata : { defaults : { type: 'class', name: 'metadata', cre: /({.*})/, single: 'metadata' }, setType: function( type, name ){ this.defaults.type = type; this.defaults.name = name; }, get: function( elem, opts ){ var settings = $.extend({},this.defaults,opts); // check for empty string in single property if ( !settings.single.length ) settings.single = 'metadata'; var data = $.data(elem, settings.single); // returned cached data if it already exists if ( data ) return data; data = "{}"; if ( settings.type == "class" ) { var m = settings.cre.exec( elem.className ); if ( m ) data = m[1]; } else if ( settings.type == "elem" ) { if( !elem.getElementsByTagName ) return undefined; var e = elem.getElementsByTagName(settings.name); if ( e.length ) data = $.trim(e[0].innerHTML); } else if ( elem.getAttribute != undefined ) { var attr = elem.getAttribute( settings.name ); if ( attr ) data = attr; } if ( data.indexOf( '{' ) <0 ) data = "{" + data + "}"; data = eval("(" + data + ")"); $.data( elem, settings.single, data ); return data; } } }); /** * Returns the metadata object for the first member of the jQuery object. * * @name metadata * @descr Returns element's metadata object * @param Object opts An object contianing settings to override the defaults * @type jQuery * @cat Plugins/Metadata */ $.fn.metadata = function( opts ){ return $.metadata.get( this[0], opts ); }; })(jQuery); /** * CONTRIBUTE * * MemberAsyncSaveId * * @package : Member * @author : 이창훈 * @version : 1.0 * @date : 2015-11-03 * * */ var EC_MEMBER_ASYNC_SAVE_ID = (function($){ /** * opiton * @var object */ var options = { memberSaveIdControllerApiUrl : '/api/member/LoginSaveid' ,memberSaveIdCookieString : 'ec_cafe24_member_id_' + EC_SDE_SHOP_NUM }; /** * controller */ var $controller = { /** * mode * @var string */ sMode : 'logoff', /** * form id * @var string */ sFormId : '', /** * encryt member_id * @var string */ sEncrytMemberId : '', /** * xans login module class name * @var string */ sloginModuleClassName : '.xans-member-login, .xans-layout-login', /** * xans login modules * @var object */ $loginModules : '', /** * init */ init : function(){ _super = this; _super.$loginModules = $(document).find(_super.sloginModuleClassName); }, /** * progress */ run : function(){ if (this.sMode == 'logoff') { _super.setSaveIdLogoffUserInfo(); } else { _super.setSaveIdLoginUserInfo(); } }, /** * validate */ validate : function(){ if (_super.$loginModules.size() < 1) { return false; } return true; }, /** * set logoff */ setSaveIdLogoffUserInfo : function(){ if (_super.validate() === false) { return; } var sUserMemberIdCookieVar = $.cookie(options.memberSaveIdCookieString) || ''; var getUrlParamValue = function(sParam){ sParam = sParam.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var sRegex = "[\\?&]" + sParam + "=([^]*)"; var oRegex = new RegExp(sRegex); var aResults = oRegex.exec(window.location.href); return (aResults) ? aResults[1] : ''; }; var reset = function(){ $.each(_super.$loginModules.find('input[name="member_id"]'), function(){ $(this).attr('value', getUrlParamValue('member_id')); }); $.each(_super.$loginModules.find('input[name="check_save_id"]'), function(){ $(this).attr('checked', false); }); }; reset(); $.ajax({ url: options.memberSaveIdControllerApiUrl, cache: false, type: 'POST', dataType: 'json', async: false, data: '&convert_data=' + encodeURIComponent(sUserMemberIdCookieVar) + '&mode=logoff', success: function(response){ switch (response.code) { case '0001' : $.each(_super.$loginModules.find('input[name="member_id"]'), function(){ $(this).attr('value', getUrlParamValue('member_id') || response.data.convert_str); }); $.each(_super.$loginModules.find('input[name="check_save_id"]'), function(){ $(this).attr('checked', true); }); break; case '9999' : $.each(_super.$loginModules.find('input[name="check_save_id"]'), function(){ $(this).remove(); }); $.each(_super.$loginModules.find('label[for^="check_save_id"]'), function(){ $(this).remove(); }); break; default : reset(); break; } } }); }, /** * set login */ setSaveIdLoginUserInfo : function(){ if (_super.validate() === false) { return; } var sMemberId = $('#' + _super.sFormId).find('input[name="member_id"]').val(); if (sMemberId != '') { $.ajax({ url: options.memberSaveIdControllerApiUrl, cache: false, type: 'POST', dataType: 'json', async: false, data: '&convert_data=' + sMemberId + '&mode=login', success: function(response){ if (response.code == '0001') { if (response.data.convert_str == 'undefined') { return; } _super.sEncrytMemberId = response.data.convert_str; var iCheckSaveIdCount = 0; $.each($('input[name="check_save_id"]'), function(){ if ($(this).is(':checked') === true) { $controller.constructSaveId(); iCheckSaveIdCount++; return false; } }); if (iCheckSaveIdCount == false) { $controller.destructSaveId(); } } } }); } }, /** * create save id cookie */ constructSaveId : function(){ $.cookie(options.memberSaveIdCookieString, _super.sEncrytMemberId, {expires: 365, path: '/'}); }, /** * remove save id cookie */ destructSaveId : function(){ $.cookie(options.memberSaveIdCookieString, null, {path: '/'}); } }; /** * run */ return function(m, f){ if (f != null) { $controller.sFormId = f; } $controller.sMode = m; $controller.init(); $controller.run(); }; })($); EC_MEMBER_ASYNC_SAVE_ID('logoff'); var MemberAction = {}; MemberAction.login = function(formId) { if (MemberAction.isSubmit != true) { var result = FwValidator.inspection(formId); var form = $('#' + formId); if (result.passed == true) { var bResult = false; var sIsAdult = $('#is_adult_certification').val(); if (sIsAdult == 'T'){ $('').insertAfter("#returnUrl"); } try { setLoginKey(form); } catch(e) {} if (mobileWeb != true) { $.ajax({ type: 'POST', url: '/exec/front/Member/CheckCaptcha/', dataType: 'json', async: false, success: function(response){ bResult = true; try { if (response['captcha_layer'] == true) { // 로그인 버튼 클릭 후, 한번더 로그인을 클릭 했을 경우, 기존의 layer 삭제 if ($("#captcha_iframe").length > 0) { $("#captcha_iframe").hide(); } MemberAction.layerpopup(); } else { form.submit(); MemberAction.isSubmit = true; } } catch(e) {} } }); } if (bResult == false) { form.submit(); MemberAction.isSubmit = true; } } } return false; }; MemberAction.layerpopup = function() { if (mobileWeb == true) { var body_height = $('body').height(); var source = '
' + ''; $('body').append(source); } else { var oElement = document.createElement('div'); oElement.id = 'captcha_popup'; oElement.style.position = 'absolute'; oElement.style.top = Math.max(0, (($(window).height() - 550) / 2) + $(window).scrollTop()) + 'px'; oElement.style.left = Math.max(0, (($(window).width() - 450) / 2) + $(window).scrollLeft()) + 'px'; oElement.style.zIndex = '99'; oElement.innerHTML = ''; document.body.appendChild(oElement); } }; MemberAction.CaptchaLogin = function() { var result = true; if ($("#member_id").val() == '') { alert(__('아이디를 입력해 주세요')); $("#member_id").focus(); result = false; return false; } if ($("#member_passwd").val() == '') { alert(__('비밀번호를 입력해 주세요')); $("#member_passwd").focus(); result = false; return false; } if ($("#captcha_text").val() == '' || $("#captcha_text").val() == '자동입력 방지문자') { alert(__('자동입력 방지문자를 입력해 주세요')); $("#captcha_text").val(''); $("#captcha_text").focus(); result = false; return false; } if (result == true) { var sIsAdult = $(window.parent.document).find("#is_adult_certification").val(); if (sIsAdult == 'T'){ $('').insertAfter("#returnUrl"); } $('').insertAfter("#returnUrl"); // parent.replace 하기 위해 $('#returnUrl').val($(window.parent.document).find("#returnUrl").val()); // 로그인 성공 후 페이지 $('#forbidIpUrl').val($(window.parent.document).find("#forbidIpUrl").val()); $('#certificationUrl').val($(window.parent.document).find("#certificationUrl").val()); this.submit(); var doc = window.parent.document; var ifr = doc.getElementById('captcha_iframe'); ifr.parentNode.removeChild(ifr); } return false; } MemberAction.CaptchaClose = function() { $(window.parent.document.body).find('#captcha_iframe').hide(); } MemberAction.logout = function(formId) { $('#' + formId).submit(); }; MemberAction.FormActionDynamic = function(actionPath) { $.post(actionPath, function(response) { if (response.result == true) { alert(__('탈퇴 성공')); history.back(); } else { alert(__('탈퇴 실패')); } }); }; //로그인상태유지 체크박스 confirm MemberAction.confirmLoginKeeping = function(targetThis) { if (targetThis.checked == false) { return false; } if (!confirm(__('로그인 상태를 유지하시겠습니까?\n타인이 개인정보를 도용할 수 있으니,\n주의하시기 바랍니다.'))) { targetThis.checked = false; } }; //연동로그인은 몰 > 서비스로그인 > 몰 이런 리다이렉트가 생기다보니, 쿠키로 세팅하여 로그인유지 확인함 MemberAction.setLoginKeepFlag = function(sUseFlag) { var date = new Date(); var sCookieName = 'use_login_keep_' + EC_SDE_SHOP_NUM; date.setTime(date.getTime() + (1 * 60 * 1000)); document.cookie = sCookieName + "=" + sUseFlag + "; path=/; expires=" + date.toGMTString() + ";"; }; MemberAction.setLoginKeepBind = function() { if ($('input[name="use_login_keeping"]').is(':checked') === true) { MemberAction.setLoginKeepFlag('T'); } else { MemberAction.setLoginKeepFlag('F'); } }; MemberAction.plusAppRequestSet = function () { var $useLoginKeep = $('input[name="use_login_keeping"]'); $useLoginKeep.attr('checked', true); $useLoginKeep.change(function(){ MemberAction.setLoginKeepBind(); }); }; //플러스앱에서 SNS로그인 요청을할때 MemberAction.plusAppSnsLogin = function () { var sSnsLoginType = location.search.split('sns_login_request=')[1] || ''; var oXansMemberLoginTags = $('.xans-member-login').find('a'); if (typeof sSnsLoginType !== 'undefined') { if (sSnsLoginType == 'facebook') { var sFacebookFuncRegex = /FBLogin\(\'member_form_+([0-9])+\'\)\;/; var oFacebookFuncCheckInterval = setInterval(function(){ if (typeof FB !== 'undefined') { $.each(oXansMemberLoginTags, function(){ var sOuterHtml = $(this)[0].outerHTML; if (sFacebookFuncRegex.test(sOuterHtml) === true) { $(this)[0].onclick.call(); return false; } }); clearInterval(oFacebookFuncCheckInterval); } }, 1000); } } }; // 플러스앱접근인지 확인 var isPlusAppAccess = function(){ if (navigator.userAgent.indexOf('Cafe24Plus') !== -1 && (mobileWeb === true || top.mobileWeb === true)) { return true; } return false; }; $(document).ready(function(){ // 플러스앱전용 if (isPlusAppAccess() === true) { MemberAction.plusAppRequestSet(); MemberAction.plusAppSnsLogin(); } //enter key $("input[name='member_id'], input[name='member_passwd']").each(function(){ $(this).bind('keyup', function(e){ if ($(this).parents('form').attr('id') == 'joinForm') return; if (e.which == '13') { var sFormId = $(this).parents('form').attr('id'); MemberAction.login(sFormId); } }); }); // 모바일일경우 input 박스에 가이드해주기 try { if (window.location.hostname.substr(0, 2) == 'm.' || window.location.hostname.substr(0, 12) == 'mobile--shop' || window.location.hostname.substr(0, 11) == 'skin-mobile') { $('#order_name').attr('placeholder', __('주문자명')); $('#order_name').attr('title', __('주문자명')); $('#order_id1').attr('placeholder', __('주문번호1')); $('#order_id1').attr('title', __('주문번호1')); $('#order_id2').attr('placeholder', __('주문번호2')); $('#order_id2').attr('title', __('주문번호2')); $('#order_password').attr('placeholder', __('비회원 주문 패스워드')); $('#order_password').attr('title', __('비회원 주문 패스워드')); } } catch (e) { } // 알리페이지 로그인 $("#alipayLogin").click(function () { var returnUrl = $('#returnUrl').val(); var url = '/exec/front/member/alipaylogin?returnUrl='+returnUrl; var option = 'menubar=no, toolbar=no, location=no, status=no, scrollbars=yes, resizable=yes'; window.open(url,"_blank", option); }); }); /** * 바로구매하기/장바구니담기 Action - 로그인하지 않았을 경우 */ function check_action_nologin() { alert(__('회원만 구매 가능합니다. 비회원인 경우 회원가입 후 이용하여 주세요.')); return false; } /** * 암호화 시간 input 설정 */ function setLoginKey(sFormId) { $.ajax({ type: 'POST', cache: false, async: false, dataType: 'json', url: '/exec/front/Member/loginKey', success: function (oRes) { if (oRes.sIsPass != 'T') { return; } //var sMemberId = sFormId.find("#member_id").val(); // 암호화 된 값을 받을 input_hidden 생성 $("").attr({ type: "hidden", name: "sLoginKey", id: "sLoginKey", value: oRes.sKey }).appendTo(sFormId); } }); } // 앱에서 로그인유지 체크하려는데, 같은 js가 계속 호출되는 문제로 해당파일추가 $(document).ready(function() { // 플러스앱전용 if (isPlusAppAccess() === true) { MemberAction.setLoginKeepBind(); } }); var memberSns = { sFormId : '', oUserInfo : [], sProvider : '', oAuth2EncData : [], sProviderTitle : '', accessToken : '' } memberSns.snsAgreementLayer = function (sProviderTitle) { $('#sns_name').html(sProviderTitle); // 부모창에 중복으로 있으면 안되는 내용에 대해서 0 초과 엘리먼트들을 제거해준다 $(parent.top.document).contents().find('div[id=mCafe24SnsAgree]:gt(0)').remove(); setTimeout(function () { memberSns.resizeSnsLayer(); }, 500); // SNS로 가입시 연락처 기본값을 국가코드를 기반으로 설정해준다 var aTelInfo = []; aTelInfo['ja_JP'] = '81'; aTelInfo['en_US'] = '1'; aTelInfo['es_ES'] = '34'; aTelInfo['pt_PT'] = '351'; aTelInfo['zh_CN'] = '86'; aTelInfo['zh_TW'] = '886'; aTelInfo['ko_KR'] = '82'; var sTelCode = aTelInfo[SHOP.getLanguage()]; $('#mCafe24SnsAgree select[id=phone1] option[value='+sTelCode+']').attr('selected', true); $('#mCafe24SnsAgree select[id=mobile1] option[value='+sTelCode+']').attr('selected', true); $('#sns_name').html(sProviderTitle); if (mobileWeb == true) { $(top.document.body).addClass('eMobilePopup'); } $('#agreementClick').click(function(){ // SNS 용 추가입력정보 필수체크 위해 수동 실행해준다 // essn_array 필수 input 배열 이름 정보 호출 var result = true; var essn_array = []; set_essn(); for (key in essn_array) { // sns 에서 사용하는 추가입력정보가 필수로 설정되어진 경우만 실행한다 if (jQuery.inArray(essn_array[key], ['is_birthday', 'region', 'sex', 'phone', 'cell']) >= 0) { result = obj_checkessn.switch_action(essn_array[key]); if (result == false ) return false; } } // 입력값 체크용으로만 join 진행 $('#is_use_checking_join_info').val('T'); // SNS용으로 셋팅후 회원가입시 필요 js체크 실행 memberJoinAction(); }); }; // sns 연동후 회원가입 Layer 노출시 sns 연동으로 가져온 user 기본정보를 되도록 layer에 부려준다 memberSns.snsDefaultUserInfo = function (userInfo) { var oJson = JSON.parse((userInfo)); userInfo = oJson.aUserInfo; // 페이스북 처럼 이메일 값만 넘어오는 경우 email1,2로 나누어 담아준다 var aEmail = []; if (userInfo.email) { aEmail = userInfo.email.split('@'); userInfo.email1 = aEmail[0]; userInfo.email2 = aEmail[1]; } if (userInfo.name) { var sSnsName = userInfo.name.replace(/\+/g, " "); if ($("#sns_join input[name=name]").length > 0) { $("#sns_join input[name=name]").val(sSnsName); } else { if ($('#snsNameContents') != undefined) { $('#snsNameContents').html(sSnsName); } } } if (userInfo.email1) $("#sns_join input[name=email1]").val(userInfo.email1); if (userInfo.email2) $("#sns_join input[name=email2]").val(userInfo.email2); if (userInfo.email2) $("#sns_join #email3 option[value=etc]").attr('selected','selected'); // 이메일 입력란이 1개만 있는경우 (해외몰) if (!$("#sns_join input[name=email2]").attr('name') && $("#sns_join input[name=email1]").attr('name')) { if (userInfo.email1 && userInfo.email2) $("#sns_join input[name=email1]").val(userInfo.email1 + '@' + userInfo.email2); } } /** * iframe 페이지 로딩이 느릴 경우 resize 제대로 안되는 문제 ==> iframe onload 시 호출 * 레이어를 화면 중앙에 위치 하도록 * (2014.07.21 by wcchoi) */ memberSns.resizeSnsLayer = function() { var height = $(parent.ifrm_sns.document).contents().find('#mCafe24SnsAgree').height(); var width = $(parent.ifrm_sns.document).contents().find('#mCafe24SnsAgree').width(); if (height > 0 && width > 0) { $(parent.top.document).contents().find('#ifrm_sns').height(height + 2); $(parent.top.document).contents().find('#ifrm_sns').width(width); } } // sns 가입 정보 취함 memberSns.joinProc = function() { var aOauth2EncDataArray = []; aOauth2EncDataArray = JSON.parse(JSON.stringify(top.memberSns.oUserInfo)); memberSns.joinProcStep2(aOauth2EncDataArray); } // sns 가입,로그인 액션 form 암호화 발송 처리 memberSns.joinProcStep2 = function(aOauth2EncDataArray) { // 공통 input 값들에 대해 배열 변수에 담아준다 var sOauth2EncDataArray = snsOauth2EncDataSet(aOauth2EncDataArray); $("input[name='sOauth2EncData']").val(encodeURIComponent(sOauth2EncDataArray)); AgreementLayer.EncryptSubmit(); $('#'+top.memberSns.sFormId).attr('target', 'ifrm_temp'); } /** * sns AgreementLayer 에서 네이버,페이스북 공통 처리되는 기능 펑션 */ function openAgreementLayer(sProviderCode, oAuth2EncData, sProviderTitle) { oAuth2EncData = decodeURIComponent(oAuth2EncData); top.memberSns.sProvider = sProviderCode; top.memberSns.oAuth2EncData = oAuth2EncData; top.memberSns.sProviderTitle = sProviderTitle; AuthSSLManager.weave({ 'auth_mode': 'decryptClient', 'auth_string': oAuth2EncData, 'auth_callbackName': 'openAgreementLayerStep2' }); } function openAgreementLayerStep2(sOutput) { var sOutput = decodeURIComponent(sOutput); if ( AuthSSLManager.isError(sOutput) == true ) { return; } var userInfo = AuthSSLManager.unserialize(sOutput); // 한글 경우 rawurlencode 하여 한번더 decodeURIComponent 처리를 해준다 userInfo.sEncryptInfo = decodeURIComponent(userInfo.sEncryptInfo); // sns 유저 기본 정보 노출 top.memberSns.oUserInfo = userInfo; // sns 를 통한 로그인 시도시 처리 if ($('#mCafe24SnsAgree') && $('#joinForm')) { // sns AgreementLayer 에서 네이버,페이스북 공통 처리되는 기능 펑션 memberSns.snsAgreementLayer(top.memberSns.sProviderTitle); memberSns.snsDefaultUserInfo(userInfo.sEncryptInfo); } else { $('#agreementClick').click(function(){ AgreementLayer.EncryptSubmit(); }); } $(parent.top.document).contents().find("input[name='sOauth2EncData']").val(top.memberSns.oAuth2EncData); $(parent.top.document).contents().find('#mCafe24SnsAgree').css('display', 'block'); $('#mCafe24SnsAgree').css('display', 'block'); } function snsOauth2EncDataSet(aOauth2EncDataArray) { aOauth2EncDataArray = JSON.parse(aOauth2EncDataArray['sEncryptInfo']); if ($("#terms_information")) { var terms_information = ($("#terms_information").attr("checked")) ? '1' : '0'; aOauth2EncDataArray['aUserInfo']['fb_terms_information'] = terms_information; } if ($("#terms_consignment")) { var terms_consignment = ($("#terms_consignment").attr("checked")) ? '1' : '0'; aOauth2EncDataArray['aUserInfo']['fb_terms_consignment'] = terms_consignment; } // Naver등 FaceBook 이외 셋팅 var terms_information = ($("#terms_information").attr("checked")) ? 'T' : 'F'; var terms_consignment = ($("#terms_consignment").attr("checked")) ? 'T' : 'F'; aOauth2EncDataArray['aUserInfo']['terms_information'] = terms_information; aOauth2EncDataArray['aUserInfo']['terms_consignment'] = terms_consignment; // 공통 INPUT 셋팅 $("#sns_join,#form_agreement").find("input[type=text]").each(function(){ aOauth2EncDataArray['aUserInfo'][$(this).attr('name')] = $(this).val(); aOauth2EncDataArray['aUserInfo'][$(this).attr('id')] = $(this).val(); }); $("#sns_join,#form_agreement").find("select").each(function(){ aOauth2EncDataArray['aUserInfo'][$(this).attr('name')] = $(this).val(); aOauth2EncDataArray['aUserInfo'][$(this).attr('id')] = $(this).val(); }); $("#sns_join,#form_agreement").find("input[type=radio]:checked").each(function(){ aOauth2EncDataArray['aUserInfo'][$(this).attr('name')] = $(this).val(); aOauth2EncDataArray['aUserInfo'][$(this).attr('id')] = $(this).val(); }); $("#sns_join,#form_agreement").find("input[type=checkbox]").each(function(){ aOauth2EncDataArray['aUserInfo'][$(this).attr('name')] = ($(this).attr('checked')) ? 'T' : 'F'; aOauth2EncDataArray['aUserInfo'][$(this).attr('id')] = ($(this).attr('checked')) ? 'T' : 'F'; }); return JSON.stringify(aOauth2EncDataArray); } /** * FwValidator * * @package jquery * @subpackage validator */ var FwValidator = { /** * 디버그 모드 */ DEBUG_MODE : false, /** * 결과 코드 */ CODE_SUCCESS : true, CODE_FAIL : false, /** * 어트리뷰트 명 */ ATTR_FILTER : 'fw-filter', ATTR_MSG : 'fw-msg', ATTR_LABEL : 'fw-label', ATTR_FIREON : 'fw-fireon', ATTR_ALONE : 'fw-alone', /** * 응답객체들 */ responses : {}, /** * 엘리먼트별 필수 입력 에러 메세지 */ requireMsgs : {}, /** * 엘리먼트의 특정 필터별 에러 메세지 */ elmFilterMsgs : {}, /** * Validator 기본 이벤트 등록 */ bind : function(formId, expand) { var self = this; var formInfo = this.Helper.getFormInfo(formId); if (formInfo === false) { alert('The form does not exist - bind'); return false; } var elmForm = formInfo.instance; var Response = this._response(formId); this._fireon(formId, elmForm, Response); this._submit(formId, elmForm, expand); return true; }, /** * Validator 검사 진행 * * @param string formId * @return object | false */ inspection : function(formId, expand) { expand = (expand === true) ? true : false; var self = this; var Response = this._response(formId); if (Response === false) { alert('The form does not exist - inspection'); return false; } if (Response.elmsTarget.length == 0) { return this.Helper.getResult(Response, this.CODE_SUCCESS); } Response.elmsTarget.each(function(){ self._execute(Response, this); }); if (Response.elmsCurrErrorField.length > 0) { if (expand !== true) { this.Handler.errorHandler(Response.elmsCurrErrorField[0]); } else { this.Handler.errorHandlerByExapnd(Response); } return Response.elmsCurrErrorField[0]; } return this.Helper.getResult(Response, this.CODE_SUCCESS); }, /** * submit 이벤트 등록 * * @param string formId * @param object elmForm */ _submit : function(formId, elmForm, expand) { var self = this; elmForm.unbind('submit'); elmForm.bind('submit', function(){ var result = false; try{ result = self.inspection(formId, expand); }catch(e){ alert(e); return false; } if(!result || result.passed === self.CODE_FAIL){ return false; }; var callback = self._beforeSubmit(elmForm); return callback !== false ? true : false; }); }, /** * fireon 이벤트 등록 * * @param string formId * @param object elmForm * @param FwValidator.Response Response */ _fireon : function(formId, elmForm, Response) { var self = this; var formInfo = this.Helper.getFormInfo(formId); $(formInfo.selector).find('*['+this.ATTR_FILTER+']['+this.ATTR_FIREON+']').each(function(){ var elm = $(this); var evtName = $.trim(elm.attr(self.ATTR_FIREON)); var elmMsg = ''; elm.unbind(evtName); elm.bind(evtName, function(){ var result = self._execute(Response, this); var targetField = Response.elmCurrField; //에러 메세지가 출력되 있다면 일단 지우고 체킹을 시작한다. if(typeof elmMsg == 'object'){ elmMsg.remove(); } if(result > -1){ elmMsg = self.Handler.errorHandlerByFireon(Response.elmsCurrErrorField[result]); }else{ self.Handler.successHandlerByFireon(self.Helper.getResult(Response, self.CODE_FAIL)); } }); }); }, /** * Response 객체 생성 * * @param string formId * @return FwValidator.Response | false */ _response : function(formId) { var formInfo = this.Helper.getFormInfo(formId); if (formInfo === false) { alert('The form does not exist - find'); return false; } var elmForm = formInfo.instance; var elmsTarget = $(formInfo.selector).find('*[' + this.ATTR_FILTER + ']'); this.responses[formId] = new FwValidator.Response(); this.responses[formId].formId = formId; this.responses[formId].elmForm = elmForm; this.responses[formId].elmsTarget = elmsTarget; return this.responses[formId]; }, /** * BeforeExecute 콜백함수 실행 * * @param FwValidator.Response Response */ _beforeExecute : function(Response) { var count = this.Handler.beforeExecute.length; if (count == 0) return; for (var i in this.Handler.beforeExecute) { this.Handler.beforeExecute[i].call(this, Response); } }, /** * BeforeSubmit 콜백함수 실행 * * @param object elmForm (jquery 셀렉터 문법으로 찾아낸 폼 객체) */ _beforeSubmit : function(elmForm) { if(typeof this.Handler.beforeSubmit != 'function') return true; return this.Handler.beforeSubmit.call(this, elmForm); }, /** * 엘리먼트별 유효성 검사 실행 * * @param FwValidator.Response Response * @param htmlElement elmTarget * @return int(에러가 발생한 elmCurrField 의 인덱스값) | -1(성공) */ _execute : function(Response, elmTarget) { var RESULT_SUCCESS = -1; Response.elmCurrField = $(elmTarget); Response.elmCurrLabel = Response.elmCurrField.attr(this.ATTR_LABEL); Response.elmCurrFieldType = this.Helper.getElmType(Response.elmCurrField); Response.elmCurrFieldDisabled = elmTarget.disabled; Response.elmCurrValue = this.Helper.getValue(Response.formId, Response.elmCurrField); Response.elmCurrErrorMsg = Response.elmCurrField.attr(this.ATTR_MSG); //_beforeExecute 콜백함수 실행 this._beforeExecute(Response); //필드가 disabled 일 경우는 체크하지 않음. if (Response.elmCurrFieldDisabled === true) { return RESULT_SUCCESS; } var filter = $.trim( Response.elmCurrField.attr(this.ATTR_FILTER) ); if (filter == '') { return RESULT_SUCCESS; } //is로 시작하지 않는것들은 정규표현식으로 간주 if (/^is/i.test(filter)) { var filters = filter.split('&'); var count = filters.length; //필수항목이 아닌경우 빈값이 들어왔을경우는 유효성 체크를 통과시킴 if ((/isFill/i.test(filter) === false) && !Response.elmCurrValue) { return RESULT_SUCCESS; } for (var i=0; i < count; ++i) { var filter = filters[i]; var param = ''; var filtersInfo = this.Helper.getFilterInfo(filter); filter = Response.elmCurrFilter = filtersInfo.id; param = filtersInfo.param; //필수 입력 필터의 경우 항목관리에서 사용자가 메세지를 직접 지정하는 부분이 있어 이렇게 처리 if (filter == 'isFill') { Response.elmCurrValue = $.trim(Response.elmCurrValue); Response.elmCurrErrorMsg = this.requireMsgs[elmTarget.id] ? this.requireMsgs[elmTarget.id] : this.msgs['isFill']; } else { var msg = Response.elmCurrField.attr(this.ATTR_MSG); if (msg) { Response.elmCurrErrorMsg = msg; } else if (this.Helper.getElmFilterMsg(elmTarget.id, filter)) { Response.elmCurrErrorMsg = this.Helper.getElmFilterMsg(elmTarget.id, filter); } else { Response.elmCurrErrorMsg = this.msgs[filter]; } } //존재하지 않는 필터인 경우 에러코드 반환 if(this.Filter[filter] === undefined){ Response.elmCurrErrorMsg = this.msgs['notMethod']; var result = this.Helper.getResult(Response, this.CODE_FAIL); Response.elmsCurrErrorField.push(result); return Response.elmsCurrErrorField.length - 1; } //필터 실행 var result = this.Filter[filter](Response, param); if (result == undefined || result.passed === this.CODE_FAIL) { Response.elmsCurrErrorField.push(result); //Debug를 위해 넣어둔 코드(확장형 필터를 잘못 등록해서 return값이 없는 경우를 체크하기 위함) if (result == undefined) { alert('Extension Filter Return error - ' + filter); } return Response.elmsCurrErrorField.length - 1; } } } else { var msg = Response.elmCurrErrorMsg; Response.elmCurrErrorMsg = msg ? msg : this.msgs['isRegex']; var result = this.Filter.isRegex(Response, filter); if(result.passed === this.CODE_FAIL){ Response.elmsCurrErrorField.push(result); return Response.elmsCurrErrorField.length - 1; } } return RESULT_SUCCESS; } }; /** * FwValidator.Response * * @package jquery * @subpackage validator */ FwValidator.Response = function() { this.formId = null; this.elmForm = null; this.elmsTarget = null; this.elmsCurrErrorField = []; this.elmCurrField = null; this.elmCurrFieldType = null; this.elmCurrFieldDisabled = null; this.elmCurrLabel = null; this.elmCurrValue = null; this.elmCurrFilter = null; this.elmCurrErrorMsg = null; this.requireMsgs = {}; }; /** * FwValidator.Helper * * @package jquery * @subpackage validator */ FwValidator.Helper = { parent : FwValidator, /** * 메세지 엘리먼트의 아이디 prefix */ msgIdPrefix : 'msg_', /** * 메세지 엘리먼트의 클래스 명 prefix */ msgClassNamePrefix : 'msg_error_mark_', /** * 결과 반환 */ getResult : function(Response, code, param) { //특수 파라미터 정보(특정 필터에서만 사용함) param = param != undefined ? param : {}; var msg = ''; if (code === this.parent.CODE_FAIL) { try { msg = Response.elmCurrErrorMsg.replace(/\{label\}/i, Response.elmCurrLabel); } catch(e) { msg = 'No Message'; } } else { msg = 'success'; } var result = {}; result.passed = code; result.formid = Response.formId; result.msg = msg; result.param = param; try { result.element = Response.elmCurrField; result.elmid = Response.elmCurrField.attr('id'); result.filter = Response.elmCurrFilter; } catch(e) {} return result; }, /** * 필터 정보 반환(필터이름, 파라미터) */ getFilterInfo : function(filter) { var matches = filter.match(/(is[a-z]*)((?:\[.*?\])*)/i); return { id : matches[1], param : this.getFilterParams(matches[2]) }; }, /** * 필터의 파라미터 스트링 파싱 * isFill[a=1][b=1][c=1] 이런식의 멀티 파라미터가 지정되어 있는 경우는 배열로 반환함 * isFill[a=1] 단일 파라미터는 파라미터로 지정된 스트링값만 반환함 */ getFilterParams : function(paramStr) { if (paramStr == undefined || paramStr == null || paramStr == '') { return ''; } var matches = paramStr.match(/\[.*?\]/ig); if (matches == null) { return ''; } var count = matches.length; var result = []; for (var i=0; i < count; i++) { var p = matches[i].match(/\[(.*?)\]/); result.push(p[1]); } if (result.length == 1) { return result[0]; } return result; }, /** * 필드 타입 반환(select, checkbox, radio, textbox) */ getElmType : function(elmField) { elmField = $(elmField); var elTag = elmField[0].tagName; var result = null; switch (elTag) { case 'SELECT' : result = 'select'; break; case 'INPUT' : var _type = elmField.attr('type').toLowerCase(); if(_type == 'checkbox') result = 'checkbox'; else if(_type =='radio') result = 'radio'; else result = 'textbox'; break; case 'TEXTAREA' : result = 'textbox'; break; default : result = 'textbox'; break; } return result; }, /** * 필드 값 반환 */ getValue : function(formId, elmField) { var result = ''; var elmName = elmField.attr('name'); var fieldType = this.getElmType(elmField); //checkbox 나 radio 박스는 value값을 반환하지 않음 if (fieldType == 'checkbox' || fieldType == 'radio') { if(elmField.get(0).checked === true){ result = elmField.val(); } return result; } //alonefilter 속성이 Y 로 되어 있다면 해당 엘리먼트의 값만 반환함 var aloneFilter = elmField.attr(this.parent.ATTR_ALONE); if(aloneFilter == 'Y' || aloneFilter == 'y'){ return elmField.val(); } //name이 배열형태로 되어 있다면 값을 모두 합쳐서 반환 if( /\[.*?\]/.test(elmName) ){ var formInfo = this.getFormInfo(formId); var groupElms = $(formInfo.selector +' [name="'+elmName+'"]'); groupElms.each(function(i){ var elm = $(this); result += elm.val(); }); }else{ result = elmField.val(); } return result; }, /** * 에러메세지 엘리먼트 생성 */ createMsg : function(elm, msg, formId) { var elmMsg = document.createElement('span'); elmMsg.id = this.msgIdPrefix + elm.attr('id'); elmMsg.className = this.msgClassNamePrefix + formId; elmMsg.innerHTML = msg; return $(elmMsg); }, /** * 에러메세지 엘리먼트 제거 */ removeMsg : function(elm) { var id = this.msgIdPrefix + elm.attr('id'); var elmErr = $('#'+id); if (elmErr) elmErr.remove(); }, /** * 에러메세지 엘리먼트 모두 제거 */ removeAllMsg : function(formId) { var className = this.msgClassNamePrefix + formId; $('.' + className).remove(); }, /** * 문자열의 Byte 수 반환 */ getByte : function(str) { var encode = encodeURIComponent(str); var totalBytes = 0; var chr; var bytes; var code; for(var i = 0; i < encode.length; i++) { chr = encode.charAt(i); if(chr != "%") totalBytes++; else { code = parseInt(encode.substr(i+1,2),16); if(!(code & 0x80)) totalBytes++; else { if((code & 0xE0) == 0xC0) bytes = 2; else if((code & 0xF0) == 0xE0) bytes = 3; else if((code & 0xF8) == 0xF0) bytes = 4; else return -1; i += 3 * (bytes - 1); totalBytes += 2; } i += 2; } } return totalBytes; }, /** * 지정한 엘리먼트의 필터 메세지가 존재하는가 * * @param elmId (엘리먼트 아이디) * @param filter (필터명) * @return string | false */ getElmFilterMsg : function(elmId, filter) { if (this.parent.elmFilterMsgs[elmId] == undefined) return false; if (this.parent.elmFilterMsgs[elmId][filter] == undefined) return false; return this.parent.elmFilterMsgs[elmId][filter]; }, /** * 폼 정보 반환 * * @param formId (폼 아이디 혹은 네임) * @return array( * 'selector' => 셀렉터 문자, * 'instance' => 셀렉터 문법으로 검색해낸 폼 객체 * ) | false */ getFormInfo : function(formId) { var result = {}; var selector = '#' + formId; var instance = $(selector); if (instance.length > 0) { result.selector = selector; result.instance = instance; return result; } selector = 'form[name="' + formId + '"]'; instance = $(selector); if (instance.length > 0) { result.selector = selector; result.instance = instance; return result; } return false; }, /** * 숫자형태의 문자열로 바꿔줌 * 123,123,123 * 123123,123 * 123% * 123 % * 123.4 * -123 * ,123 * * @param value * @return float */ getNumberConv : function(value) { if (!value || value == undefined || value == null) return ''; value = value + ""; value = value.replace(/,/g, ''); value = value.replace(/%/g, ''); value = value.replace(/[\s]/g, ''); if (this.parent.Verify.isFloat(value) === false) return ''; return parseFloat(value); } }; /** * FwValidator.Handler * * @package jquery * @subpackage validator */ FwValidator.Handler = { parent : FwValidator, /** * 사용자 정의형 에러핸들러(엘리먼트 아이디별로 저장됨) */ customErrorHandler : {}, /** * 사용자 정의형 에러핸들러(필터별로 저장됨) */ customErrorHandlerByFilter : {}, /** * 사용자 정의형 성공핸들러(엘리먼트 아이디별로 저장됨) */ customSuccessHandler : {}, /** * 사용자 정의형 성공핸들러(필터별로 저장됨) */ customSuccessHandlerByFilter : {}, /** * FwValidator._execute에 의해 검사되기 전 실행되는 콜백함수 */ beforeExecute : [], /** * FwValidator._submit에서 바인딩한 onsubmit 이벤트 발생후 실행되는 콜백함수 * {폼아이디 : 콜백함수, ...} */ beforeSubmit : {}, /** * 기본 메세지 전체를 오버라이딩 */ overrideMsgs : function(msgs) { if (typeof msgs != 'object') return; this.parent.msgs = msgs; }, /** * 필드에 따른 필수 입력 에러메세지 설정 */ setRequireErrorMsg : function(field, msg) { this.parent.requireMsgs[field] = msg; }, /** * 필터 타입에 따른 에러메세지 설정 */ setFilterErrorMsg : function(filter, msg) { this.parent.msgs[filter] = msg; }, /** * 엘리먼트의 특정 필터에만 에러메세지를 설정 */ setFilterErrorMsgByElement : function(elmId, filter, msg) { if (this.parent.elmFilterMsgs[elmId] == undefined) { this.parent.elmFilterMsgs[elmId] = {}; } this.parent.elmFilterMsgs[elmId][filter] = msg; }, /** * 엘리먼트 아이디별 사용자정의형 에러핸들러 등록 */ setCustomErrorHandler : function(elmId, func) { if (typeof func != 'function') return; this.customErrorHandler[elmId] = func; }, /** * 필터 타입별 사용자정의형 에러핸들러 등록 */ setCustomErrorHandlerByFilter : function(filter, func) { if (typeof func != 'function') return; this.customErrorHandlerByFilter[filter] = func; }, /** * 엘리먼트 아이디별 사용자정의형 성공핸들러 등록 */ setCustomSuccessHandler : function(elmId, func) { if (typeof func != 'function') return; this.customSuccessHandler[elmId] = func; }, /** * 필터 타입별 사용자정의형 성공핸들러 등록 */ setCustomSuccessHandlerByFilter : function(filter, func) { if (typeof func != 'function') return; this.customSuccessHandlerByFilter[filter] = func; }, /** * 확장형 필터 등록 */ setExtensionFilter : function(filter, func) { if (typeof func != 'function') return; if (this.parent.Filter[filter] == undefined) { this.parent.Filter[filter] = func; } }, /** * 각 엘리먼트가 FwValidator._execute에 의해 검사되기 전 실행되는 콜백함수 등록 */ setBeforeExecute : function(func) { if (typeof func != 'function') return; this.beforeExecute.push(func); }, /** * FwValidator._submit 에서 바인딩된 onsubmit 이벤트의 콜백함수 등록(유효성 검사가 성공하면 호출됨) */ setBeforeSubmit : function(func) { if (typeof func != 'function') return; this.beforeSubmit = func; }, /** * 에러핸들러 - 기본 */ errorHandler : function(resultData) { if (this._callCustomErrorHandler(resultData) === true) return; alert(resultData.msg); resultData.element.focus(); }, /** * 에러핸들러 - 전체 펼침 모드 */ errorHandlerByExapnd : function(Response) { var count = Response.elmsCurrErrorField.length; //해당 폼에 출력된 에러메세지를 일단 모두 지운다. this.parent.Helper.removeAllMsg(Response.formId); for (var i=0; i < count; ++i) { var resultData = Response.elmsCurrErrorField[i]; if (this._callCustomErrorHandler(resultData) === true) continue; var elmMsg = this.parent.Helper.createMsg(resultData.element, resultData.msg, resultData.formid).css({'color':'#FF3300'}); elmMsg.appendTo(resultData.element.parent()); } }, /** * 에러핸들러 - fireon */ errorHandlerByFireon : function(resultData) { if (this._callCustomErrorHandler(resultData) === true) return; //해당 항목의 에러메세지 엘리먼트가 있다면 먼저 삭제한다. this.parent.Helper.removeMsg(resultData.element); var elmMsg = this.parent.Helper.createMsg(resultData.element, resultData.msg, resultData.formid).css({'color':'#FF3300'}); elmMsg.appendTo(resultData.element.parent()); return elmMsg; }, /** * 성공핸들러 - fireon */ successHandlerByFireon : function(resultData) { this._callCustomSuccessHandler(resultData); }, /** * 정의형 에러 핸들러 호출 * * @return boolean (정의형 에러핸들러를 호출했을 경우 true 반환) */ _callCustomErrorHandler : function(resultData) { //resultData 가 정의되어 있지 않은 경우 if (resultData == undefined) { alert('errorHandler - resultData is not found'); return true; } //해당 엘리먼트에 대한 Custom에러핸들러가 등록되어 있다면 탈출 if (this.customErrorHandler[resultData.elmid] != undefined) { this.customErrorHandler[resultData.elmid].call(this.parent, resultData); return true; } //해당 필터에 대한 Custom에러핸들러가 등록되어 있다면 탈출 if (this.customErrorHandlerByFilter[resultData.filter] != undefined) { this.customErrorHandlerByFilter[resultData.filter].call(this.parent, resultData); return true; } return false; }, /** * 정의형 성공 핸들러 호출 - 기본적으로 fireon 속성이 적용된 엘리먼트에만 적용됨. */ _callCustomSuccessHandler : function(resultData) { if (this.customSuccessHandler[resultData.elmid] != undefined) { this.customSuccessHandler[resultData.elmid].call(this.parent, resultData); return; } if (this.customSuccessHandlerByFilter[resultData.filter] != undefined) { this.customSuccessHandlerByFilter[resultData.filter].call(this.parent, resultData); return; } } }; /** * FwValidator.Verify * * @package jquery * @subpackage validator */ FwValidator.Verify = { parent : FwValidator, isNumber : function(value, cond) { if (value == '') return true; if (!cond) { cond = 1; } cond = parseInt(cond); pos = 1; nga = 2; minpos = 4; minnga = 8; result = 0; if ((/^[0-9]+$/).test(value) === true) { result = pos; } else if ((/^[-][0-9]+$/).test(value) === true) { result = nga; } else if ((/^[0-9]+[.][0-9]+$/).test(value) === true) { result = minpos; } else if ((/^[-][0-9]+[.][0-9]+$/).test(value) === true) { result = minnga; } if (result & cond) { return true; } return false; }, isFloat : function(value) { if (value == '') return true; return (/^[\-0-9]([0-9]+[\.]?)*$/).test(value); }, isIdentity : function(value) { if (value == '') return true; return (/^[a-z]+[a-z0-9_]+$/i).test(value); }, isKorean : function(value) { if (value == '') return true; var count = value.length; for(var i=0; i < count; ++i){ var cCode = value.charCodeAt(i); //공백은 무시 if(cCode == 0x20) continue; if(cCode < 0x80){ return false; } } return true; }, isAlpha : function(value) { if (value == '') return true; return (/^[a-z]+$/i).test(value); }, isAlphaUpper : function(value) { if (value == '') return true; return (/^[A-Z]+$/).test(value); }, isAlphaLower : function(value) { if (value == '') return true; return (/^[a-z]+$/).test(value); }, isAlphaNum : function(value) { if (value == '') return true; return (/^[a-z0-9]+$/i).test(value); }, isAlphaNumUpper : function(value) { if (value == '') return true; return (/^[A-Z0-9]+$/).test(value); }, isAlphaNumLower : function(value) { if (value == '') return true; return (/^[a-z0-9]+$/).test(value); }, isAlphaDash : function(value) { if (value == '') return true; return (/^[a-z0-9_-]+$/i).test(value); }, isAlphaDashUpper : function(value) { if (value == '') return true; return (/^[A-Z0-9_-]+$/).test(value); }, isAlphaDashLower : function(value) { if (value == '') return true; return (/^[a-z0-9_-]+$/).test(value); }, isSsn : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; if ( (/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}[1234]{1}[0-9]{6}$/).test(value) === false ) { return false; } var sum = 0; var last = value.charCodeAt(12) - 0x30; var bases = "234567892345"; for (var i=0; i<12; i++) { sum += (value.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30); }; var mod = sum % 11; if ( (11 - mod) % 10 != last ) { return false; } return true; }, isForeignerNo : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; if ( (/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/).test(value) === false ) { return false; } var sum = 0; var last = value.charCodeAt(12) - 0x30; var bases = "234567892345"; for (var i=0; i<12; i++) { sum += (value.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30); }; var mod = sum % 11; if ( (11 - mod + 2) % 10 != last ) { return false; } return true; }, isBizNo : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; if ( (/[0-9]{3}[0-9]{2}[0-9]{5}$/).test(value) === false ) { return false; } var sum = parseInt(value.charAt(0)); var chkno = [0, 3, 7, 1, 3, 7, 1, 3]; for (var i = 1; i < 8; i++) { sum += (parseInt(value.charAt(i)) * chkno[i]) % 10; } sum += Math.floor(parseInt(parseInt(value.charAt(8))) * 5 / 10); sum += (parseInt(value.charAt(8)) * 5) % 10 + parseInt(value.charAt(9)); if (sum % 10 != 0) { return false; } return true; }, isJuriNo : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; if ( (/^([0-9]{6})-?([0-9]{7})$/).test(value) === false ) { return false; } var sum = 0; var last = parseInt(value.charAt(12), 10); for (var i=0; i<12; i++) { if (i % 2 == 0) { // * 1 sum += parseInt(value.charAt(i), 10); } else { // * 2 sum += parseInt(value.charAt(i), 10) * 2; }; }; var mod = sum % 10; if( (10 - mod) % 10 != last ){ return false; } return true; }, isPhone : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; return (/^(02|0[0-9]{2,3})[1-9]{1}[0-9]{2,3}[0-9]{4}$/).test(value); }, isMobile : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; return (/^01[016789][1-9]{1}[0-9]{2,3}[0-9]{4}$/).test(value); }, isZipcode : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; return (/^[0-9]{3}[0-9]{3}$/).test(value); }, isIp : function(value) { if (value == '') return true; return (/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){2,}$/).test(value); }, isEmail : function(value) { if (value == '') return true; return (/^([a-z0-9\_\-\.]+)@([a-z0-9\_\-]+\.)+[a-z]{2,63}$/i).test(value); }, isUrl : function(value) { if (value == '') return true; return (/http[s]?:\/\/[a-z0-9_\-]+(\.[a-z0-9_\-]+)+/i).test(value); }, isDate : function(value) { value = value.replace(/-/g, ''); if (value == '') return true; return (/^[12][0-9]{3}(([0]?[1-9])|([1][012]))[0-3]?[0-9]$/).test(value); }, isPassport : function(value) { if (value == '') return true; //일반 여권 if ( (/^[A-Z]{2}[0-9]{7}$/).test(value) === true ) { return true; } //전자 여권 if ( (/^[A-Z]{1}[0-9]{8}$/).test(value) === true ) { return true; } return false; }, isNumberMin : function(value, limit) { value = this.parent.Helper.getNumberConv(value); limit = this.parent.Helper.getNumberConv(limit); if (value < limit) { return false; } return true; }, isNumberMax : function(value, limit) { value = this.parent.Helper.getNumberConv(value); limit = this.parent.Helper.getNumberConv(limit); if (value > limit) { return false; } return true; }, isNumberRange : function(value, min, max) { value = this.parent.Helper.getNumberConv(value); min = this.parent.Helper.getNumberConv(min); max = this.parent.Helper.getNumberConv(max); if (value < min || value > max) { return false; } return true; } }; /** * FwValidator.Filter * * @package jquery * @subpackage validator */ FwValidator.Filter = { parent : FwValidator, isFill : function(Response, cond) { if (typeof cond != 'string') { var count = cond.length; var result = this.parent.Helper.getResult(Response, parent.CODE_SUCCESS); for (var i = 0; i < count; ++i) { result = this._fillConditionCheck(Response, cond[i]); if (result.passed === true) { return result; } } return result; } return this._fillConditionCheck(Response, cond); }, isMatch : function(Response, sField) { if(Response.elmCurrValue == ''){ return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); } //Radio 나 Checkbox의 경우 무시 if(Response.elmCurrFieldType == 'radio' || Response.elmCurrFieldType == 'checkbox'){ return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); } var elmTarget = $('#'+sField); var elmTargetValue = elmTarget.val(); if (Response.elmCurrValue != elmTargetValue) { var label = elmTarget.attr(this.parent.ATTR_LABEL); var match = label ? label : sField; Response.elmCurrErrorMsg = Response.elmCurrErrorMsg.replace(/\{match\}/i, match); return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isMax : function(Response, iLen) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); if (Response.elmCurrFieldType == 'radio' || Response.elmCurrFieldType == 'checkbox') { var chkCount = 0; var sName = Response.elmCurrField.attr('name'); $('input[name="'+sName+'"]').each(function(i){ if ($(this).get(0).checked === true) { ++chkCount; } }); if (chkCount > iLen) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } } else { var len = Response.elmCurrValue.length; if (len > iLen) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } } if (result.passed === this.parent.CODE_FAIL) { result.msg = result.msg.replace(/\{max\}/i, iLen); } return result; }, isMin : function(Response, iLen) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); if(Response.elmCurrFieldType == 'radio' || Response.elmCurrFieldType == 'checkbox'){ var chkCount = 0; var sName = Response.elmCurrField.attr('name'); $('input[name="'+sName+'"]').each(function(i){ if($(this).get(0).checked === true){ ++chkCount; } }); if (chkCount < iLen) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } }else{ var len = Response.elmCurrValue.length; if(len < iLen){ result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } } if(result.passed === this.parent.CODE_FAIL){ result.msg = result.msg.replace(/\{min\}/i, iLen); } return result; }, isNumber : function(Response, iCond) { var result = this.parent.Verify.isNumber(Response.elmCurrValue, iCond); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isIdentity : function(Response){ var result = this.parent.Verify.isIdentity(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isKorean : function(Response){ var result = this.parent.Verify.isKorean(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlpha : function(Response){ var result = this.parent.Verify.isAlpha(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaLower : function(Response){ var result = this.parent.Verify.isAlphaLower(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaUpper : function(Response){ var result = this.parent.Verify.isAlphaUpper(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaNum : function(Response){ var result = this.parent.Verify.isAlphaNum(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaNumLower : function(Response){ var result = this.parent.Verify.isAlphaNumLower(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaNumUpper : function(Response){ var result = this.parent.Verify.isAlphaNumUpper(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaDash : function(Response){ var result = this.parent.Verify.isAlphaDash(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaDashLower : function(Response){ var result = this.parent.Verify.isAlphaDashLower(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isAlphaDashUpper : function(Response){ var result = this.parent.Verify.isAlphaDashUpper(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isSsn : function(Response){ var result = this.parent.Verify.isSsn(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isForeignerNo : function(Response){ var result = this.parent.Verify.isForeignerNo(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isBizNo : function(Response){ var result = this.parent.Verify.isBizNo(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isJuriNo : function(Response){ var result = this.parent.Verify.isJuriNo(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isPhone : function(Response){ var result = this.parent.Verify.isPhone(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isMobile : function(Response){ var result = this.parent.Verify.isMobile(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isZipcode : function(Response){ var result = this.parent.Verify.isZipcode(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isIp : function(Response){ var result = this.parent.Verify.isIp(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isEmail : function(Response){ var result = this.parent.Verify.isEmail(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isUrl : function(Response){ var result = this.parent.Verify.isUrl(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isDate : function(Response){ var result = this.parent.Verify.isDate(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isRegex : function(Response, regex){ regex = eval(regex); if( regex.test(Response.elmCurrValue) === false ){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isPassport : function(Response){ var result = this.parent.Verify.isPassport(Response.elmCurrValue); if(result === false){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isSimplexEditorFill : function(Response){ var result = eval(Response.elmCurrValue + ".isEmptyContent();"); if(result === true){ return this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); } return this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); }, isMaxByte : function(Response, iLen) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); var len = this.parent.Helper.getByte(Response.elmCurrValue); if (len > iLen) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{max\}/i, iLen); } return result; }, isMinByte : function(Response, iLen) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); var len = this.parent.Helper.getByte(Response.elmCurrValue); if (len < iLen) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{min\}/i, iLen); } return result; }, isByteRange : function(Response, range) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); var rangeInfo = this._getRangeNum(range); var iMin = rangeInfo.min; var iMax = rangeInfo.max; var len = this.parent.Helper.getByte(Response.elmCurrValue); if (len < iMin || len > iMax) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{min\}/i, iMin); result.msg = result.msg.replace(/\{max\}/i, iMax); } return result; }, isLengthRange : function(Response, range) { var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); var rangeInfo = this._getRangeNum(range); var iMin = rangeInfo.min; var iMax = rangeInfo.max; var resultMin = this.isMin(Response, iMin); var resultMax = this.isMax(Response, iMax); if (resultMin.passed === this.parent.CODE_FAIL || resultMax.passed === this.parent.CODE_FAIL) { result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{min\}/i, iMin); result.msg = result.msg.replace(/\{max\}/i, iMax); } return result; }, isNumberMin : function(Response, iLimit) { var check = this.parent.Verify.isNumberMin(Response.elmCurrValue, iLimit); var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); if(check === false){ result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{min\}/i, iLimit); } return result; }, isNumberMax : function(Response, iLimit) { var check = this.parent.Verify.isNumberMax(Response.elmCurrValue, iLimit); var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); if(check === false){ result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{max\}/i, iLimit); } return result; }, isNumberRange : function(Response, range) { var iMin = range[0]; var iMax = range[1]; var check = this.parent.Verify.isNumberRange(Response.elmCurrValue, iMin, iMax); var result = this.parent.Helper.getResult(Response, this.parent.CODE_SUCCESS); if(check === false){ result = this.parent.Helper.getResult(Response, this.parent.CODE_FAIL); result.msg = result.msg.replace(/\{min\}/i, iMin); result.msg = result.msg.replace(/\{max\}/i, iMax); } return result; }, _getRangeNum : function(range) { var result = {}; result.min = range[0] <= 0 ? 0 : parseInt(range[0]); result.max = range[1] <= 0 ? 0 : parseInt(range[1]); return result; }, _fillConditionCheck : function(Response, cond) { cond = $.trim(cond); var parent = this.parent; //조건식이 들어오면 조건식에 맞을 경우만 필수값을 체크함 if (cond) { var conditions = cond.split('='); var fieldId = $.trim(conditions[0]); var fieldVal = $.trim(conditions[1]); try { var val = parent.Helper.getValue(Response.formId, $('#'+fieldId)); val = $.trim(val); if(fieldVal != val) { return parent.Helper.getResult(Response, parent.CODE_SUCCESS); } } catch(e) { if (parent.DEBUG_MODE == true) { Response.elmCurrErrorMsg = parent.msgs['isFillError']; Response.elmCurrErrorMsg = Response.elmCurrErrorMsg.replace(/\{condition\}/i, cond); return parent.Helper.getResult(Response, parent.CODE_FAIL); } return parent.Helper.getResult(Response, parent.CODE_SUCCESS); } } //Radio 나 Checkbox의 경우 선택한값이 있는지 여부를 체크함 if (Response.elmCurrFieldType == 'radio' || Response.elmCurrFieldType == 'checkbox') { var sName = Response.elmCurrField.attr('name'); var result = parent.Helper.getResult(Response, parent.CODE_FAIL); $('input[name="'+sName+'"]').each(function(i){ if ($(this).get(0).checked === true) { result = parent.Helper.getResult(Response, parent.CODE_SUCCESS); } }); return result; } //일반 텍스트 박스 if (Response.elmCurrValue != '') { return parent.Helper.getResult(Response, parent.CODE_SUCCESS); } return parent.Helper.getResult(Response, parent.CODE_FAIL); } }; FwValidator.msgs = { //기본 'isFill' : '{label} 항목은 필수 입력값입니다.', 'isNumber' : '{label} 항목이 숫자 형식이 아닙니다.', 'isEmail' : '{label} 항목이 이메일 형식이 아닙니다.', 'isIdentity' : '{label} 항목이 아이디 형식이 아닙니다.', 'isMax' : '{label} 항목이 {max}자(개) 이하로 해주십시오.', 'isMin' : '{label} 항목이 {min}자(개) 이상으로 해주십시오 .', 'isRegex' : '{label} 항목이 올바른 입력값이 아닙니다.', 'isAlpha' : '{label} 항목이 영문이 아닙니다', 'isAlphaLower' : '{label} 항목이 영문 소문자 형식이 아닙니다', 'isAlphaUpper' : '{label} 항목이 영문 대문자 형식이 아닙니다', 'isAlphaNum' : '{label} 항목이 영문이나 숫자 형식이 아닙니다.', 'isAlphaNumLower' : '{label} 항목이 영문 소문자 혹은 숫자 형식이 아닙니다.', 'isAlphaNumUpper' : '{label} 항목이 영문 대문자 혹은 숫자 형식이 아닙니다.', 'isAlphaDash' : '{label} 항목이 [영문,숫자,_,-] 형식이 아닙니다.', 'isAlphaDashLower' : '{label} 항목이 [영문 소문자,숫자,_,-] 형식이 아닙니다.', 'isAlphaDashUpper' : '{label} 항목이 [영문 대문자,숫자,_,-] 형식이 아닙니다.', 'isKorean' : '{label} 항목이 한국어 형식이 아닙니다.', 'isUrl' : '{label} 항목이 URL 형식이 아닙니다.', 'isSsn' : '{label} 항목이 주민등록번호 형식이 아닙니다.', 'isForeignerNo' : '{label} 항목이 외국인등록번호 형식이 아닙니다.', 'isBizNo' : '{label} 항목이 사업자번호 형식이 아닙니다.', 'isPhone' : '{label} 항목이 전화번호 형식이 아닙니다.', 'isMobile' : '{label} 항목이 핸드폰 형식이 아닙니다.', 'isZipcode' : '{label} 항목이 우편번호 형식이 아닙니다.', 'isJuriNo' : '{label} 항목이 법인번호 형식이 아닙니다.', 'isIp' : '{label} 항목이 아이피 형식이 아닙니다.', 'isDate' : '{label} 항목이 날짜 형식이 아닙니다.', 'isMatch' : '{label} 항목과 {match} 항목이 같지 않습니다.', 'isSuccess' : '{label} 항목의 데이터는 전송할 수 없습니다.', 'isSimplexEditorFill' : '{label}(을/를) 입력하세요', 'isPassport' : '{label} 항목이 여권번호 형식이 아닙니다.', 'isMaxByte' : '{label} 항목은 {max}bytes 이하로 해주십시오.', 'isMinByte' : '{label} 항목은 {min}bytes 이상으로 해주십시오.', 'isByteRange' : '{label} 항목은 {min} ~ {max}bytes 범위로 해주십시오.', 'isLengthRange' : '{label} 항목은 {min} ~ {max}자(개) 범위로 해주십시오.', 'isNumberMin' : '{label} 항목은 {min} 이상으로 해주십시오.', 'isNumberMax' : '{label} 항목은 {max} 이하로 해주십시오.', 'isNumberRange' : '{label} 항목은 {min} ~ {max} 범위로 해주십시오.', //디버깅 'notMethod' : '{label} 항목에 존재하지 않는 필터를 사용했습니다.', 'isFillError' : "[{label}] 필드의 isFill {condition} 문장이 잘못되었습니다.\r\n해당 필드의 아이디를 확인하세요." }; FwValidator.Handler.overrideMsgs({ //기본 'isFill' : sprintf(__('%s 항목은 필수 입력값입니다.'), '{label}'), 'isNumber' : sprintf(__('%s 항목이 숫자 형식이 아닙니다.'), '{label}'), 'isEmail' : sprintf(__('%s 항목이 이메일 형식이 아닙니다.'), '{label}'), 'isIdentity' : sprintf(__('%s 항목이 아이디 형식이 아닙니다.'), '{label}'), 'isMax' : sprintf(__('%1$s 항목이 %2$s자(개) 이하로 해주십시오.'), '{label}', '{max}'), 'isMin' : sprintf(__('%1$s 항목이 %2$s자(개) 이상으로 해주십시오.'), '{label}', '{min}'), 'isRegex' : sprintf(__('%s 항목이 올바른 입력값이 아닙니다.'), '{label}'), 'isAlpha' : sprintf(__('%s 항목이 영문이 아닙니다.'), '{label}'), 'isAlphaLower' : sprintf(__('%s 항목이 영문 소문자 형식이 아닙니다.'), '{label}'), 'isAlphaUpper' : sprintf(__('%s 항목이 영문 대문자 형식이 아닙니다.'), '{label}'), 'isAlphaNum' : sprintf(__('%s 항목이 영문이나 숫자 형식이 아닙니다.'), '{label}'), 'isAlphaNumLower' : sprintf(__('%s 항목이 영문 소문자 혹은 숫자 형식이 아닙니다.'), '{label}'), 'isAlphaNumUpper' : sprintf(__('%s 항목이 영문 대문자 혹은 숫자 형식이 아닙니다.'), '{label}'), 'isAlphaDash' : sprintf(__('%s 항목이 [영문,숫자,_,-] 형식이 아닙니다.'), '{label}'), 'isAlphaDashLower' : sprintf(__('%s 항목이 [영문 소문자,숫자,_,-] 형식이 아닙니다.'), '{label}'), 'isAlphaDashUpper' : sprintf(__('%s 항목이 [영문 대문자,숫자,_,-] 형식이 아닙니다.'), '{label}'), 'isKorean' : sprintf(__('%s 항목이 한국어 형식이 아닙니다.'), '{label}'), 'isUrl' : sprintf(__('%s 항목이 URL 형식이 아닙니다.'), '{label}'), 'isSsn' : sprintf(__('%s 항목이 주민등록번호 형식이 아닙니다.'), '{label}'), 'isForeignerNo' : sprintf(__('%s 항목이 외국인등록번호 형식이 아닙니다.'), '{label}'), 'isBizNo' : sprintf(__('%s 항목이 사업자번호 형식이 아닙니다.'), '{label}'), 'isPhone' : sprintf(__('%s 항목이 전화번호 형식이 아닙니다.'), '{label}'), 'isMobile' : sprintf(__('%s 항목이 핸드폰 형식이 아닙니다.'), '{label}'), 'isZipcode' : sprintf(__('%s 항목이 우편번호 형식이 아닙니다.'), '{label}'), 'isJuriNo' : sprintf(__('%s 항목이 법인번호 형식이 아닙니다.'), '{label}'), 'isIp' : sprintf(__('%s 항목이 아이피 형식이 아닙니다.'), '{label}'), 'isDate' : sprintf(__('%s 항목이 날짜 형식이 아닙니다.'), '{label}'), 'isMatch' : sprintf(__('%1$s 항목과 %2$s 항목이 같지 않습니다.'), '{label}', '{match}'), 'isSuccess' : sprintf(__('%s 항목의 데이터는 전송할 수 없습니다.'), '{label}'), 'isSimplexEditorFill' : sprintf(__('%s(을/를) 입력하세요.'), '{label}'), 'isPassport' : sprintf(__('%s 항목이 여권번호 형식이 아닙니다.'), '{label}'), 'isMaxByte' : sprintf(__('%1$s 항목은 %2$sbytes 이하로 해주십시오.'), '{label}', '{max}'), 'isMinByte' : sprintf(__('%1$s 항목은 %2$sbytes 이상으로 해주십시오.'), '{label}', '{min}'), 'isByteRange' : sprintf(__('%1$s 항목은 %2$s ~ %3$sbytes 범위로 해주십시오.'), '{label}', '{min}', '{max}'), 'isLengthRange' : sprintf(__('%1$s 항목은 %2$s ~ %3$s자(개) 범위로 해주십시오.'), '{label}', '{min}', '{max}'), 'isNumberMin' : sprintf(__('%1$s 항목은 %2$s 이상으로 해주십시오.'), '{label}', '{min}'), 'isNumberMax' : sprintf(__('%1$s 항목은 %2$s 이하로 해주십시오.'), '{label}', '{max}'), 'isNumberRange' : sprintf(__('%1$s 항목은 %2$s ~ %3$s 범위로 해주십시오.'), '{label}', '{min}', '{max}'), //디버깅 'notMethod' : sprintf(__('%s 항목에 존재하지 않는 필터를 사용했습니다.'), '{label}'), 'isFillError' : sprintf(__('[%1$s] 필드의 isFill %2$s 문장이 잘못되었습니다.\r\n해당 필드의 아이디를 확인하세요.'), '{label}', '{condition}') }); /** * 엘리먼트 종류별 값 가져오기 form 에 의한 동일한 name 값 구별 * * - 오브젝트를 받아서 사용할 수 있게함. * * @param String id * @return * @author 박난하, 백충덕 , 이재욱 */ AuthSSLManager.getValue = function(id) { //id 가 string인 경우 if (typeof id == 'string') { var divide, o, type; divide = id.split('::'); if (divide.length == 1) { o = document.getElementsByName(id); } else { var frm = divide[0], id = divide[1]; // radio, checkbox if ($('#'+id).length==0) { val = this.checkbox({'name': id, 'mode': 'val'}); return val; } o = document.forms[frm][id]; } if ( o == null || o == undefined || o.value == null || o.value == undefined ) { o = document.getElementsByName(id); // 전체 html 에선 id 값이 있지만 form 밖에 있을수 있으므로 조건추가 (ECHOSTING-265537) val = (o[0] == undefined) ? '' : o[0].value; } else { val = o.value; } return val; } else if (typeof id == 'object') { //id가 object인 경우 //오직 하나의 오브젝트에 대해서만 처리 if ($(id).length == 1) { return $(id).val(); } else { return '' } } else { // id가 string 또는 object가 아닐 경우 빈 값 리턴 return ''; } }; /** * 엘리먼트 종류별 값 가져오기 form 에 의한 동일한 name 값 구별 * @param String id * @return * @author 박난하 , 백충덕 */ AuthSSLManager.getValuePay = function(id) { var divide, o, type; // id가 string이 아닐 경우 빈 값 리턴 if (typeof id != 'string') return ''; divide = id.split('::'); var frm = divide[0], id = divide[1]; // radio, checkbox if ($('#'+id).length==0) { val = this.checkbox({'name': id, 'mode': 'val'}); return val; } o = document.forms[frm][id]; if ( o == null || o == undefined || o.value == null || o.value == undefined ) { o = document.getElementsByName(id); val = o[0].value; } else { val = o.value; } return val; }; /** * 암호화 param 데이터 세팅 * @param array param 암호화 관련 * @return string p 암호화 param * @author 박난하 * */ AuthSSLManager.setParam = function(param) { var p = []; if (param['auth_mode'] == 'encrypt1.9') { p.push('auth_mode=encrypt'); } else { p.push('auth_mode=' + param['auth_mode']); } p.push('auth_callbackName=' + param['auth_callbackName']); switch(param['auth_mode']) { case 'encrypt1.9': var aEle = param['aEleId'], o, p2 = {}, v; var divide = ''; var id = ''; for ( var i in aEle ) { if (aEle.hasOwnProperty(i) == false) continue; v = this.getValuePay(aEle[i]); if ( v == -1 ) continue; divide = aEle[i].split('::'); id = divide[1]; p2[id] = this.getValuePay(aEle[i]); } p.push('auth_string=' + encodeURIComponent(__JSON.stringify(p2))); break; case 'encrypt': var aEle = param['aEleId'], o, p2 = {}, v; for ( var i in aEle ) { if (aEle.hasOwnProperty(i) == false) continue; v = this.getValue(aEle[i]); if ( v == -1 ) continue; //암호화 대상이 오브젝트인경우 id값이 key가 된다. if (typeof aEle[i] == 'object') { p2[$(aEle[i]).attr('id')] = this.getValue(aEle[i]); } else { p2[aEle[i]] = this.getValue(aEle[i]); } } p.push('auth_string=' + encodeURIComponent(__JSON.stringify(p2))); break; case 'decrypt': case 'decryptClient': p.push('auth_string=' + encodeURIComponent(param['auth_string'])); break; } return p; }; /** * radio, checkbox 값 가져오기 * @param object options 옵션 * @return string radio 또는 checkbox value 반환 * @author 박난하 , 백충덕 * */ AuthSSLManager.checkbox = function(options) { var o = document.getElementsByName(options.name); if ( o == null ) return; // element 없음 if (o.length<1) { var chk = false; var o = document.getElementById(options.name); if ( o == null ) return ''; if ( o.checked == true ) var chk = true; return chk == true ? o.value : ''; } var bChecked = false; var aChk = new Array(); for ( var i = 0; i < o.length; i++ ) { var el = $('#'+o[i].id); if ( el.attr('checked') == true ) { // RADIO if (el.attr('type') == 'radio') return el.val(); // CHECKBOX else if (el.attr('type') == 'checkbox') { aChk.push(el.val()); bChecked = true; } } } if ( options.mode == 'val' ) { if (bChecked == false) return ''; if (aChk.length>0) return aChk.join('|'); } }; /** * AuthSSL을 통해 submit을 할 폼 클래스 * @author 백충덕 * @since 2011. 6. 16 * */ var FormSSL = function() { /** * 폼 아이디 * @var string * */ this.sFormId = null; /** * 암호화 시킬 엘리먼트 id 배열 * @var array * */ this.aEleId = null; /** * onsubmit bind * @param string sFormId bind 할 폼 아이디 * @param array aEleId 암호화할 엘리먼트 id 배열 * */ this.bind = function(sFormId, aEleId) { var self = this; this.sFormId = sFormId; this.aEleId = aEleId; var oForm = $('#'+sFormId); oForm.unbind('submit'); oForm.bind('submit', function(){ AuthSSL.Submit(self.sFormId, self.aEleId); return false; }); }; /** * AuthSSL submit 실행 * */ this.submit = function() { AuthSSL.Submit(this.sFormId, this.aEleId); return false; }; }; /** * AuthSSL 폼 객체 리스트 관리 * @author 백충덕 * @since 2011. 6. 16 * */ var FormSSLContainer = { /** * 폼 객체 리스트 * @var object * */ aFormSSL: {}, /** * 폼 객체 생성 및 리스트에 추가 * @param string sFormId 객체로 생성할 폼 아이디 * @param array aEleId 암호화 할 엘리먼트 아이디 * */ create: function (sFormId, aEleId) { if (this.formExists(sFormId)==false) { var oFormSSL = new FormSSL(); oFormSSL.bind(sFormId, aEleId); this.aFormSSL[sFormId] = oFormSSL; } }, /** * 폼 아이디로 AuthSSL submit 실행 * @param string sFormId 폼 아이디 * */ submit: function (sFormId) { if (this.formExists(sFormId)==false) return; this.aFormSSL[sFormId].submit(); }, /** * 폼 아이디로 FormSSLContainer에 해당 폼이 있는지 체크 * @param string sFormId 체크할 폼 아이디 * @return bool 폼이 있으면 true, 없으면 false * */ formExists: function (sFormId) { if (!this.aFormSSL[sFormId]) return false; else return true; } }; /** * AuthSSL 클래스 * @author 백충덕 * @since 2011. 6. 16 * */ var AuthSSL = { /** * SSL on/off * @var bool * */ bIsSsl : true, /** * 폼 아이디 * @var string * */ sFormId : null, /** * 엘리먼트 아이디 * @var array * */ aEleId : null, /** * 폼 객체 (jQuery) * @var object * */ oFormSubmit: null, /** * 암호화 된 문자열이 저장될 input hidden id * @var string * */ sEncryptId : 'encrypted_str', /** * callback 함수 이름 * @var string * */ sCallbackName : 'AuthSSL.encryptSubmit_Complete', /** * 멤버변수 세팅 * @param string sFormId 폼 아이디 * @param array aEleId 엘리먼트 아이디 * */ init: function(sFormId, aEleId) { this.sFormId = sFormId; this.aEleId = aEleId; this.oFormSubmit = $('#' + sFormId); }, /** * AuthSSLManager 존재여부 체크 * @return bool 존재하면 true, 아니면 false 반환 * */ checkAvailable: function() { // AuthSSLManager가 없음 if (typeof AuthSSLManager!='object') { alert('[Error]\nneed SSL Manager'); return false; } return true; }, /** * onsubmit bind * @param string sFormId 폼 아이디 * @param array aEleId 암호화하고자 하는 필드의 id * */ Bind: function(sFormId, aEleId) { FormSSLContainer.create(sFormId, aEleId); }, /** * 암호화 요청 함수 - submit * @param string sFormId 폼 아이디 * @param array aEleId 엘리먼트 아이디 * */ Submit: function(sFormId, aEleId) { // AuthSSLManager 존재여부 체크 if (this.checkAvailable()==false) return false; // 폼 아이디, 엘리먼트 아이디 세팅 this.init(sFormId, aEleId); // 암호화 요청이 아닐 경우 그냥 submit if (this.bIsSsl == false) { this.disabledSslSubmit(); return false; } // 암호화 된 값을 받을 input_hidden 생성 var oInput = document.createElement('input'); oInput.type = 'hidden'; oInput.name = oInput.id = this.sEncryptId; this.oFormSubmit.append(oInput); // 암호화 요청 this.encrypt(this.aEleId, this.sCallbackName); }, /** * 암호화 요청 * @param array aEleId 암호화할 엘리먼트 id * @param string sCallbackName 콜백함수 이름 * */ encrypt: function(aEleId, sCallbackName) { AuthSSLManager.weave({ 'auth_mode' : 'encrypt', 'aEleId' : aEleId, 'auth_callbackName': sCallbackName }); }, /** * 암호화 처리결과 callback 함수 * @param string sOutput 암호화 된 처리결과 * */ encryptSubmit_Complete: function(sOutput) { // Error if ( AuthSSLManager.isError(sOutput) == true ) { alert('[Error]\n'+sOutput); return; } // 암호화 처리된 엘리먼트의 value 제거 this.delInputValue(); // input_hidden에 암호화 된 결과값 대입 this.oFormSubmit.find('[id="'+this.sEncryptId+'"]').val(sOutput); // Form Submit this.oFormSubmit.unbind('submit'); this.delInputValue(); this.oFormSubmit.submit(); }, /** * INPUT.RADIO, INPUT.CHECKBOX의 value 지움 * @param string sName 값을 지우고자 하는 element의 name * */ delRadioValue: function(sName) { var oEle = document.getElementsByName(sName); if (oEle.length>0) { for (var i = 0; i < oEle.length; i++) { oEle[i].value = ''; if (oEle[i].defaultValue) { oEle[i].defaultValue = ''; } } } }, /** * 암호화 될 폼 요소들의 값을 지움 */ delInputValue : function() { for (var i=0; i '); aHtml.push(' '); if (rData.content_image != null) aHtml.push(''+rData.content_image+' '); aHtml.push(''); elmTarget.parents('tr').after(aHtml.join('')); } else { BOARD.setBulletinSpreadFail(req.data); }; }, 'json'); } }, setBulletinSpreadFail : function (sFailType) { switch(sFailType) { case 'S' : alert(__('비밀글은 미리보기가 불가 합니다.')); break; case 'M' : alert(__('회원에게만 읽기 권한이 있습니다')); break; case 'A' : alert(__('관리자에게만 읽기 권한이 있습니다')); break; } }, /** * 폴딩 이미지 변환 * 현재 클릭한 이미지 이외에는 모두 '닫힘' 이미지로 만들기 위함 * * @param HtmlElement obj */ changeFoldImg : function(obj) { var elmEventList = $('[onclick*="BOARD.viewTarget"]'); elmEventList.each(function(){ if (obj !== this) { $(this).find('img').attr('src', function() { return this.src.replace('_fold','_unfold'); }); } }); }, /** * 관리자 댓글보기 (관리자전용) */ pre_comment : function() { this.OpenWindow('/admin/php/b/board_admin_pre_comment_l.php?mode=popup', 'pre_comment', '800', '500','auto'); }, /** * 첨부이미지 미리보기 * @param sId * @param sFlag */ afile_display : function (sId, sFlag) { if (sFlag == 1) { $('#'+sId).css('display', ''); $('#'+sId).css('position', 'absolute'); } else { $('#'+sId).css('display', 'none'); } }, /** * 첨부이미지 로딩 * @param sId 로드될 타겟 아이디 * @param sFlag 노출여부 * @param iBoardNo 게시판 번호 */ load_attached_image : function(sId, sFlag, iBoardNo) { /* * 게시물 번호 계산 * sId는 항상 "afile_" 이 prefix 됨 */ var iBulletinNo = sId.substr(6,sId.length); //큐에서 해당 게시물의 이미지가 로드중 또는 로드되었는지 체크 var iPosition = $.inArray(iBulletinNo, this.aAttachImageLoadQueue); var oTarget = $('#'+sId); //큐 체크 if (iPosition === -1) { this.aAttachImageLoadQueue.push(iBulletinNo); var sRequestUrl = '/exec/front/Board/Get?no='+ iBulletinNo +'&board_no='+iBoardNo; $.get(sRequestUrl, function(oResponse){ //로드 성공 if (oResponse.failed === false) { oTarget.append(oResponse.data.thumbnail_image); BOARD.afile_display(sId, sFlag); } //로드 실패 else { //큐에서 제거처리하여, 다시 로드 가능하도록 변경 BOARD.aAttachImageLoadQueue.splice(iPosition,1); } },'json'); } //이미지 존재 체크 if (oTarget.children().is('img') === true) { BOARD.afile_display(sId, sFlag); } }, /** * 게시판 목록 선택 갯수 체크 * @param listName * @returns {Array} */ check_nos : function(listName) { var aNo = []; $("." + listName).each(function(){ if ( this.checked ) { aNo.push( this.value ); } }); return aNo; }, /** * window.open * @param StrPage * @param StrName * @param w * @param h * @param scrolls */ OpenWindow : function(StrPage, StrName, w, h,scrolls) { var win = null; var winl = (screen.width-w)/2; var wint = (screen.height-h)/3; settings = 'height='+h+','; settings += 'width='+w+','; settings += 'top='+wint+','; settings += 'left='+winl+','; settings += 'scrollbars='+scrolls+','; settings += 'resizable=no,'; settings += 'status=no'; // SSL 적용 (ECHOSTING-214739) if (StrPage.indexOf('http') != 0) { StrPage = window.location.protocol + '//' + window.location.host + StrPage; } win = window.open(StrPage, StrName, settings); if (parseInt(navigator.appVersion)>=4) { win.window.focus(); } }, /** * 상품 분류 검색 셀렉터 */ setProductCategorySelector : { /* * 중,소,세 분류 초기화 */ resetCategory : function(oSelectBox) { for (var i=oSelectBox.children().length - 1; i>0; i--) { oSelectBox.children().eq(i).remove(); } }, /* * 하위분류 가져오기 */ getChildCategory : function(iProductCategoryNumber, oSelectBox) { var regexp = /[0-9]+/; if (regexp.test(iProductCategoryNumber) === false || oSelectBox.length === 0) return ; var sUrl = "/exec/front/Product/SubCategory?parent_cate_no="+iProductCategoryNumber; $.get(sUrl, function(oResponse) { BOARD.setProductCategorySelector.setChildCategory(oSelectBox, oResponse); }, 'json'); }, /* * 하위분류 가져오기 Callback 함수 * 하위분류 셀렉트박스 옵션추가 */ setChildCategory : function(oSelectBox, aChildCategory) { if (aChildCategory.length === 0 || oSelectBox.length === 0) return ; var sOption = ''; for (var i=0; i
'); if (typeof(rData.content) != 'undefined') { aHtml.push(rData.content); } aHtml.push('"+ aChildCategory[i]['category_name'] +""; } oSelectBox.append(sOption); }, /** * 이벤트 바인딩 */ setEvent : function() { var oSelector = BOARD.setProductCategorySelector; /* * 1뎁스 변경처리 * - 중,소,세 분류 초기화 * - 중분류 옵션 추가 */ $("#product_category_depth1").change(function(){ if ($(this).val() !== $(this).attr("history")) { oSelector.resetCategory($("#product_category_depth2")); oSelector.resetCategory($("#product_category_depth3")); oSelector.resetCategory($("#product_category_depth4")); $(this).attr("history", $(this).val()); } oSelector.getChildCategory($(this).val(), $("#product_category_depth2")); }); /* * 2뎁스 변경처리 * - 소,세분류 초기화 * - 소분류 옵션 추가 */ $("#product_category_depth2").change(function(){ if ($(this).val() !== $(this).attr("history")) { oSelector.resetCategory($("#product_category_depth3")); oSelector.resetCategory($("#product_category_depth4")); $(this).attr("history", $(this).val()); } oSelector.getChildCategory($(this).val(), $("#product_category_depth3")); }); /* * 3뎁스 변경처리 * - 세분류 초기화 * - 세분류 옵션 추가 */ $("#product_category_depth3").change(function(){ if ($(this).val() !== $(this).attr("history")) { oSelector.resetCategory($("#product_category_depth4")); $(this).attr("history", $(this).val()); } oSelector.getChildCategory($(this).val(), $("#product_category_depth4")); }); } }, /** * 캡차 새로고침 */ refresh_captcha : function(sType, iNo) { var sCaptchaId = 'captcha_' + sType; if (iNo != '') sCaptchaId += '_' + iNo; $('#'+sCaptchaId).attr('src', '/exec/front/board/captcha?no='+iNo+'&type='+sType+'&'+new Date().getTime()); }, END : function() {} }; CAPP_SHOP_FRONT_COMMON_UTIL = { findTargetFrame : function() { //팝업창 일경우에는 바로 opener를 반환 if (CAPP_SHOP_FRONT_COMMON_UTIL.isPopupFromThisShopFront() === true) { return window.opener; } try { var bIsIframe = false; var sUrl = document.location.pathname + document.location.search; //parent의 프레임내용에서 현재주소와 동일 url을 가진 아이프레임이 있다면 아이프레임에서 실행된것으로 판단하고 parent를 반환 $(parent.document).find('iframe').each(function() { if (sUrl === $(this).attr('src')) { bIsIframe = true; return false; }; }); if (bIsIframe === true) { return parent; } } catch(e) {} //그 이외(일반페이지, 프레임셋)에서는 현재페이지에서 이동되는것으로 함 return document; }, /** * 기존 코드와의 호환성 때문에 남겨둠 * @return bool * @deprecated */ isAdminOpener : function() { return this.isPopupFromThisShopFront(); }, /** * 현재 창이 동일 쇼핑몰 내의 프론트에서 열려진 팝업창인지 리턴 * @return bool 동일 쇼핑몰 내의 프론트에서 열려진 팝업창이면 true, 아니면 false */ isPopupFromThisShopFront : function() { try { // 팝업창이 아니면 false 리턴 if (window.opener === null) { return false; } // 현재 창의 도메인과 opener의 도메인이 다르면 false 리턴 if (window.location.host !== window.opener.location.host) { return false; } // 어드민으로부터 열려진 경우 false 리턴 var regAdminUrl = /^(\/admin\/php\/|\/disp\/admin\/)/; if (regAdminUrl.test(window.opener.location.pathname) === true) { return false; } // 프론트로부터 열려진 경우이므로 true 리턴 return true; } catch (e) { // window.opener에 접근 불가능한 케이스는 이미 본 창이 닫혔거나 도메인이 다른 것이므로 false 리턴 return false; } }, /** * url에서 파라미터 가져오기 * @param string name 파라미터명 * @return string 파라미터 값 */ getParameterByName : function (name) { name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^]*)"; var regex = new RegExp(regexS); var results = regex.exec(window.location.href); if (results == null) { return ''; } else { return decodeURIComponent(results[1].replace(/\+/g, " ")); } }, historyBack : function(sMsg) { if (typeof(sMsg) !== 'undefined' && sMsg !== '') { alert(sMsg); } if (this.isPopupFromThisShopFront() === true) { opener = window; window.close(); } else { history.back(); } } }; /** * 접속통계 & 실시간접속통계 */ $(document).ready(function(){ // 이미 weblog.js 실행 되었을 경우 종료 if ($('#log_realtime').length > 0) { return; } /* * QueryString에서 디버그 표시 제거 */ function stripDebug(sLocation) { if (typeof sLocation != 'string') return ''; sLocation = sLocation.replace(/^d[=]*[\d]*[&]*$/, ''); sLocation = sLocation.replace(/^d[=]*[\d]*[&]/, ''); sLocation = sLocation.replace(/(&d&|&d[=]*[\d]*[&]*)/, '&'); return sLocation; } if (window.self == window.top) { var rloc = escape(document.location); var rref = escape(document.referrer); } else { var rloc = (document.location).pathname; var rref = ''; } // realconn & Ad aggregation var _aPrs = new Array(); _sUserQs = window.location.search.substring(1); _sUserQs = stripDebug(_sUserQs); _aPrs[0] = 'rloc='+rloc; _aPrs[1] = 'rref='+rref; _aPrs[2] = 'udim='+window.screen.width+'*'+window.screen.height; _aPrs[3] = 'rserv='+aLogData.log_server2; _aPrs[4] = 'cid='+eclog.getCid(); _aPrs[5] = 'role_path=' + $('meta[name="path_role"]').attr('content'); // 모바일웹일 경우 추가 파라미터 생성 var _sMobilePrs = ''; if (mobileWeb === true) _sMobilePrs = '&mobile=T&mobile_ver=new'; _sUrlQs = _sUserQs + '&' + _aPrs.join('&') + _sMobilePrs; var _sUrlFull = '/exec/front/eclog/main/?'+_sUrlQs; var node = document.createElement('iframe'); node.setAttribute('src', _sUrlFull); node.setAttribute('id', 'log_realtime'); document.body.appendChild(node); $('#log_realtime').hide(); // eclog2.0, eclog1.9 var sTime = new Date().getTime();//ECHOSTING-54575 // 접속통계 서버값이 있다면 weblog.js 호출 if (aLogData.log_server1 != null && aLogData.log_server1 != '') { var sScriptSrc = '//' + aLogData.log_server1 + '/weblog.js?uid=' + aLogData.mid + '&uname=' + aLogData.mid + '&r_ref=' + document.referrer; if (mobileWeb === true) sScriptSrc += '&cafe_ec=mobile'; sScriptSrc += '&t=' + sTime;//ECHOSTING-54575 var node = document.createElement('script'); node.setAttribute('type', 'text/javascript'); node.setAttribute('src', sScriptSrc); node.setAttribute('id', 'log_script'); document.body.appendChild(node); } }); /** * 비동기식 데이터 */ var CAPP_ASYNC_METHODS = { DEBUG: false, IS_LOGIN: (document.cookie.match(/(?:^| |;)iscache=F/) ? true : false), EC_PATH_ROLE: $('meta[name="path_role"]').attr('content') || '', aDatasetList: [], $xansMyshopMain: $('.xans-myshop-main'), init : function() { var bDebug = CAPP_ASYNC_METHODS.DEBUG; var aUseModules = []; var aNoCachedModules = []; $(CAPP_ASYNC_METHODS.aDatasetList).each(function(){ var sKey = this; var oTarget = CAPP_ASYNC_METHODS[sKey]; if (bDebug) { console.log(sKey); } var bIsUse = oTarget.isUse(); if (bDebug) { console.log(' isUse() : ' + bIsUse); } if (bIsUse === true) { aUseModules.push(sKey); if (oTarget.restoreCache === undefined || oTarget.restoreCache() === false) { if (bDebug) { console.log(' restoreCache() : true'); } aNoCachedModules.push(sKey); } } }); if (aNoCachedModules.length > 0) { var sEditor = ''; try { if (bEditor === true) { // 에디터에서 접근했을 경우 임의의 상품 지정 sEditor = '&PREVIEW_SDE=1'; } } catch(e) { } var sPathRole = '&path_role=' + CAPP_ASYNC_METHODS.EC_PATH_ROLE; $.ajax( { url : '/exec/front/manage/async?module=' + aNoCachedModules.join(',') + sEditor + sPathRole, dataType : 'json', success : function(aData) { CAPP_ASYNC_METHODS.setData(aData, aUseModules); } }); } else { CAPP_ASYNC_METHODS.setData({}, aUseModules); } }, setData : function(aData, aUseModules) { aData = aData || {}; $(aUseModules).each(function(){ var sKey = this; var oTarget = CAPP_ASYNC_METHODS[sKey]; if (oTarget.setData !== undefined && aData.hasOwnProperty(sKey) === true) { oTarget.setData(aData[sKey]); } if (oTarget.execute !== undefined) { oTarget.execute(); } }); } }; /** * 비동기식 데이터 - 최근 본 상품 - 보여줄 갯수 */ CAPP_ASYNC_METHODS.aDatasetList.push('recentViewConfig'); CAPP_ASYNC_METHODS.recentViewConfig = { STORAGE_KEY: 'localRecentViewConfig' + EC_SDE_SHOP_NUM, __iViewCount: null, __sAdult19Warning: 'F', __sAdult19BaseImage: null, isUse: function() { if (CAPP_ASYNC_METHODS.recent.isUse() === false) { return false; } if (window.sessionStorage === undefined) { return false; } return true; }, restoreCache: function() { if (window.sessionStorage === undefined) { return false; } var sSessionStorageDataWrapedJson = window.sessionStorage.getItem(this.STORAGE_KEY); if (sSessionStorageDataWrapedJson === null) { return false; } this.__setConfigs(sSessionStorageDataWrapedJson); return true; }, setData: function(sData) { var aData = new Array(); aData.push('"adult19BaseTinyImage":"' + sData.adult19BaseTinyImage + '"'); aData.push('"adult19Warning":"' + sData.adult19Warning + '"'); aData.push('"viewCount":"' + sData.viewCount + '"'); var sDataWrapedJson = '{' + aData.join(",") + '}'; //JSON.stringify(sData); IE7 NOT COMPATIBLE try { window.sessionStorage.setItem(this.STORAGE_KEY, sDataWrapedJson); } catch (error) { } this.__setConfigs(sDataWrapedJson); }, getViewCount: function() { return this.__iViewCount; }, getAdult19Warning: function() { return this.__sAdult19Warning; }, getAdult19BaseImage: function() { return this.__sAdult19BaseImage; }, __setConfigs: function(sDataJson) { var aRecentViewConfig = $.parseJSON(sDataJson); var sAdult19Warning = aRecentViewConfig['adult19Warning']; if (sAdult19Warning !== 'T') { sAdult19Warning = 'F' }; this.__sAdult19Warning = sAdult19Warning; this.__sAdult19BaseImage = aRecentViewConfig['adult19BaseTinyImage']; this.__iViewCount = Number(aRecentViewConfig['viewCount']); } }; /** * 비동기식 데이터 - 회원 정보 */ CAPP_ASYNC_METHODS.aDatasetList.push('member'); CAPP_ASYNC_METHODS.member = { __sEncryptedString: null, __isAdult: 'F', isUse: function() { if (CAPP_ASYNC_METHODS.IS_LOGIN === true) { if ($('.xans-layout-statelogon, .xans-layout-logon').length > 0) { return true; } if (CAPP_ASYNC_METHODS.recentViewConfig.getAdult19Warning() === 'T' && CAPP_ASYNC_METHODS.recent.isUse() === true) { return true; } } return false; }, setData: function(oData) { this.__sEncryptedString = oData.memberData; this.__isAdult = oData.memberIsAdult; }, execute: function() { AuthSSLManager.weave({ 'auth_mode' : 'decryptClient', 'auth_string' : this.__sEncryptedString, 'auth_callbackName' : 'CAPP_ASYNC_METHODS.member.setDataCallback' }); }, setDataCallback: function(output) { try { var output = decodeURIComponent(output); if ( AuthSSLManager.isError(output) == true ) { alert(output); return; } var aData = AuthSSLManager.unserialize(output); // 친구초대 if ($('.xans-myshop-asyncbenefit').size() > 0) { $('#reco_url').attr({value: $('#reco_url').val() + aData['id']}); } for (var k in aData) { $('.xans-member-var-' + k).html(aData[k]); } } catch(e) {} }, getMemberIsAdult: function() { return this.__isAdult; } }; /** * 비동기식 데이터 - 예치금 */ CAPP_ASYNC_METHODS.aDatasetList.push('Ordercnt'); CAPP_ASYNC_METHODS.Ordercnt = { __iOrderShppiedBeforeCount: null, __iOrderShppiedStandbyCount: null, __iOrderShppiedBeginCount: null, __iOrderShppiedComplateCount: null, __iOrderShppiedCancelCount: null, __iOrderShppiedExchangeCount: null, __iOrderShppiedReturnCount: null, __$target: $('#xans_myshop_orderstate_shppied_before_count'), __$target2: $('#xans_myshop_orderstate_shppied_standby_count'), __$target3: $('#xans_myshop_orderstate_shppied_begin_count'), __$target4: $('#xans_myshop_orderstate_shppied_complate_count'), __$target5: $('#xans_myshop_orderstate_order_cancel_count'), __$target6: $('#xans_myshop_orderstate_order_exchange_count'), __$target7: $('#xans_myshop_orderstate_order_return_count'), isUse: function() { if ($('.xans-myshop-orderstate').length > 0) { return true; } return false; }, setData: function(aData) { this.__iOrderShppiedBeforeCount = aData['shipped_before_count']; this.__iOrderShppiedStandbyCount = aData['shipped_standby_count']; this.__iOrderShppiedBeginCount = aData['shipped_begin_count']; this.__iOrderShppiedComplateCount = aData['shipped_complate_count']; this.__iOrderShppiedCancelCount = aData['order_cancel_count']; this.__iOrderShppiedExchangeCount = aData['order_exchange_count']; this.__iOrderShppiedReturnCount = aData['order_return_count']; }, execute: function() { this.__$target.html(this.__iOrderShppiedBeforeCount); this.__$target2.html(this.__iOrderShppiedStandbyCount); this.__$target3.html(this.__iOrderShppiedBeginCount); this.__$target4.html(this.__iOrderShppiedComplateCount); this.__$target5.html(this.__iOrderShppiedCancelCount); this.__$target6.html(this.__iOrderShppiedExchangeCount); this.__$target7.html(this.__iOrderShppiedReturnCount); } }; /** * 비동기식 데이터 - 장바구니 갯수 */ CAPP_ASYNC_METHODS.aDatasetList.push('Basketcnt'); CAPP_ASYNC_METHODS.Basketcnt = { __iBasketCount: null, __$target: $('.xans-layout-orderbasketcount span a'), __$target2: $('#xans_myshop_basket_cnt'), __$target3: CAPP_ASYNC_METHODS.$xansMyshopMain.find('.xans_myshop_main_basket_cnt'), __$target4: $('.EC-Layout-Basket-count'), isUse: function() { if (this.__$target.length > 0) { return true; } if (this.__$target2.length > 0) { return true; } if (this.__$target3.length > 0) { return true; } if (this.__$target4.length > 0) { return true; } return false; }, restoreCache: function() { var sCookieName = 'basketcount_' + EC_SDE_SHOP_NUM; var re = new RegExp('(?:^| |;)' + sCookieName + '=([^;]+)'); var aCookieValue = document.cookie.match(re); if (aCookieValue) { this.__iBasketCount = parseInt(aCookieValue[1], 10); return true; } return false; }, setData: function(sData) { this.__iBasketCount = Number(sData); }, execute: function() { this.__$target.html(this.__iBasketCount); if (SHOP.getLanguage() === 'ko_KR') { this.__$target2.html(this.__iBasketCount + '개'); } else { this.__$target2.html(this.__iBasketCount); } this.__$target3.html(this.__iBasketCount); this.__$target4.html(this.__iBasketCount); if (this.__iBasketCount > 0 && this.__$target4.length > 0) { var $oCountDisplay = $('.EC-Layout_Basket-count-display'); if ($oCountDisplay.length > 0) { $oCountDisplay.removeClass('displaynone'); } } } };