/*
Punycode Javascript Converter(PJC)

PJC is a punycode encoder and decoder for non-ASCII characters. Also, it provides 
methods to convert between punycode and International Domain Name(IDN).

jkode_pjc.js	v.0.1.0
The latest version is available at
http://blog.codexpress.cn

Copyright (c) 2007 CodeXpress.cn. All rights reserved.
Created: July 5, 2007 by  Jiang Kuan (Web: http://blog.codexpress.cn )
Last modified: August 3, 2007

FOR COMMERCIAL USE:
    Please contact: codexpress.cn@gmail.com

FOR NON-COMMERCIAL USE:
    COMMON CREATIVE (Attribution-NonCommercial-NoDerivs 3.0 Unported)
You are free:
  * to Share ¡ª to copy, distribute and transmit the work
  * to Remix ¡ª to adapt the work
Under the following conditions:
  * Attribution.
    You must attribute the work in the manner specified by the author or licensor 
    (but not in any way that suggests that they endorse you or your use of the work).
  * Noncommercial.
    You may not use this work for commercial purposes.
  * No Derivative Works. 
    You may not alter, transform, or build upon this work.
For more details, see http://creativecommons.org/licenses/by-nc-nd/3.0/

NOTICE:
  * Any business concerned with domain name selling will not be considered 
NON-COMMERCIAL.
  * For non-commercial use, please KEEP ALL ABOVE UNTOUCHED.

*/


var BASE=36,TMIN=1,TMAX=26,SKEW=38,DAMP=700,INITIAL_BIAS=72,INITIAL_N=128,DELIMITER="-",MAX_INT=2147483647,$S=String.fromCharCode,$P=parseInt
function _(i){return i.length}
var Punycode=function(){},A=Punycode.prototype
A._A=function(s){return _(s)?s.charCodeAt(0):0}
A._P=function(_2,_3){var s="",p;for(p=0;p<_(_3);p++)s+=_3.charAt(_(_3)-p);p=s.indexOf(_2);return (p>-1)?_(s)-p:-1}
A._U=function(i){return (i<0)?65536+i:i}
A.$DC=function(d){var _8=0;if(d<26){_8=d+97}else{if(d<36)_8=d-26+48}return _8}
A.$CD=function(c){var _a=BASE;if((c-48)<10){_a=c-22}else{if((c-65)<26){_a=c-65}else{if((c-97)<26){_a=c-97}}}return _a}
A.$A=function(_b,_c,_d){var dt=_b,k=0;if(_d){dt=$P(dt/DAMP)}else{dt=$P(dt/2)}dt+=$P(dt/_c);while(dt>$P(((BASE-TMIN)*TMAX)/2)){dt=$P(dt/(BASE-TMIN));k+=BASE;}return(k+$P(((BASE-TMIN+1)*dt)/(dt+SKEW)))}
A._B=function(c,n){return (this._U(this._A(c))<n)}
A._G=function(n,_12){var res=MAX_INT;for(var t=0;t<_(_12);t++){var a=_12.charCodeAt(t);if((a>=n)&&(a<res))res=a}return res}
A.Encode=function(_16){var _17=_16,$O="",K=this;try{var n=INITIAL_N,_19=INITIAL_BIAS,b=0,c;for(var l=0;l<_(_17);l++){c=_17.charAt(l);if(K._B(c,INITIAL_N)){$O+=c;b++}}if(_($O)<_(_17)){if(_($O)>0){$O+=DELIMITER}}var h=b,_1e=0;while(h<_(_17)){var m=K._G(n,_17);_1e+=K._U(m-n)*(h+1);n=m;for(var l=0;l<_(_17);l++){c=_17.charAt(l);if(K._B(c,n)){_1e++}else{if(K._U(K._A(c))==n){var q=_1e;k=BASE;while(k<=MAX_INT){if(k<=(_19+TMIN)){t=TMIN}else{if(k>=(_19+TMAX)){t=TMAX}else{t=k-_19}}if(q<t)break;$O+=$S(K.$DC(t+((q-t)%(BASE-t))));q=$P((q-t)/(BASE-t));k+=BASE}$O+=$S(K.$DC(q));first=false;if(h==b)first=true;_19=K.$A(_1e,h+1,first);_1e=0;h++}}}_1e++;n++}}catch(e){$O=_16}return $O.toLowerCase()}
A.Decode=function(_22){var _23=_22,$O="",K=this;try{var n=INITIAL_N,_25=INITIAL_BIAS,i=0,c,ps=K._P(DELIMITER,_23);if(ps>-1){for(var l=0;l<ps;l++){c=_23.charAt(l);if(K._B(c,INITIAL_N)){$O+=c}else{return ""}}}ps++;while(ps<_23.length){var _2a=i,w=1,k=BASE;while((k<=MAX_INT)&&(ps<_23.length)){c=_23.charAt(ps);ps++,_2b=K.$CD(K._A(c));if((_2b>=BASE)||(_2b>$P((MAX_INT-i)/w))){return ""}i+=_2b*w;if(k<=_25){t=TMIN}else{if(k>=(_25+TMAX)){t=TMAX}else{t=k-_25}}if(_2b<t)break;if(w>$P(MAX_INT/(BASE-t))){return ""}w*=(BASE-t);k+=BASE}var _2c=(_2a==0);_25=this.$A(i-_2a,$O.length+1,_2c);if($P(i/$O.length+1)>(MAX_INT-n))return "";n+=$P(i/($O.length+1));i%=($O.length+1);if(K._B($S(n),INITIAL_N))return "";$O=$O.substr(0,i)+$S(n)+$O.substr(i);i++}}catch(e){$O=_22}return $O}
A.EncodeDomain=function(_2d){var c=_2d.split(".");for(var i=0;i<_(c);i++){if(/[^\x00-\x7f]+/.test(c[i]))c[i]="xn--"+this.Encode(c[i])}return c.join(".")}
A.DecodeDomain=function(_2f){var c=_2f.split(".");for(var i=0;i<_(c);i++){try{if(/^xn--/.test(c[i]))c[i]=this.Decode(c[i].replace("xn--",""))}catch(e){return}}return c.join(".")}

