").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
var xd=function(){function getdomain(){return domain}function getSslDomain(){return sslDomain}function include(src,callback){var script=document.createElement("script");script.type="text/javascript",script.async=!0;var ie_loaded=!1;script.onreadystatechange=function(){"loaded"!=this.readyState&&"complete"!=this.readyState||ie_loaded||(ie_loaded=!0,callback())},script.onload=callback,script.src=src;var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(script,s)}function setupJQuery(){$=jQuery,function($){$.fn.enter=function(func){return $.isFunction(func)&&this.keyup(function(e){13==e.keyCode&&func.call(this,e)}),this},$.fn.cancel=function(func){return $.isFunction(func)&&this.keyup(function(e){27==e.keyCode&&func.call(this,e)}),this},$.ajaxSetup({cache:!1})}(jQuery)}function response(valid,msg){return{valid:valid,msg:msg}}function validRealname(str){var reg=/^[\u3300-\u9fff\uf900-\ufaff]{2,}$/;return reg.test(str)?!0:!1}function validRealid(idcard){"string"==typeof idcard&&(idcard=idcard.toUpperCase());var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"},Y,JYM,S,M,idcard_array=new Array;if(idcard_array=idcard.split(""),null==area[parseInt(idcard.substr(0,2))])return!1;switch(idcard.length){case 15:return"111111111111111"==idcard?!1:(ereg=(parseInt(idcard.substr(6,2))+1900)%4==0||(parseInt(idcard.substr(6,2))+1900)%100==0&&(parseInt(idcard.substr(6,2))+1900)%4==0?/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/:/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/,ereg.test(idcard)?!0:!1);case 18:return ereg=parseInt(idcard.substr(6,4))%4==0||parseInt(idcard.substr(6,4))%100==0&&parseInt(idcard.substr(6,4))%4==0?/^[0-9]{6}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9X]$/:/^[0-9]{6}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9X]$/,ereg.test(idcard)?(S=7*(parseInt(idcard_array[0])+parseInt(idcard_array[10]))+9*(parseInt(idcard_array[1])+parseInt(idcard_array[11]))+10*(parseInt(idcard_array[2])+parseInt(idcard_array[12]))+5*(parseInt(idcard_array[3])+parseInt(idcard_array[13]))+8*(parseInt(idcard_array[4])+parseInt(idcard_array[14]))+4*(parseInt(idcard_array[5])+parseInt(idcard_array[15]))+2*(parseInt(idcard_array[6])+parseInt(idcard_array[16]))+1*parseInt(idcard_array[7])+6*parseInt(idcard_array[8])+3*parseInt(idcard_array[9]),Y=S%11,M="F",JYM="10X98765432",M=JYM.substr(Y,1),M==idcard_array[17]?!0:!1):!1;default:return!1}}function getSource(){var source=getParameterByName("source");return source||(source=getCookie("xd_source"),source||(source=getCookie("Am"))),source&&setCookie("Am",source,365,"/",".xd.com"),source}function getUser(callback,app,site){if($.isFunction(callback)){if(user)return void callback(user);"verycd"!=site&&(site=null),null===options.history_amount&&(options.history_amount=6),ajax({url:domain+"/users/getuser",dataType:"jsonp",data:{app:app,site:site,need_detail:options.need_detail,history_amount:options.history_amount},cache:!1,success:function(data){try{data&&data.id>0&&(user=data,user.returnVisitor&&trackGAPageview(gaPageLogin)),callback(data)}catch(err){}}})}}function login(username,password,remember,callback_success,callback_fail,app,site,captcha,twoauth_redirect,captcha_identifier){if($.isFunction(callback_success)&&$.isFunction(callback_fail)){if(user){if(user.username==username)return void callback_success(user);logout()}if(!logging){if(username=$.trim(username),password=$.trim(password.substr(0,500)),!username)return void callback_fail({error:"用户名为空"});if(!password)return void callback_fail({error:"密码为空"});"xd"!=site&&"verycd"!=site&&(site="xd"),captcha=captcha||null,logging=!0;var t=setTimeout(function(){logging=!1,window.location.href=domain+"/users/login?continue="+window.location.href},1e4);null===options.history_amount&&(options.history_amount=6),ssl_ajax({url:"/users/loginService",dataType:"jsonp",data:{"data[User][username]":username,"data[User][password]":password,"data[User][remember_me]":Boolean(remember),"data[User][site]":site,app:app,captcha:captcha,captcha_identifier:captcha_identifier,need_detail:options.need_detail,history_amount:options.history_amount},cache:!1,success:function(data){if(logging=!1,clearTimeout(t),data&&data.id>0){if(data.twoauth===!0){var url=domain+"/two_auth_login/index";return("/game/index.html"==window.location.pathname||"/game"==window.location.pathname)&&(url=domain+"/two_auth_login/small"),-1!==$.inArray(window.location.pathname,["/jswd","/jswd/","/ktwd","/ktwd/","/sxdwd","/sxdwd/","/sgwd","/sgwd/","/xxdwd","/xxdwd/","/sywd","/sywd/","/game/","/jswdnetbar","/jswdnetbar/","/sgwd_new","/sgwd_new/","/xxd2wd","/xxd2wd/"])?(url=domain+"/two_auth_login/small?for="+window.location.pathname,"undefined"!=typeof twoauth_redirect&&(url+="&redirect="+twoauth_redirect)):"undefined"!=typeof twoauth_redirect&&(url+="?redirect="+twoauth_redirect),void(window.location=url)}"undefined"!=typeof ga&&ga("set","dimension1",data.id),trackGAPageview(gaPageLogin),user=data;try{callback_success(user)}catch(err){}}else try{callback_fail(data)}catch(err){}},error:function(){callback_fail({msg:"500 Error"})}},!0)}}}function logout(callback){user=null,ajax({url:domain+"/users/logoutService",dataType:"jsonp",success:function(data){$.isFunction(callback)&&callback(user)}},!0)}function getServers(app,callback,isGetFutureServers){if(app&&$.isFunction(callback)){var isGetFutureServers="undefined"==typeof isGetFutureServers?!1:isGetFutureServers;return servers[app]?void callback(servers[app]):void ajax({url:domain+"/games/getservers/"+app+"/"+isGetFutureServers+"/"+options.need_server_time+"/web",dataType:"jsonp",success:function(data){data&&(servers[app]=data),callback(data)}})}}function getPlayUrl(app,sid){if(!app)return!1;var url=domain+"/games/play?app="+app;return sid&&(url+="&server="+sid),url}function checkUsername(username,callback){if(username=$.trim(username),$.isFunction(callback)){var valid=!1,msg="2-20个中英文数字";return tmp.username!=username?(tmp.username=username,username.length<2?(tmp.username_valid=valid=!1,tmp.username_msg=msg="用户名太短,至少2位",void callback(response(valid,msg))):username.length>20?(tmp.username_valid=valid=!1,tmp.username_msg=msg="用户名太长,最多20位",void callback(response(valid,msg))):username.match(/^[\w_\u3300-\u9fff\uf900-\ufaff]{2,20}$/)?void ajax({url:domain+"/users/check_username",data:{username:username},dataType:"jsonp",success:function(data){switch(data.toString()){case"1":valid=!0,msg="用户名可用";break;case"-1":valid=!1,msg="2-20个中英文数字";break;case"-2":valid=!1,msg="包含敏感字符";break;case"-3":valid=!1,msg="用户名已被注册"}tmp.username_valid=valid,tmp.username_msg=msg,callback(response(valid,msg))}}):(tmp.username_valid=valid=!1,tmp.username_msg=msg="包含非法字符请重新输入",void callback(response(valid,msg)))):void callback(response(tmp.username_valid,tmp.username_msg))}}function checkPassword(password){return password=$.trim(password),password.length<6?(tmp.password=password,response(!1,"至少6位字符(字母,数字,符号)")):(tmp.password=password,response(!0,"密码可用"))}function checkConfirm(password){return password=$.trim(password),null==tmp.password||""==tmp.password?response(!1,"请别忘记上面的密码"):password!=tmp.password?response(!1,"两次密码不一致"):response(!0,"密码一致")}function checkEmail(email,callback){if(email=$.trim(email),$.isFunction(callback)){var valid=!1,msg="请输入正确的电子邮箱";email.length>6&&email.match(/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[-_a-z0-9][-_a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})$/i)&&(valid=!0,msg="邮箱可用"),callback(response(valid,msg))}}function checkRealname(realname){return realname=$.trim(realname),validRealname(realname)?response(!0,"真实姓名"):response(!1,"请输入真实姓名")}function checkRealid(realid){return realid=$.trim(realid),validRealid(realid)?response(!0,"有效身份证"):response(!1,"请输入15或18位有效身份证")}function register(username,password,confirm,email,realname,realid,captcha,callback_success,callback_fail,wdType){function ready(field,check){function onregister(data){data.user<=0?callback_fail(data.error?response(!1,data.error):response(!1,"注册失败")):(trackGAPageview(gaPageRegister),source&&(deleteCookie("xd_source","/",".xd.com"),deleteCookie("Am","/",".xd.com")),callback_success(data))}if(valid){if(!check.valid)return valid=!1,void callback_fail(check);checked[field]=!0;for(i in checked)if(!checked[i])return;var params={username:username,password:password,confirm:confirm};email&&(params.email=email),realname&&(params.realname=realname),realid&&(params.realid=realid),captcha&&(params.captcha=captcha),wdType&&("string"==typeof GAME_NAME&&"js"===GAME_NAME&&"boolean"==typeof direct_play&&direct_play===!1?params.wdType=wdType:"string"==typeof GAME_NAME&&"js"!==GAME_NAME&&(params.wdType=wdType));var gclid=getParameterByName("gclid");""!=gclid&&(params.gclid=gclid);var source=getSource();source&&(params.source=source),ssl_ajax({url:"/users/registerService",success:onregister,error:onregister,cache:!1,data:params,dataType:"jsonp"},!0)}}if(username=$.trim(username),password=$.trim(password.substr(0,500)),confirm=$.trim(confirm.substr(0,500)),email=$.trim(email),realname=$.trim(realname),realid=$.trim(realid),captcha=$.trim(captcha),$.isFunction(callback_success)&&$.isFunction(callback_fail)){var checked={username:!1,password:!1,confirm:!1};email&&(checked.email=!1),realname&&(checked.realname=!1),realid&&(checked.realid=!1);var valid=!0;checkUsername(username,function(response){ready("username",response)}),ready("password",checkPassword(password)),ready("confirm",checkConfirm(confirm)),email&&checkEmail(email,function(response){ready("email",response)}),realname&&ready("realname",checkRealname(realname)),realid&&ready("realid",checkRealid(realid))}}function getCookie(name){for(var nameEQ=name+"=",ca=document.cookie.split(";"),i=0;i
-1?1:password.match(/^\d+$/)||password.match(/^[a-z]+$/i)?4:password.match(/^[0-9a-z]+$/i)?2:3:!1}function getCity(callback){return visitorCity?void callback(visitorCity):void ajax({url:domain+"/users/getCity",dataType:"jsonp",success:function(data){visitorCity=data,callback(visitorCity)}})}function wechat_login(callback){$.isFunction(callback)||(callback=function(){window.location.reload()}),open_window(domain+"/oauth/weixin_login?continue="+window.location.href,callback,"WeixinLogin",650,550)}function registerForm(regFormSelector,onRegister,redirect,playApp,requireRealInfo,requireEmail,requireAgreement,requireCaptcha,customInfo,use_qq_login_game,wdType){function checkUsernameInput(){xd.checkUsername(usernameInput.val(),function(res){checkInput.username=res.valid;var info=res.msg;"undefined"!=typeof customInfo[res.msg]&&(info=customInfo[res.msg]),usernameInfo.length>0?(usernameInfo.show().html(0==usernameInput.val().length?info:info),usernameInfo.removeClass("infoOk infoError"),usernameInput.removeClass("inputOk inputError"),usernameInfo.addClass(res.valid?"infoOk":"infoError"),usernameInput.addClass(res.valid?"inputOk":"inputError")):alert(info),checkSubmit()})}function showUserNamePrompt(){var info="2-20个中英文字符、数字或下划线";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),usernameInfo.removeClass("infoOk infoError"),usernameInput.removeClass("inputOk inputError"),usernameInfo.html(info),usernameInfo.show()}function checkPasswordInput(){var res=xd.checkPassword(passwordInput.val());checkInput.password=res.valid;var msg=res.msg;if(checkInput.password){var password=passwordInput.val(),psstClass="psstWeak";if(password==usernameInput.val())msg="强度弱";else{var strongness=xd.check_password_strongness(password);msg="强度弱",psstClass="psstWeak",4==strongness&&(msg="强度低",psstClass="psstLow"),2==strongness?(msg="强度中",psstClass="psstNormal"):3==strongness&&(msg="强度高",psstClass="psstHigh")}}"undefined"!=typeof customInfo[msg]&&(msg=customInfo[msg]),passwordInfo.length>0?(0==passwordInput.val().length?passwordInfo.show():passwordInfo.html(msg).show(),passwordInfo.removeClass("infoOk infoError psstWeak psstNormal psstHigh"),passwordInput.removeClass("inputOk inputError psstWeak psstNormal psstHigh"),passwordInfo.addClass(res.valid?"infoOk":"infoError"),passwordInput.addClass(res.valid?"inputOk":"inputError"),passwordInfo.addClass(psstClass)):alert(msg),confirmInput.length>0&&confirmInput.val().length>0&&checkConfirmInput(),checkSubmit()}function showPasswordPrompt(){var info="至少6位字符(字母,数字,符号)";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),passwordInfo.removeClass("infoOk infoError psstWeak psstNormal psstHigh"),passwordInput.removeClass("inputOk inputError psstWeak psstNormal psstHigh"),passwordInfo.html(info),passwordInfo.show()}function checkConfirmInput(){var res=xd.checkConfirm(confirmInput.val());checkInput.confirm=res.valid;var info=res.msg;"undefined"!=typeof customInfo[res.msg]&&(info=customInfo[res.msg]),confirmInfo.length>0?(0==confirmInput.val().length?confirmInfo.show():confirmInfo.html(info).show(),confirmInfo.removeClass("infoOk infoError"),confirmInput.removeClass("inputOk inputError"),confirmInfo.addClass(res.valid?"infoOk":"infoError"),confirmInput.addClass(res.valid?"inputOk":"inputError")):alert(info),checkSubmit()}function confirmPrompt(){var info="请再次输入密码,确保密码一致";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),confirmInfo.removeClass("infoOk infoError"),confirmInput.removeClass("inputOk inputError"),confirmInfo.html(info),confirmInfo.show()}function checkRealnameInput(){var res=xd.checkRealname(realnameInput.val());checkInput.realname=res.valid;var info=res.msg;"undefined"!=typeof customInfo[res.msg]&&(info=customInfo[res.msg]),realnameInfo.length>0?(0==realnameInput.val().length?realnameInfo.show():realnameInfo.html(info).show(),realnameInfo.removeClass("infoOk infoError"),realnameInput.removeClass("inputOk inputError"),realnameInfo.addClass(res.valid?"infoOk":"infoError"),realnameInput.addClass(res.valid?"inputOk":"inputError")):alert(info),checkSubmit()}function realnamePrompt(){var info="请输入真实姓名";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),realnameInfo.removeClass("infoOk infoError"),realnameInput.removeClass("inputOk inputError"),realnameInfo.html(info),realnameInfo.show()}function checkRealidInput(){var res=xd.checkRealid(realidInput.val());checkInput.realid=res.valid;var info=res.msg;"undefined"!=typeof customInfo[res.msg]&&(info=customInfo[res.msg]),realidInfo.length>0?(0==realidInput.val().length?realidInfo.show():realidInfo.html(info).show(),realidInfo.removeClass("infoOk infoError"),realidInput.removeClass("inputOk inputError"),realidInfo.addClass(res.valid?"infoOk":"infoError"),realidInput.addClass(res.valid?"inputOk":"inputError")):alert(info),checkSubmit()}function realidPrompt(){var info="请输入有效身份证,注册后将无法更改";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),realidInfo.removeClass("infoOk infoError"),realidInput.removeClass("inputOk inputError"),realidInfo.html(info),realidInfo.show()}function showRealInfo(){checkInput.realname=!1,checkInput.realid=!1,realnameInput.blur(checkRealnameInput),realidInput.blur(checkRealidInput),realnameInput.focus(realnamePrompt),realidInput.focus(realidPrompt),realnameField.show(),realidField.show(),checkFunctions.realname=checkRealnameInput,checkFunctions.realid=checkRealidInput}function hideRealInfo(){realnameField.hide(),realidField.hide()}function checkEmailInput(){xd.checkEmail(emailInput.val(),function(res){checkInput.email=res.valid;var info=res.msg;"undefined"!=typeof customInfo[res.msg]&&(info=customInfo[res.msg]),emailInfo.length>0?(0==emailInput.val().length?emailInfo.show():emailInfo.html(info).show(),emailInfo.removeClass("infoOk infoError"),emailInput.removeClass("inputOk inputError"),emailInfo.addClass(res.valid?"infoOk":"infoError"),emailInput.addClass(res.valid?"inputOk":"inputError")):alert(info),checkSubmit()})}function emailPrompt(){var info="常用的邮箱,方便您找回密码";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),emailInfo.removeClass("infoOk infoError"),emailInput.removeClass("inputOk inputError"),emailInfo.html(info),emailInfo.show()}function showEmail(){checkInput.email=!1,emailInput.blur(checkEmailInput),emailInput.focus(emailPrompt),checkFunctions.email=checkEmailInput,emailField.show()}function hideEmail(){emailField.hide()}function checkAgreementInput(){if(checkInput.agreement=agreementInput.is(":checked"),checkInput.agreement)agreementInfo.length>0&&agreementInfo.hide();else{var info="请同意用户协议";"undefined"!=typeof customInfo[info]&&(msg=customInfo[info]),agreementInfo.length>0?agreementInfo.html(info).addClass("infoError").show():alert(info)}checkSubmit()}function showAgreement(){checkInput.agreement=agreementInput.is(":checked"),agreementInput.change(checkAgreementInput),agreementField.show(),checkFunctions.agreement=checkAgreementInput}function hideAgreement(){agreementField.hide()}function checkCaptchaInput(){var captcha=$.trim(captchaInput.val());checkInput.captcha=captcha.length>0;var info="请输入图片验证码";"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),captchaInfo.length>0?(captchaInfo.html(info).show(),captchaInfo.removeClass("infoOk infoError"),captchaInput.removeClass("inputOk inputError"),captchaInfo.addClass(checkInput.captcha?"infoOk":"infoError"),captchaInput.addClass(checkInput.captcha?"inputOk":"inputError")):alert(info),checkSubmit()}function showCaptcha(){captchaField.length?captchaField.is(":hidden")&&(checkInput.captcha=!1,captchaImg.attr("src",xd.getCaptchaUrl()),captchaImg.click(function(){captchaImg.attr("src",xd.getCaptchaUrl())}),captchaRefresh.click(function(){captchaImg.attr("src",xd.getCaptchaUrl())}),captchaInput.blur(checkCaptchaInput),captchaInput.enter(function(){checkCaptchaInput()}),captchaField.show(),checkFunctions.captcha=checkCaptchaInput,captchaField.trigger("isVisible")):"/users/register"!=window.location.pathname&&(window.location.href=domain+"/users/register?continue="+encodeURIComponent(window.location.href)+"&captcha=1")}function hideCaptcha(){captchaField.hide()}function isAds(){return window.location.search.match(/(\?|&)ads(=|$|&)/i)||window.location.search.match(/(\?|&)source=baidu_pinpai($|&)/i)?!0:!1}function checkSubmit(callCheckInputFunctions){"undefined"==typeof callCheckInputFunctions&&(callCheckInputFunctions=!1);var valid=!0,firstInvalid=!0;for(var i in checkInput)if(!checkInput[i]){if(valid=!1,!callCheckInputFunctions)break;var info=regFormSelector+" ."+i+"Info";$(info).hasClass("infoError")||$.isFunction(checkFunctions[i])&&checkFunctions[i]();var input=regFormSelector+" ."+i+"Input";firstInvalid&&(firstInvalid=!1,$(input).focus().addClass("inputError"))}return valid}function regSubmit(){return registering?!1:checkSubmit(!0)?(registering=!0,regForm.trigger("isReging"),xd.register(usernameInput.val(),passwordInput.val(),confirmInput.val(),emailInput.val(),realnameInput.val(),realidInput.val(),captchaInput.val(),function(user){regForm.trigger("isRegOk"),registering=!1,$.isFunction(onRegister)?onRegister(user):redirect?window.location=redirect:playApp?window.location=xd.getPlayUrl(playApp):document.referrer&&(window.location=document.referrer)},function(res){regForm.trigger("isRegError"),registering=!1;var info=res.msg;"undefined"!=typeof customInfo[info]&&(info=customInfo[info]),("图片验证码错误"==res.msg||"请输入图片验证码"==res.msg)&&showCaptcha(),captchaField.is(":visible")&&captchaImg.click(),registerInfo.length>0?(registerInfo.html(info).show(),registerInfo.addClass("infoError")):alert(info)},wdType),!1):!1}checkUserExist(onRegister,redirect,playApp);var regForm=$(regFormSelector);if(0!=regForm.length){var usernameField=$(regFormSelector+" .usernameField"),usernameInput=$(regFormSelector+" .usernameInput"),usernameInfo=$(regFormSelector+" .usernameInfo");if(0!=usernameField.length){var passwordField=$(regFormSelector+" .passwordField"),passwordInput=$(regFormSelector+" .passwordInput"),passwordInfo=$(regFormSelector+" .passwordInfo");if(0!=passwordField.length){var confirmField=$(regFormSelector+" .confirmField"),confirmInput=$(regFormSelector+" .confirmInput"),confirmInfo=$(regFormSelector+" .confirmInfo"),realnameField=$(regFormSelector+" .realnameField"),realnameInput=$(regFormSelector+" .realnameInput"),realnameInfo=$(regFormSelector+" .realnameInfo"),realidField=$(regFormSelector+" .realidField"),realidInput=$(regFormSelector+" .realidInput"),realidInfo=$(regFormSelector+" .realidInfo"),emailField=$(regFormSelector+" .emailField"),emailInput=$(regFormSelector+" .emailInput"),emailInfo=$(regFormSelector+" .emailInfo"),agreementField=$(regFormSelector+" .agreementField"),agreementInput=$(regFormSelector+" .agreementInput"),agreementInfo=$(regFormSelector+" .agreementInfo"),captchaField=$(regFormSelector+" .captchaField"),captchaInput=$(regFormSelector+" .captchaInput"),captchaImg=$(regFormSelector+" .captchaImg"),captchaRefresh=$(regFormSelector+" .captchaRefresh"),captchaInfo=$(regFormSelector+" .captchaInfo"),registerButton=$(regFormSelector+" .submitInput"),registerInfo=$(regFormSelector+" .submitInfo"),qqField=$(regFormSelector+" .qqField"),verycdField=$(regFormSelector+" .verycdField"),checkInput={username:!1,password:!1},checkFunctions={};customInfo||(customInfo={}),usernameInput.blur(checkUsernameInput),usernameInput.focus(showUserNamePrompt),checkFunctions.username=checkUsernameInput,passwordInput.blur(checkPasswordInput),passwordInput.focus(showPasswordPrompt),checkFunctions.password=checkPasswordInput,confirmField.length>0&&(checkInput.confirm=!1,confirmInput.blur(checkConfirmInput),confirmInput.focus(confirmPrompt),confirmInput.enter(function(){checkConfirmInput()}),checkFunctions.confirm=checkConfirmInput);var checkAdsOrCity=[];if(realnameField.length>0&&(requireRealInfo?showRealInfo():checkAdsOrCity.push([showRealInfo,hideRealInfo])),emailField.length>0&&(requireEmail?showEmail():checkAdsOrCity.push([showEmail,hideEmail])),agreementField.length>0&&(requireAgreement?showAgreement():checkAdsOrCity.push([showAgreement,hideAgreement])),checkAdsOrCity.length>0)if(isAds())for(var i in checkAdsOrCity)checkAdsOrCity[i][1]();else xd.getCity(function(city){if(city=city.substring(0,2),"上海"==city||"北京"==city)for(var i in checkAdsOrCity)checkAdsOrCity[i][0]();else for(var i in checkAdsOrCity)checkAdsOrCity[i][1]()});1==getParameterByName("captcha")&&showCaptcha();var registering=!1;regForm.submit(regSubmit),usernameInput.is(":visible")&&usernameInput.focus(),qqField.length>0&&qqField.click(function(){use_qq_login_game?qq_login_game(function(){checkUserExist(onRegister,redirect,playApp)}):qq_login(function(){checkUserExist(onRegister,redirect,playApp)})}),verycdField.length>0&&verycdField.click(function(){verycd_login(function(){checkUserExist(onRegister,redirect,playApp)})})}}}}function loginForm(loginFormSelector,onLogin,redirect,playApp,requireCaptcha,customInfo,twoauthRedirect,use_qq_login_game){function showCaptcha(){captchaField.is(":hidden")&&(captchaImg.click(showCaptcha),captchaField.show()),captchaImg.attr("src",xd.getCaptchaUrl())}function hideCaptcha(){captchaField.hide()}function showErrorMsg(msg){"验证码错误"==msg&&"undefined"!=typeof window.login_first_time&&window.login_first_time&&(msg="请输入验证码",window.login_first_time=!1),"undefined"!=typeof customInfo[msg]&&(msg=customInfo[msg]),loginInfo.length>0?(loginInfo.html(msg).addClass("infoError").show(),loginInfo.trigger("isInfoError")):-1==msg.indexOf("验证码")&&alert(msg),focusByMsg(msg)}function focusByMsg(msg){if(-1!==msg.indexOf("密码")){passwordInput.val("").focus();var li=passwordInput.closest("li.passwordField");li.length&&li.addClass("border-error")}else if(-1!==msg.indexOf("验证码")){captchaInput.val("").focus();var li=captchaInput.closest("li.captchaField");li.length&&li.addClass("border-error")}else if(-1!==msg.indexOf("用户名")){usernameInput.focus();var li=usernameInput.closest("li.usernameField");li.length&&li.addClass("border-error")}}function loginSubmit(){if(logining)return!1;var li=loginForm.find(".formlist li");li.length&&li.removeClass("border-error");var username=usernameInput.val();if(!username)return showErrorMsg("请输入用户名"),!1;var password=passwordInput.val();if(!password)return showErrorMsg("请输入密码"),!1;var captcha="",captcha_identifier="";if(captchaField.is(":visible")){if(captcha=$.trim(captchaInput.val()),0==captcha.length)return showErrorMsg("请输入验证码"),!1;var captcha_url=captchaImg.attr("src");captcha_url&&(captcha_identifier=captcha_url.substr(captcha_url.lastIndexOf("/")+1))}var remember=rememberInput.is(":checked");return logining=!0,twoauthRedirect||(twoauthRedirect=window.location.href),xd.login(username,password,remember,function(user){logining=!1,$.isFunction(onLogin)?onLogin(user):redirect?window.location=redirect:playApp?window.location=xd.getPlayUrl(playApp):document.referrer&&(window.location=document.referrer)},function(res){logining=!1,res.needCaptcha&&showCaptcha(),showErrorMsg(res.error)},playApp,site,captcha,twoauthRedirect,captcha_identifier),!1}checkUserExist(onLogin,redirect,playApp);var loginForm=$(loginFormSelector);if(0!=loginForm.length){var usernameInput=$(loginFormSelector+" .usernameInput");if(0!=usernameInput.length){var passwordInput=$(loginFormSelector+" .passwordInput");if(0!=passwordInput.length){var rememberInput=$(loginFormSelector+" .rememberInput"),captchaField=$(loginFormSelector+" .captchaField"),captchaInput=$(loginFormSelector+" .captchaInput"),captchaImg=$(loginFormSelector+" .captchaImg"),loginButton=$(loginFormSelector+" .submitInput"),loginInfo=$(loginFormSelector+" .submitInfo"),qqField=$(loginFormSelector+" .qqField"),verycdField=$(loginFormSelector+" .verycdField"),wxField=$(loginFormSelector+" .wxField"),site=$(loginFormSelector+" .siteInput").val();customInfo||(customInfo={}),captchaField.length>0&&requireCaptcha&&showCaptcha();
var logining=!1;loginForm.submit(loginSubmit),usernameInput.is(":visible")&&usernameInput.focus(),qqField.length>0&&qqField.click(function(){use_qq_login_game?qq_login_game(function(){checkUserExist(onLogin,redirect,playApp)}):qq_login(function(){checkUserExist(onLogin,redirect,playApp)})}),verycdField.length>0&&verycdField.click(function(){verycd_login(function(){checkUserExist(onLogin,redirect,playApp)})}),wxField.length>0&&wxField.click(function(){wx_login(function(){checkUserExist(onLogin,redirect,playApp)})})}}}}function checkUserExist(callback,redirect,playApp){checking||(checking=!0,xd.getUser(function(user){"function"==typeof topnav_user_check&&topnav_user_check(user),user.id>0&&($.isFunction(callback)?callback(user):redirect?window.location=redirect:playApp?window.location=xd.getPlayUrl(playApp):document.referrer&&(window.location=document.referrer)),checking=!1},playApp))}function trackGAPageview(page){page&&"undefined"!=typeof ga&&ga("send","pageview",page)}function validateDate(dateStr){if(!dateStr.match(/\d{8}/i))return!1;var year=dateStr.substr(0,4),month=dateStr.substr(4,2),day=dateStr.substr(6,2),date=new Date(year+"-"+month+"-"+day);return year==date.getFullYear()&&month==date.getMonth()+1&&day==date.getDate()?!0:!1}function ssl_ajax(data,direct_send){var timeout=5e3,timeouter=null,statusText="pendding",splited_url=data.url.split("/"),uri="/",ssl_callback_success=data.success,ssl_callback_error=data.error,ssl_callback_timeout=function(){"success"!=statusText&&(statusText="try again",data.url=domain+uri,ajax(data,direct_send),timeouter=null)};0===splited_url[0].indexOf("http")?uri+=splited_url.slice(3).join("/"):uri=data.url,data.url=sslDomain+uri,data.success=function(data,textStatus,jqXHR){return timeouter&&(clearTimeout(timeouter),timeouter=null),"success"==statusText?!1:(statusText="success",void("function"==typeof ssl_callback_success&&ssl_callback_success(data,textStatus,jqXHR)))},data.error=function(jqXHR,textStatus,errorThrown){timeouter?(clearTimeout(timeouter),timeouter=null,ssl_callback_timeout()):"function"==typeof ssl_callback_error&&ssl_callback_error(jqXHR,textStatus,errorThrown)},timeouter=setTimeout(ssl_callback_timeout,timeout),"undefined"==typeof data.data&&(data.data={}),data.data.rqst_sgntr=Math.random(),ajax(data,direct_send)}function ajax(data,direct_send){var url=data.url;return ajaxQueue===!1||direct_send===!0?$.ajax(data):url.match(/(?:https?:)?\/\//i)&&!url.match(/(?:https?:)?\/\/[\w\d._-]*www\.xd\.com(.*)/)?$.ajax(data):(ajaxQueue.push(data),ajaxQueueTimeout!==!1&&clearTimeout(ajaxQueueTimeout),void(ajaxQueueTimeout=setTimeout(function(){sendAjaxQueue()},500)))}function sendAjaxQueue(goon){if(!ajaxQueue.length)return void(ajaxQueue=!1);if(1==ajaxQueue.length)return $.ajax(ajaxQueue.pop());var sentData=ajaxQueueParse(ajaxQueue);goon===!0?ajaxQueue=[]:(ajaxQueue=!1,clearTimeout(ajaxQueueTimeout),ajaxQueueTimeout=!1),$.ajax({url:domain+"/remoteapi/getdata",dataType:"jsonp",data:sentData.data,cache:!1,success:function(data){try{for(url in data)for(i in data[url])if(sentData.success[url]&&$.isFunction(sentData.success[url][i])){var pdata=data[url][i];if("string"==typeof pdata){var matches=pdata.match(/^[\w\d_]+\((.+)\);?$/);matches&&(pdata=eval(matches[1]))}sentData.success[url][i](pdata)}}catch(err){}},error:function(data){try{for(url in data)for(i in data[url])sentData.error[url]&&$.isFunction(sentData.error[url][i])&&sentData.error[url][i](data[url][i])}catch(err){}}})}function ajaxQueueParse(queue){var parsed_queue={data:{}};for(i in queue){var data=queue[i],url=data.url,index=0,match=!1,match=url.match(/(?:https?:)?\/\/[\w\d._-]*www\.xd\.com(.*)/);match&&(url=match[1]),parsed_queue.data[url]||(parsed_queue.data[url]=[]),parsed_queue.data[url].push(data.data?data.data:{noparam:!0}),delete data.url,delete data.data,index=parsed_queue.data[url].length-1;for(i in data)parsed_queue[i]||(parsed_queue[i]={}),parsed_queue[i][url]||(parsed_queue[i][url]=[]),parsed_queue[i][url][index]=data[i]}return parsed_queue}function getSession(){ajax({url:domain+"/remoteapi/get_session",dataType:"jsonp",cache:!1,success:function(data){data&&setCookie("A1",data,30,"/",".xd.com")}},!0)}function sendWdRequest(name,callback){var data={type:name};ajax({url:domain+"/wd/statistical/",dataType:"jsonp",cache:!1,data:data,success:callback},!0)}function autoRegister(callback,regType){var data={};"undefined"!=typeof regType&&(data={regType:regType}),ajax({url:domain+"/games/createAutoRegister/",dataType:"jsonp",cache:!1,data:data,success:callback})}function getSourceFromServer(callback,user_id){var data={};"undefined"!=typeof user_id&&"number"==typeof user_id&&(data={userid:user_id}),ajax({url:domain+"/users/getUserSource",dataType:"jsonp",cache:!1,data:data,success:callback})}function getShortCookie(callback){ajax({url:domain+"/oauth/getShortCookie",dataType:"jsonp",success:callback})}function resolveShortCookie(callback,shortCookie){ajax({url:domain+"/oauth/resolveShortCookie",dataType:"jsonp",complete:callback,data:{shortCookie:shortCookie}})}function setOption(key,value){options[key]=value}var domain="http://www.xd.com",sslDomain="https://ssl.xd.com";0==window.location.host.indexOf("ssl.xd.com")?domain=sslDomain:0==window.location.host.indexOf("local.")?domain=sslDomain=window.location.protocol+"//local.www.xd.com":window.location.host.indexOf("office.")>0?domain=sslDomain="http://"+window.location.host.replace(/^.*\.office\./i,"www.office."):"https:"==window.location.protocol&&(domain=sslDomain=/^(api|www|pay)\.xd\.com/.test(window.location.host)?window.location.origin:"https://api.xd.com");var user=null,servers=[],logging=!1,tmp={},history=[],options={};options.history_amount=null,options.need_detail=!1,options.need_server_time=!1;var $;if("undefined"==typeof jQuery){var jq="http://web.xdcdn.net/xd/vendor/js/jquery.js";"https:"==window.location.protocol&&(jq="https://web.xdcdn.net/xd/vendor/js/jquery.js"),include(jq,setupJQuery)}else setupJQuery();var showCount=0,visitorCity,checking=!1,gaPageLogin="/logs/login",gaPageRegister="/logs/join",gaPageQqRegister="/logs/join/qq",gaPageQqLogin="/logs/login/qq",ajaxQueue=[],ajaxQueueTimeout=null;return ajaxQueueTimeout=setTimeout(function(){sendAjaxQueue()},500),getSource(),{setOption:setOption,getUser:getUser,login:login,logout:logout,getServers:getServers,getPlayUrl:getPlayUrl,checkUsername:checkUsername,checkPassword:checkPassword,checkConfirm:checkConfirm,checkEmail:checkEmail,checkRealname:checkRealname,checkRealid:checkRealid,register:register,getCookie:getCookie,setCookie:setCookie,deleteCookie:deleteCookie,clearCookie:clearCookie,getSite:getSite,setSite:setSite,bookmarkMe:bookmarkMe,getParameterByName:getParameterByName,capitaliseFirstLetter:capitaliseFirstLetter,setDomain:setDomain,getPlayedHistory:getPlayedHistory,getCaptchaUrl:getCaptchaUrl,qq_login:qq_login,qq_redirect:qq_redirect,weibo_login:weibo_login,verycd_login:verycd_login,wx_login:wx_login,qq_login_game:qq_login_game,getdomain:getdomain,getSslDomain:getSslDomain,check_password_strongness:check_password_strongness,getSource:getSource,getCity:getCity,registerForm:registerForm,loginForm:loginForm,validateDate:validateDate,ajax:ajax,sendAjaxQueue:sendAjaxQueue,sendWdRequest:sendWdRequest,autoRegister:autoRegister,getSourceFromServer:getSourceFromServer,getShortCookie:getShortCookie,resolveShortCookie:resolveShortCookie,wechat_login:wechat_login}}();
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b
*/
var debugMode = false;
// Opera Mini v7 doesn't support placeholder although its DOM seems to indicate so
var isOperaMini = Object.prototype.toString.call(window.operamini) === '[object OperaMini]';
var isInputSupported = 'placeholder' in document.createElement('input') && !isOperaMini && !debugMode;
var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini && !debugMode;
var valHooks = $.valHooks;
var propHooks = $.propHooks;
var hooks;
var placeholder;
var settings = {};
if (isInputSupported && isTextareaSupported) {
placeholder = $.fn.placeholder = function() {
return this;
};
placeholder.input = true;
placeholder.textarea = true;
} else {
placeholder = $.fn.placeholder = function(options) {
var defaults = {customClass: 'placeholder'};
settings = $.extend({}, defaults, options);
return this.filter((isInputSupported ? 'textarea' : ':input') + '[' + (debugMode ? 'placeholder-x' : 'placeholder') + ']')
.not('.'+settings.customClass)
.not(':radio, :checkbox, [type=hidden]')
.bind({
'focus.placeholder': clearPlaceholder,
'blur.placeholder': setPlaceholder
})
.data('placeholder-enabled', true)
.trigger('blur.placeholder');
};
placeholder.input = isInputSupported;
placeholder.textarea = isTextareaSupported;
hooks = {
'get': function(element) {
var $element = $(element);
var $passwordInput = $element.data('placeholder-password');
if ($passwordInput) {
return $passwordInput[0].value;
}
return $element.data('placeholder-enabled') && $element.hasClass(settings.customClass) ? '' : element.value;
},
'set': function(element, value) {
var $element = $(element);
var $replacement;
var $passwordInput;
if (value !== '') {
$replacement = $element.data('placeholder-textinput');
$passwordInput = $element.data('placeholder-password');
if ($replacement) {
clearPlaceholder.call($replacement[0], true, value) || (element.value = value);
$replacement[0].value = value;
} else if ($passwordInput) {
clearPlaceholder.call(element, true, value) || ($passwordInput[0].value = value);
element.value = value;
}
}
if (!$element.data('placeholder-enabled')) {
element.value = value;
return $element;
}
if (value === '') {
element.value = value;
// Setting the placeholder causes problems if the element continues to have focus.
if (element != safeActiveElement()) {
// We can't use `triggerHandler` here because of dummy text/password inputs :(
setPlaceholder.call(element);
}
} else {
if ($element.hasClass(settings.customClass)) {
clearPlaceholder.call(element);
}
element.value = value;
}
// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
return $element;
}
};
if (!isInputSupported) {
valHooks.input = hooks;
propHooks.value = hooks;
}
if (!isTextareaSupported) {
valHooks.textarea = hooks;
propHooks.value = hooks;
}
$(function() {
// Look for forms
$(document).delegate('form', 'submit.placeholder', function() {
// Clear the placeholder values so they don't get submitted
var $inputs = $('.'+settings.customClass, this).each(function() {
clearPlaceholder.call(this, true, '');
});
setTimeout(function() {
$inputs.each(setPlaceholder);
}, 10);
});
});
// Clear placeholder values upon page reload
$(window).bind('beforeunload.placeholder', function() {
var clearPlaceholders = true;
try {
// Prevent IE javascript:void(0) anchors from causing cleared values
if (document.activeElement.toString() === 'javascript:void(0)') {
clearPlaceholders = false;
}
} catch (exception) { }
if (clearPlaceholders) {
$('.'+settings.customClass).each(function() {
this.value = '';
});
}
});
}
function args(elem) {
// Return an object of element attributes
var newAttrs = {};
var rinlinejQuery = /^jQuery\d+$/;
$.each(elem.attributes, function(i, attr) {
if (attr.specified && !rinlinejQuery.test(attr.name)) {
newAttrs[attr.name] = attr.value;
}
});
return newAttrs;
}
function clearPlaceholder(event, value) {
var input = this;
var $input = $(this);
if (input.value === $input.attr((debugMode ? 'placeholder-x' : 'placeholder')) && $input.hasClass(settings.customClass)) {
input.value = '';
$input.removeClass(settings.customClass);
if ($input.data('placeholder-password')) {
$input = $input.hide().nextAll('input[type="password"]:first').show().attr('id', $input.removeAttr('id').data('placeholder-id'));
// If `clearPlaceholder` was called from `$.valHooks.input.set`
if (event === true) {
$input[0].value = value;
return value;
}
$input.focus();
} else {
input == safeActiveElement() && input.select();
}
}
}
function setPlaceholder(event) {
var $replacement;
var input = this;
var $input = $(this);
var id = input.id;
// If the placeholder is activated, triggering blur event (`$input.trigger('blur')`) should do nothing.
if (event && event.type === 'blur' && $input.hasClass(settings.customClass)) {
return;
}
if (input.value === '') {
if (input.type === 'password') {
if (!$input.data('placeholder-textinput')) {
try {
$replacement = $input.clone().prop({ 'type': 'text' });
} catch(e) {
$replacement = $(' ').attr($.extend(args(this), { 'type': 'text' }));
}
$replacement
.removeAttr('name')
.data({
'placeholder-enabled': true,
'placeholder-password': $input,
'placeholder-id': id
})
.bind('focus.placeholder', clearPlaceholder);
$input
.data({
'placeholder-textinput': $replacement,
'placeholder-id': id
})
.before($replacement);
}
input.value = '';
$input = $input.removeAttr('id').hide().prevAll('input[type="text"]:first').attr('id', $input.data('placeholder-id')).show();
} else {
var $passwordInput = $input.data('placeholder-password');
if ($passwordInput) {
$passwordInput[0].value = '';
$input.attr('id', $input.data('placeholder-id')).show().nextAll('input[type="password"]:last').hide().removeAttr('id');
}
}
$input.addClass(settings.customClass);
$input[0].value = $input.attr((debugMode ? 'placeholder-x' : 'placeholder'));
} else {
$input.removeClass(settings.customClass);
}
}
function safeActiveElement() {
// Avoid IE9 `document.activeElement` of death
try {
return document.activeElement;
} catch (exception) {}
}
}));
/* ========================================================================
* Bootstrap: transition.js v3.3.7
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
$(this).one('bsTransitionEnd', function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
if (!$.support.transition) return
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
}
}
})
}(jQuery);
/* ========================================================================
* Bootstrap: affix.js v3.3.7
* http://getbootstrap.com/javascript/#affix
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// AFFIX CLASS DEFINITION
// ======================
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target)
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
this.$element = $(element)
this.affixed = null
this.unpin = null
this.pinnedOffset = null
this.checkPosition()
}
Affix.VERSION = '3.3.7'
Affix.RESET = 'affix affix-top affix-bottom'
Affix.DEFAULTS = {
offset: 0,
target: window
}
Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
var scrollTop = this.$target.scrollTop()
var position = this.$element.offset()
var targetHeight = this.$target.height()
if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
if (this.affixed == 'bottom') {
if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
}
var initializing = this.affixed == null
var colliderTop = initializing ? scrollTop : position.top
var colliderHeight = initializing ? targetHeight : height
if (offsetTop != null && scrollTop <= offsetTop) return 'top'
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
return false
}
Affix.prototype.getPinnedOffset = function () {
if (this.pinnedOffset) return this.pinnedOffset
this.$element.removeClass(Affix.RESET).addClass('affix')
var scrollTop = this.$target.scrollTop()
var position = this.$element.offset()
return (this.pinnedOffset = position.top - scrollTop)
}
Affix.prototype.checkPositionWithEventLoop = function () {
setTimeout($.proxy(this.checkPosition, this), 1)
}
Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return
var height = this.$element.height()
var offset = this.options.offset
var offsetTop = offset.top
var offsetBottom = offset.bottom
var scrollHeight = Math.max($(document).height(), $(document.body).height())
if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
if (this.affixed != affix) {
if (this.unpin != null) this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix')
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
this.affixed = affix
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
this.$element
.removeClass(Affix.RESET)
.addClass(affixType)
.trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
}
if (affix == 'bottom') {
this.$element.offset({
top: scrollHeight - height - offsetBottom
})
}
}
// AFFIX PLUGIN DEFINITION
// =======================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.affix')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.affix
$.fn.affix = Plugin
$.fn.affix.Constructor = Affix
// AFFIX NO CONFLICT
// =================
$.fn.affix.noConflict = function () {
$.fn.affix = old
return this
}
// AFFIX DATA-API
// ==============
$(window).on('load', function () {
$('[data-spy="affix"]').each(function () {
var $spy = $(this)
var data = $spy.data()
data.offset = data.offset || {}
if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
if (data.offsetTop != null) data.offset.top = data.offsetTop
Plugin.call($spy, data)
})
})
}(jQuery);
/* ========================================================================
* Bootstrap: button.js v3.3.7
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// BUTTON PUBLIC CLASS DEFINITION
// ==============================
var Button = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}
Button.VERSION = '3.3.7'
Button.DEFAULTS = {
loadingText: 'loading...'
}
Button.prototype.setState = function (state) {
var d = 'disabled'
var $el = this.$element
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()
state += 'Text'
if (data.resetText == null) $el.data('resetText', $el[val]())
// push to event loop to allow forms to submit
setTimeout($.proxy(function () {
$el[val](data[state] == null ? this.options[state] : data[state])
if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d).prop(d, true)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d).prop(d, false)
}
}, this), 0)
}
Button.prototype.toggle = function () {
var changed = true
var $parent = this.$element.closest('[data-toggle="buttons"]')
if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
if ($input.prop('checked')) changed = false
$parent.find('.active').removeClass('active')
this.$element.addClass('active')
} else if ($input.prop('type') == 'checkbox') {
if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
this.$element.toggleClass('active')
}
$input.prop('checked', this.$element.hasClass('active'))
if (changed) $input.trigger('change')
} else {
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
this.$element.toggleClass('active')
}
}
// BUTTON PLUGIN DEFINITION
// ========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option
if (!data) $this.data('bs.button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
var old = $.fn.button
$.fn.button = Plugin
$.fn.button.Constructor = Button
// BUTTON NO CONFLICT
// ==================
$.fn.button.noConflict = function () {
$.fn.button = old
return this
}
// BUTTON DATA-API
// ===============
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target).closest('.btn')
Plugin.call($btn, 'toggle')
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
e.preventDefault()
// The target component still receive the focus
if ($btn.is('input,button')) $btn.trigger('focus')
else $btn.find('input:visible,button:visible').first().trigger('focus')
}
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
})
}(jQuery);
/* ========================================================================
* Bootstrap: collapse.js v3.3.7
* http://getbootstrap.com/javascript/#collapse
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
/* jshint latedef: false */
+function ($) {
'use strict';
// COLLAPSE PUBLIC CLASS DEFINITION
// ================================
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
this.transitioning = null
if (this.options.parent) {
this.$parent = this.getParent()
} else {
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
}
if (this.options.toggle) this.toggle()
}
Collapse.VERSION = '3.3.7'
Collapse.TRANSITION_DURATION = 350
Collapse.DEFAULTS = {
toggle: true
}
Collapse.prototype.dimension = function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
Collapse.prototype.show = function () {
if (this.transitioning || this.$element.hasClass('in')) return
var activesData
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
if (actives && actives.length) {
activesData = actives.data('bs.collapse')
if (activesData && activesData.transitioning) return
}
var startEvent = $.Event('show.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
if (actives && actives.length) {
Plugin.call(actives, 'hide')
activesData || actives.data('bs.collapse', null)
}
var dimension = this.dimension()
this.$element
.removeClass('collapse')
.addClass('collapsing')[dimension](0)
.attr('aria-expanded', true)
this.$trigger
.removeClass('collapsed')
.attr('aria-expanded', true)
this.transitioning = 1
var complete = function () {
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('')
this.transitioning = 0
this.$element
.trigger('shown.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
this.$element
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
}
Collapse.prototype.hide = function () {
if (this.transitioning || !this.$element.hasClass('in')) return
var startEvent = $.Event('hide.bs.collapse')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var dimension = this.dimension()
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass('collapsing')
.removeClass('collapse in')
.attr('aria-expanded', false)
this.$trigger
.addClass('collapsed')
.attr('aria-expanded', false)
this.transitioning = 1
var complete = function () {
this.transitioning = 0
this.$element
.removeClass('collapsing')
.addClass('collapse')
.trigger('hidden.bs.collapse')
}
if (!$.support.transition) return complete.call(this)
this.$element
[dimension](0)
.one('bsTransitionEnd', $.proxy(complete, this))
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
}
Collapse.prototype.toggle = function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
Collapse.prototype.getParent = function () {
return $(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
}, this))
.end()
}
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
var isOpen = $element.hasClass('in')
$element.attr('aria-expanded', isOpen)
$trigger
.toggleClass('collapsed', !isOpen)
.attr('aria-expanded', isOpen)
}
function getTargetFromTrigger($trigger) {
var href
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target)
}
// COLLAPSE PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.collapse')
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
var old = $.fn.collapse
$.fn.collapse = Plugin
$.fn.collapse.Constructor = Collapse
// COLLAPSE NO CONFLICT
// ====================
$.fn.collapse.noConflict = function () {
$.fn.collapse = old
return this
}
// COLLAPSE DATA-API
// =================
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $(this)
if (!$this.attr('data-target')) e.preventDefault()
var $target = getTargetFromTrigger($this)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $this.data()
Plugin.call($target, option)
})
}(jQuery);
/* ========================================================================
* Bootstrap: dropdown.js v3.3.7
* http://getbootstrap.com/javascript/#dropdowns
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// DROPDOWN CLASS DEFINITION
// =========================
var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle)
}
Dropdown.VERSION = '3.3.7'
function getParent($this) {
var selector = $this.attr('data-target')
if (!selector) {
selector = $this.attr('href')
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
var $parent = selector && $(selector)
return $parent && $parent.length ? $parent : $this.parent()
}
function clearMenus(e) {
if (e && e.which === 3) return
$(backdrop).remove()
$(toggle).each(function () {
var $this = $(this)
var $parent = getParent($this)
var relatedTarget = { relatedTarget: this }
if (!$parent.hasClass('open')) return
if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$this.attr('aria-expanded', 'false')
$parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
})
}
Dropdown.prototype.toggle = function (e) {
var $this = $(this)
if ($this.is('.disabled, :disabled')) return
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
clearMenus()
if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we use a backdrop because click events don't delegate
$(document.createElement('div'))
.addClass('dropdown-backdrop')
.insertAfter($(this))
.on('click', clearMenus)
}
var relatedTarget = { relatedTarget: this }
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
if (e.isDefaultPrevented()) return
$this
.trigger('focus')
.attr('aria-expanded', 'true')
$parent
.toggleClass('open')
.trigger($.Event('shown.bs.dropdown', relatedTarget))
}
return false
}
Dropdown.prototype.keydown = function (e) {
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
var $this = $(this)
e.preventDefault()
e.stopPropagation()
if ($this.is('.disabled, :disabled')) return
var $parent = getParent($this)
var isActive = $parent.hasClass('open')
if (!isActive && e.which != 27 || isActive && e.which == 27) {
if (e.which == 27) $parent.find(toggle).trigger('focus')
return $this.trigger('click')
}
var desc = ' li:not(.disabled):visible a'
var $items = $parent.find('.dropdown-menu' + desc)
if (!$items.length) return
var index = $items.index(e.target)
if (e.which == 38 && index > 0) index-- // up
if (e.which == 40 && index < $items.length - 1) index++ // down
if (!~index) index = 0
$items.eq(index).trigger('focus')
}
// DROPDOWN PLUGIN DEFINITION
// ==========================
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.dropdown')
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
var old = $.fn.dropdown
$.fn.dropdown = Plugin
$.fn.dropdown.Constructor = Dropdown
// DROPDOWN NO CONFLICT
// ====================
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
// APPLY TO STANDARD DROPDOWN ELEMENTS
// ===================================
$(document)
.on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
.on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
}(jQuery);
/* ========================================================================
* Bootstrap: modal.js v3.3.7
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// MODAL CLASS DEFINITION
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
if (this.options.remote) {
this.$element
.find('.modal-content')
.load(this.options.remote, $.proxy(function () {
this.$element.trigger('loaded.bs.modal')
}, this))
}
}
Modal.VERSION = '3.3.7'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
show: true
}
Modal.prototype.toggle = function (_relatedTarget) {
return this.isShown ? this.hide() : this.show(_relatedTarget)
}
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) return
this.isShown = true
this.checkScrollbar()
this.setScrollbar()
this.$body.addClass('modal-open')
this.escape()
this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
})
})
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
that.$element.appendTo(that.$body) // don't move modals dom position
}
that.$element
.show()
.scrollTop(0)
that.adjustDialog()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
that.enforceFocus()
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
transition ?
that.$dialog // wait for modal to slide in
.one('bsTransitionEnd', function () {
that.$element.trigger('focus').trigger(e)
})
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
that.$element.trigger('focus').trigger(e)
})
}
Modal.prototype.hide = function (e) {
if (e) e.preventDefault()
e = $.Event('hide.bs.modal')
this.$element.trigger(e)
if (!this.isShown || e.isDefaultPrevented()) return
this.isShown = false
this.escape()
this.resize()
$(document).off('focusin.bs.modal')
this.$element
.removeClass('in')
.off('click.dismiss.bs.modal')
.off('mouseup.dismiss.bs.modal')
this.$dialog.off('mousedown.dismiss.bs.modal')
$.support.transition && this.$element.hasClass('fade') ?
this.$element
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
this.hideModal()
}
Modal.prototype.enforceFocus = function () {
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (document !== e.target &&
this.$element[0] !== e.target &&
!this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
}
Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) {
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
e.which == 27 && this.hide()
}, this))
} else if (!this.isShown) {
this.$element.off('keydown.dismiss.bs.modal')
}
}
Modal.prototype.resize = function () {
if (this.isShown) {
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
} else {
$(window).off('resize.bs.modal')
}
}
Modal.prototype.hideModal = function () {
var that = this
this.$element.hide()
this.backdrop(function () {
that.$body.removeClass('modal-open')
that.resetAdjustments()
that.resetScrollbar()
that.$element.trigger('hidden.bs.modal')
})
}
Modal.prototype.removeBackdrop = function () {
this.$backdrop && this.$backdrop.remove()
this.$backdrop = null
}
Modal.prototype.backdrop = function (callback) {
var that = this
var animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $(document.createElement('div'))
.addClass('modal-backdrop ' + animate)
.appendTo(this.$body)
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
if (this.ignoreBackdropClick) {
this.ignoreBackdropClick = false
return
}
if (e.target !== e.currentTarget) return
this.options.backdrop == 'static'
? this.$element[0].focus()
: this.hide()
}, this))
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
if (!callback) return
doAnimate ?
this.$backdrop
.one('bsTransitionEnd', callback)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
var callbackRemove = function () {
that.removeBackdrop()
callback && callback()
}
$.support.transition && this.$element.hasClass('fade') ?
this.$backdrop
.one('bsTransitionEnd', callbackRemove)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callbackRemove()
} else if (callback) {
callback()
}
}
// these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
this.adjustDialog()
}
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
Modal.prototype.resetAdjustments = function () {
this.$element.css({
paddingLeft: '',
paddingRight: ''
})
}
Modal.prototype.checkScrollbar = function () {
var fullWindowWidth = window.innerWidth
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
var documentElementRect = document.documentElement.getBoundingClientRect()
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
}
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
this.scrollbarWidth = this.measureScrollbar()
}
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
}
Modal.prototype.measureScrollbar = function () { // thx walsh
var scrollDiv = document.createElement('div')
scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append(scrollDiv)
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
this.$body[0].removeChild(scrollDiv)
return scrollbarWidth
}
// MODAL PLUGIN DEFINITION
// =======================
function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option](_relatedTarget)
else if (options.show) data.show(_relatedTarget)
})
}
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
// MODAL NO CONFLICT
// =================
$.fn.modal.noConflict = function () {
$.fn.modal = old
return this
}
// MODAL DATA-API
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
$target.one('show.bs.modal', function (showEvent) {
if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
$target.one('hidden.bs.modal', function () {
$this.is(':visible') && $this.trigger('focus')
})
})
Plugin.call($target, option, this)
})
}(jQuery);
/*
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2015 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.9.5
*
*/
(function($, window, document, undefined) {
var $window = $(window);
function detectRetina(){
var mediaQuery = "(-webkit-min-device-pixel-ratio: 1.5),\
(min--moz-device-pixel-ratio: 1.5),\
(-o-min-device-pixel-ratio: 3/2),\
(min-resolution: 1.5dppx)";
if (window.devicePixelRatio > 1)
return true;
if (window.matchMedia && window.matchMedia(mediaQuery).matches)
return true;
return false;
}
var isRetina = detectRetina();
$.fn.lazyload = function(options) {
var elements = this;
var $container;
var settings = {
threshold : 0,
failure_limit : 0,
event : "scroll",
effect : "show",
container : window,
data_attribute : "original",
skip_invisible : false,
appear : null,
load : null,
placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
};
function update() {
var counter = 0;
elements.each(function() {
var $this = $(this);
if (settings.skip_invisible && !$this.is(":visible")) {
return;
}
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$this.trigger("appear");
/* if we found an image we'll load, reset the counter */
counter = 0;
} else {
if (++counter > settings.failure_limit) {
return false;
}
}
});
}
if(options) {
/* Maintain BC for a couple of versions. */
if (undefined !== options.failurelimit) {
options.failure_limit = options.failurelimit;
delete options.failurelimit;
}
if (undefined !== options.effectspeed) {
options.effect_speed = options.effectspeed;
delete options.effectspeed;
}
$.extend(settings, options);
}
/* Cache container as jQuery as object. */
$container = (settings.container === undefined ||
settings.container === window) ? $window : $(settings.container);
/* Fire one scroll event per scroll. Not one scroll event per image. */
if (0 === settings.event.indexOf("scroll")) {
$container.bind(settings.event, function() {
return update();
});
}
this.each(function() {
var self = this;
var $self = $(self);
self.loaded = false;
/* If no src attribute given use data:uri. */
if ($self.attr("src") === undefined || $self.attr("src") === false) {
if ($self.is("img")) {
$self.attr("src", settings.placeholder);
}
}
/* When appear is triggered load original image. */
$self.one("appear", function() {
if (!this.loaded) {
if (settings.appear) {
var elements_left = elements.length;
settings.appear.call(self, elements_left, settings);
}
$(" ")
.bind("load", function() {
var original = $self.attr("data-" + settings.data_attribute);
var original_retina = $self.attr("data-"+settings.data_attribute+"-retina"); //for retina 2016-10-17
$self.hide();
if ($self.is("img")) {
$self.attr("src", original);
if(original_retina) {
$self.attr('srcset', original_retina);
}
} else {
$self.css("background-image", "url('" + original + "')");
if(original_retina && isRetina) {
$self.css('background-image', "url('" + original_retina + "')");
// var style = $self.attr('style');
// style += ';background-image: -webkit-image-set( url('+original+') 1x, url('+original_retina+') 2x)';
// $self.attr('style', style);
}
}
$self[settings.effect](settings.effect_speed);
self.loaded = true;
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function(element) {
return !element.loaded;
});
elements = $(temp);
if (settings.load) {
var elements_left = elements.length;
settings.load.call(self, elements_left, settings);
}
})
.attr("src", $self.attr("data-" + settings.data_attribute));
}
});
/* When wanted event is triggered load original image */
/* by triggering appear. */
if (0 !== settings.event.indexOf("scroll")) {
$self.bind(settings.event, function() {
if (!self.loaded) {
$self.trigger("appear");
}
});
}
});
/* Check if something appears when window is resized. */
$window.bind("resize", function() {
update();
});
/* With IOS5 force loading images when navigating with back button. */
/* Non optimal workaround. */
if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
$window.bind("pageshow", function(event) {
if (event.originalEvent && event.originalEvent.persisted) {
elements.each(function() {
$(this).trigger("appear");
});
}
});
}
/* Force initial check if images should appear. */
$(document).ready(function() {
update();
});
return this;
};
/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */
$.belowthefold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
} else {
fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};
$.rightoffold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.width() + $window.scrollLeft();
} else {
fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};
$.abovethetop = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollTop();
} else {
fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};
$.leftofbegin = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollLeft();
} else {
fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
$.inviewport = function(element, settings) {
return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
!$.belowthefold(element, settings) && !$.abovethetop(element, settings);
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() or */
/* $("img").filter(":below-the-fold").something() which is faster */
$.extend($.expr[":"], {
"below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
"above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
"in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); },
/* Maintain BC for couple of versions. */
"above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); }
});
//for xd lazyload 2016-10-17
$(document).on('lazyload.xd.image', '.xd-lazyload', function () {
$(this).lazyload({
load: function(){
$(this).addClass('xd-lazyload-in');
}
});
});
$('.xd-lazyload').trigger('lazyload.xd.image');
})(jQuery, window, document);
!function($){"use strict";function setPos(){rollerY=$(window).scrollTop(),screenY=$(window).height(),200>rollerY?$container.hide():$container.show()}var $win=$(window),$body=$("body"),$header=$("#header");if($header.on("click",".navbar-toggle, .navbar-overlay",function(){return $body.toggleClass("show-navbar"),!1}),$body.on("click",".navbar-xd .navbar-toggle",function(){return $(this).closest(".navbar-xd").toggleClass("navbar-unfold"),!1}),$(document).on("click.xd.login.qq",".qq-field",function(e){return xd.qq_login(),!1}),$(document).on("click.xd.login.verycd",".verycd-field",function(e){return xd.verycd_login(),!1}),$(document).on("click.xd.login.wechat",".wechat-field",function(e){return xd.wechat_login(),!1}),$(".kefu-qq-link").on("click",function(){return window.open("http://wpa.b.qq.com/cgi/wpa.php?ln=1&key=XzgwMDAzMDg4MF8xNjg2NjVfODAwMDMwODgwXzJf","_blank","height=544, width=644,toolbar=no,scrollbars=no,menubar=no,status=no"),!1}),$(".modal[data-autoload=true]").eq(0).modal("show"),$("input, textarea").placeholder(),$("#goTopContainer").length){var $container=$("#goTopContainer"),goTopElem=$container.find(".go-top"),elemHeight=$container.height(),rollerY,screenY,footerH=0,limit=100;goTopElem.on("click",function(){return $("html, body").animate({scrollTop:0},500),!1}),$(window).resize(setPos).scroll(setPos).load(setPos)}$("#header .input-search").on("keydown",function(){13==event.keyCode&&$("#header .submit-search").trigger("click")}),xd.toEmail=function(email){var s1=email.split("@"),target=s1[1],emails={};return emails["verycd.com"]="http://mail.google.com",emails["qq.com"]="http://mail.qq.com",emails["vip.qq.com"]="http://mail.qq.com",emails["foxmail.com"]="http://mail.qq.com",emails["163.com"]="http://mail.163.com",emails["126.com"]="http://www.126.com",emails["gmail.com"]="http://mail.google.com",emails["yahoo.com.cn"]="http://mail.cn.yahoo.com/",emails["yahoo.cn"]="http://mail.cn.yahoo.com/",emails["hotmail.com"]="http://www.hotmail.com",emails["LIVE.COM"]="http://www.hotmail.com",emails["LIVE.CN"]="http://www.hotmail.com",emails["sina.com"]="http://mail.sina.com.cn/",emails["vip.sina.com"]="http://mail.sina.com.cn/",emails["139.com"]="http://mail.10086.cn/",emails["tom.com"]="http://mail.tom.com/",emails["21cn.com"]="http://mail.21cn.com/",emails["sogou.com"]="http://mail.sogou.com/",emails["189.com"]="http://www.189.cn/webmail/",emails["yeah.net"]="http://www.yeah.net/",emails["sohu.com"]="http://mail.sohu.com/",emails["eyou.com"]="http://www.eyou.com",emails[target]}}(window.jQuery);
!function($){var Xdshare=function(element,options){this.$element=$(element),this.options=$.extend({},Xdshare.DEFAULTS,options),this.shareList=["sina","qweibo","qzone","renren","douban"],this.shareRule={sina:function(titleShort,title,pic,url){var arr=[];title&&arr.push("title="+(titleShort?"%23"+titleShort+"%23":"")+title),pic&&arr.push("pic="+pic),url&&arr.push("url="+url);var s=arr.join("&");return s?"http://v.t.sina.com.cn/share/share.php?"+s:!1},qweibo:function(titleShort,title,pic,url){var arr=[];title&&arr.push("title="+(titleShort?"%23"+titleShort+"%23":"")+title),pic&&arr.push("pic="+pic),url&&arr.push("url="+url);var s=arr.join("&");return s?"http://share.v.t.qq.com/index.php?c=share&a=index&"+s:!1},qzone:function(title,desc,pics,url){var arr=[];title&&arr.push("title="+title),desc&&arr.push("desc="+desc),pics&&arr.push("pics="+pics),url&&arr.push("url="+url);var s=arr.join("&");return s?"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?"+s:!1},renren:function(title,description,pic,resourceUrl){var arr=[];title&&arr.push("title="+title),description&&arr.push("description="+description),pic&&arr.push("pic="+pic),resourceUrl&&arr.push("resourceUrl="+resourceUrl);var s=arr.join("&");return s?"http://widget.renren.com/dialog/share?"+s:!1},douban:function(title,description,pic,resourceUrl){var arr=[];title&&arr.push("name="+title),description&&arr.push("text="+description),pic&&arr.push("image="+pic),resourceUrl&&arr.push("href="+resourceUrl);var s=arr.join("&");return s?"http://www.douban.com/share/service?"+s:!1}}};Xdshare.DEFAULTS={titleShort:$("title").text(),title:$("meta[name=description]").attr("content")||$("title").text(),pic:"",url:window.location.href},Xdshare.prototype.to=function(type){if(rule=this.shareRule[type]){var url=rule(this.options.titleShort,this.options.title,this.options.pic,this.options.url);return url&&window.open(url),!1}};var old=$.fn.xdshare;$.fn.xdshare=function(option){return this.each(function(){var $this=$(this),data=$this.data("xdshare"),options=$.extend({},Xdshare.DEFAULTS,$this.data(),"object"==typeof option&&option);data||$this.data("xdshare",data=new Xdshare(this,options))})},$.fn.xdshare.Constructor=Xdshare,"undefined"!=typeof $.fn.button&&($.fn.button.noConflict=function(){return $.fn.xdshare=old,this}),$(".xdshare").on("click.xdshare","[data-share]",function(e){var $this=$(this),href,$target=$this.closest(".xdshare"),options=$.extend({},$target.data(),$this.data());$target.xdshare(options),(type=$this.data("share"))&&($target.data("xdshare").to(type),$(this).trigger("shared.xd.share")),e.preventDefault()}),$(window).on("load",function(){$(".xdshare").each(function(){var $xdshare=$(this);$xdshare.xdshare($xdshare.data())})})}(window.jQuery);
/**
* @fileoverview
* - Using the 'QRCode for Javascript library'
* - Fixed dataset of 'QRCode for Javascript library' for support full-spec.
* - this library has no dependencies.
*
* @author davidshimjs
* @see http://www.d-project.com/
* @see http://jeromeetienne.github.com/jquery-qrcode/
*/
var QRCode;
(function () {
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
// http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
// http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
function QR8bitByte(data) {
this.mode = QRMode.MODE_8BIT_BYTE;
this.data = data;
this.parsedData = [];
// Added to support UTF-8 Characters
for (var i = 0, l = this.data.length; i < l; i++) {
var byteArray = [];
var code = this.data.charCodeAt(i);
if (code > 0x10000) {
byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
byteArray[3] = 0x80 | (code & 0x3F);
} else if (code > 0x800) {
byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
byteArray[2] = 0x80 | (code & 0x3F);
} else if (code > 0x80) {
byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
byteArray[1] = 0x80 | (code & 0x3F);
} else {
byteArray[0] = code;
}
this.parsedData.push(byteArray);
}
this.parsedData = Array.prototype.concat.apply([], this.parsedData);
if (this.parsedData.length != this.data.length) {
this.parsedData.unshift(191);
this.parsedData.unshift(187);
this.parsedData.unshift(239);
}
}
QR8bitByte.prototype = {
getLength: function (buffer) {
return this.parsedData.length;
},
write: function (buffer) {
for (var i = 0, l = this.parsedData.length; i < l; i++) {
buffer.put(this.parsedData[i], 8);
}
}
};
function QRCodeModel(typeNumber, errorCorrectLevel) {
this.typeNumber = typeNumber;
this.errorCorrectLevel = errorCorrectLevel;
this.modules = null;
this.moduleCount = 0;
this.dataCache = null;
this.dataList = [];
}
QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);}
return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row=7){this.setupTypeNumber(test);}
if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}
this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}
return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}
for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}
for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}
this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);}
var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}
this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}
row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;itotalDataCount*8){throw new Error("code length overflow. ("
+buffer.getLengthInBits()
+">"
+totalDataCount*8
+")");}
if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}
while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}
while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}
buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}
buffer.put(QRCodeModel.PAD1,8);}
return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.get(modIndex):0;}}
var totalCodeCount=0;for(var i=0;i=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}
return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}
return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}
return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}}
for(var row=0;row=256){n-=255;}
return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}
if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}
this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];
function _isSupportCanvas() {
return typeof CanvasRenderingContext2D != "undefined";
}
// android 2.x doesn't support Data-URI spec
function _getAndroid() {
var android = false;
var sAgent = navigator.userAgent;
if (/android/i.test(sAgent)) { // android
android = true;
var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i);
if (aMat && aMat[1]) {
android = parseFloat(aMat[1]);
}
}
return android;
}
var svgDrawer = (function() {
var Drawing = function (el, htOption) {
this._el = el;
this._htOption = htOption;
};
Drawing.prototype.draw = function (oQRCode) {
var _htOption = this._htOption;
var _el = this._el;
var nCount = oQRCode.getModuleCount();
var nWidth = Math.floor(_htOption.width / nCount);
var nHeight = Math.floor(_htOption.height / nCount);
this.clear();
function makeSVG(tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);
return el;
}
var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});
svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
_el.appendChild(svg);
svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"}));
svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"}));
for (var row = 0; row < nCount; row++) {
for (var col = 0; col < nCount; col++) {
if (oQRCode.isDark(row, col)) {
var child = makeSVG("use", {"x": String(col), "y": String(row)});
child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template")
svg.appendChild(child);
}
}
}
};
Drawing.prototype.clear = function () {
while (this._el.hasChildNodes())
this._el.removeChild(this._el.lastChild);
};
return Drawing;
})();
var useSVG = document.documentElement.tagName.toLowerCase() === "svg";
// Drawing in DOM by using Table tag
var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {
var Drawing = function (el, htOption) {
this._el = el;
this._htOption = htOption;
};
/**
* Draw the QRCode
*
* @param {QRCode} oQRCode
*/
Drawing.prototype.draw = function (oQRCode) {
var _htOption = this._htOption;
var _el = this._el;
var nCount = oQRCode.getModuleCount();
var nWidth = Math.floor(_htOption.width / nCount);
var nHeight = Math.floor(_htOption.height / nCount);
var aHTML = [''];
for (var row = 0; row < nCount; row++) {
aHTML.push('');
for (var col = 0; col < nCount; col++) {
aHTML.push(' ');
}
aHTML.push(' ');
}
aHTML.push('
');
_el.innerHTML = aHTML.join('');
// Fix the margin values as real size.
var elTable = _el.childNodes[0];
var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;
var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;
if (nLeftMarginTable > 0 && nTopMarginTable > 0) {
elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";
}
};
/**
* Clear the QRCode
*/
Drawing.prototype.clear = function () {
this._el.innerHTML = '';
};
return Drawing;
})() : (function () { // Drawing in Canvas
function _onMakeImage() {
this._elImage.src = this._elCanvas.toDataURL("image/png");
this._elImage.style.display = "block";
this._elCanvas.style.display = "none";
}
// Android 2.1 bug workaround
// http://code.google.com/p/android/issues/detail?id=5141
if (this._android && this._android <= 2.1) {
var factor = 1 / window.devicePixelRatio;
var drawImage = CanvasRenderingContext2D.prototype.drawImage;
CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {
if (("nodeName" in image) && /img/i.test(image.nodeName)) {
for (var i = arguments.length - 1; i >= 1; i--) {
arguments[i] = arguments[i] * factor;
}
} else if (typeof dw == "undefined") {
arguments[1] *= factor;
arguments[2] *= factor;
arguments[3] *= factor;
arguments[4] *= factor;
}
drawImage.apply(this, arguments);
};
}
/**
* Check whether the user's browser supports Data URI or not
*
* @private
* @param {Function} fSuccess Occurs if it supports Data URI
* @param {Function} fFail Occurs if it doesn't support Data URI
*/
function _safeSetDataURI(fSuccess, fFail) {
var self = this;
self._fFail = fFail;
self._fSuccess = fSuccess;
// Check it just once
if (self._bSupportDataURI === null) {
var el = document.createElement("img");
var fOnError = function() {
self._bSupportDataURI = false;
if (self._fFail) {
self._fFail.call(self);
}
};
var fOnSuccess = function() {
self._bSupportDataURI = true;
if (self._fSuccess) {
self._fSuccess.call(self);
}
};
el.onabort = fOnError;
el.onerror = fOnError;
el.onload = fOnSuccess;
el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data.
return;
} else if (self._bSupportDataURI === true && self._fSuccess) {
self._fSuccess.call(self);
} else if (self._bSupportDataURI === false && self._fFail) {
self._fFail.call(self);
}
};
/**
* Drawing QRCode by using canvas
*
* @constructor
* @param {HTMLElement} el
* @param {Object} htOption QRCode Options
*/
var Drawing = function (el, htOption) {
this._bIsPainted = false;
this._android = _getAndroid();
this._htOption = htOption;
this._elCanvas = document.createElement("canvas");
this._elCanvas.width = htOption.width;
this._elCanvas.height = htOption.height;
el.appendChild(this._elCanvas);
this._el = el;
this._oContext = this._elCanvas.getContext("2d");
this._bIsPainted = false;
this._elImage = document.createElement("img");
this._elImage.alt = "Scan me!";
this._elImage.style.display = "none";
this._el.appendChild(this._elImage);
this._bSupportDataURI = null;
};
/**
* Draw the QRCode
*
* @param {QRCode} oQRCode
*/
Drawing.prototype.draw = function (oQRCode) {
var _elImage = this._elImage;
var _oContext = this._oContext;
var _htOption = this._htOption;
var nCount = oQRCode.getModuleCount();
var nWidth = _htOption.width / nCount;
var nHeight = _htOption.height / nCount;
var nRoundedWidth = Math.round(nWidth);
var nRoundedHeight = Math.round(nHeight);
_elImage.style.display = "none";
this.clear();
for (var row = 0; row < nCount; row++) {
for (var col = 0; col < nCount; col++) {
var bIsDark = oQRCode.isDark(row, col);
var nLeft = col * nWidth;
var nTop = row * nHeight;
_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
_oContext.lineWidth = 1;
_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
_oContext.fillRect(nLeft, nTop, nWidth, nHeight);
// 안티 앨리어싱 방지 처리
_oContext.strokeRect(
Math.floor(nLeft) + 0.5,
Math.floor(nTop) + 0.5,
nRoundedWidth,
nRoundedHeight
);
_oContext.strokeRect(
Math.ceil(nLeft) - 0.5,
Math.ceil(nTop) - 0.5,
nRoundedWidth,
nRoundedHeight
);
}
}
this._bIsPainted = true;
};
/**
* Make the image from Canvas if the browser supports Data URI.
*/
Drawing.prototype.makeImage = function () {
if (this._bIsPainted) {
_safeSetDataURI.call(this, _onMakeImage);
}
};
/**
* Return whether the QRCode is painted or not
*
* @return {Boolean}
*/
Drawing.prototype.isPainted = function () {
return this._bIsPainted;
};
/**
* Clear the QRCode
*/
Drawing.prototype.clear = function () {
this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);
this._bIsPainted = false;
};
/**
* @private
* @param {Number} nNumber
*/
Drawing.prototype.round = function (nNumber) {
if (!nNumber) {
return nNumber;
}
return Math.floor(nNumber * 1000) / 1000;
};
return Drawing;
})();
/**
* Get the type by string length
*
* @private
* @param {String} sText
* @param {Number} nCorrectLevel
* @return {Number} type
*/
function _getTypeNumber(sText, nCorrectLevel) {
var nType = 1;
var length = _getUTF8Length(sText);
for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
var nLimit = 0;
switch (nCorrectLevel) {
case QRErrorCorrectLevel.L :
nLimit = QRCodeLimitLength[i][0];
break;
case QRErrorCorrectLevel.M :
nLimit = QRCodeLimitLength[i][1];
break;
case QRErrorCorrectLevel.Q :
nLimit = QRCodeLimitLength[i][2];
break;
case QRErrorCorrectLevel.H :
nLimit = QRCodeLimitLength[i][3];
break;
}
if (length <= nLimit) {
break;
} else {
nType++;
}
}
if (nType > QRCodeLimitLength.length) {
throw new Error("Too long data");
}
return nType;
}
function _getUTF8Length(sText) {
var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
return replacedText.length + (replacedText.length != sText ? 3 : 0);
}
/**
* @class QRCode
* @constructor
* @example
* new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie");
*
* @example
* var oQRCode = new QRCode("test", {
* text : "http://naver.com",
* width : 128,
* height : 128
* });
*
* oQRCode.clear(); // Clear the QRCode.
* oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode.
*
* @param {HTMLElement|String} el target element or 'id' attribute of element.
* @param {Object|String} vOption
* @param {String} vOption.text QRCode link data
* @param {Number} [vOption.width=256]
* @param {Number} [vOption.height=256]
* @param {String} [vOption.colorDark="#000000"]
* @param {String} [vOption.colorLight="#ffffff"]
* @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H]
*/
QRCode = function (el, vOption) {
this._htOption = {
width : 256,
height : 256,
typeNumber : 4,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRErrorCorrectLevel.H
};
if (typeof vOption === 'string') {
vOption = {
text : vOption
};
}
// Overwrites options
if (vOption) {
for (var i in vOption) {
this._htOption[i] = vOption[i];
}
}
if (typeof el == "string") {
el = document.getElementById(el);
}
if (this._htOption.useSVG) {
Drawing = svgDrawer;
}
this._android = _getAndroid();
this._el = el;
this._oQRCode = null;
this._oDrawing = new Drawing(this._el, this._htOption);
if (this._htOption.text) {
this.makeCode(this._htOption.text);
}
};
/**
* Make the QRCode
*
* @param {String} sText link data
*/
QRCode.prototype.makeCode = function (sText) {
this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
this._oQRCode.addData(sText);
this._oQRCode.make();
this._el.title = sText;
this._oDrawing.draw(this._oQRCode);
this.makeImage();
};
/**
* Make the Image from Canvas element
* - It occurs automatically
* - Android below 3 doesn't support Data-URI spec.
*
* @private
*/
QRCode.prototype.makeImage = function () {
if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) {
this._oDrawing.makeImage();
}
};
/**
* Clear the QRCode
*/
QRCode.prototype.clear = function () {
this._oDrawing.clear();
};
/**
* @name QRCode.CorrectLevel
*/
QRCode.CorrectLevel = QRErrorCorrectLevel;
})();
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0 ',image:'The requested content cannot be loaded. Please try again later.
',closeBtn:'