function DBNCrypto(key,magik)
{
	this.Key = key;
	this.Magik = magik;
	this.ChArr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ/0123456789_abcdefghijklmnopqrstuvwxyz';
	this.Ch2Var = DBNCh2Var;
	this.Var2Ch = DBNVar2Ch;
	this.Encode = DBNEncode;
}

function DBNCh2Var(ch)
{
	return this.ChArr.indexOf(ch);
}

function DBNVar2Ch(val)
{
	return this.ChArr.charAt(val);
}

function DBNEncode(str)
{
	var ea = Array();
	
	var i = 0;
	var ts = '';
	var tv = 0;
	
	while (i < str.length) {
		ts = str.substr(i,3);
		switch(ts.length) {
			case 3: tv = ts.charCodeAt(0) + (ts.charCodeAt(1) << 8) + (ts.charCodeAt(2) << 16); break;
			case 2: tv = ts.charCodeAt(0) + (ts.charCodeAt(1) << 8); break;
			case 1: tv = ts.charCodeAt(0); break;
		}
		tv ^= this.Key[(i/3) % 6];
		ea.push(tv);
		i += 3;
	}
	i=0;
	var ostr = '';
	while (i < ea.length) {
		ostr += this.Var2Ch((ea[i] >> 0) & 0x3f);
		ostr += this.Var2Ch((ea[i] >> 6) & 0x3f);
		ostr += this.Var2Ch((ea[i] >> 12) & 0x3f);
		ostr += this.Var2Ch((ea[i] >> 18) & 0x3f);
		i++;
	}
	ostr = ostr.substr(0,6) + this.Magik.charAt(0) + ostr.substr(6,10) + 
	       this.Magik.charAt(1) + ostr.substr(16);
	return ostr;		 
}