$estr = function() { return js.Boot.__string_rec(this,''); }
if(typeof net=='undefined') net = {}
if(!net.vixns) net.vixns = {}
if(!net.vixns.chat) net.vixns.chat = {}
net.vixns.chat.IFlash = function() { }
net.vixns.chat.IFlash.__name__ = ["net","vixns","chat","IFlash"];
net.vixns.chat.IFlash.prototype.acceptInvite = null;
net.vixns.chat.IFlash.prototype.cancelInvite = null;
net.vixns.chat.IFlash.prototype.closeAll = null;
net.vixns.chat.IFlash.prototype.connect = null;
net.vixns.chat.IFlash.prototype.init = null;
net.vixns.chat.IFlash.prototype.publishVideo = null;
net.vixns.chat.IFlash.prototype.rejectInvite = null;
net.vixns.chat.IFlash.prototype.sendInvite = null;
net.vixns.chat.IFlash.prototype.sendMessage = null;
net.vixns.chat.IFlash.prototype.__class__ = net.vixns.chat.IFlash;
VixnsChat = function() { }
VixnsChat.__name__ = ["VixnsChat"];
VixnsChat.main = function() {
	if(haxe.Firebug.detect()) haxe.Firebug.redirectTraces();
	domReady.DomReady.onReady($closure(VixnsChat,"run"));
}
VixnsChat.run = function() {
	net.vixns.chat.JsApi.init();
}
VixnsChat.prototype.__class__ = VixnsChat;
StringTools = function() { }
StringTools.__name__ = ["StringTools"];
StringTools.urlEncode = function(s) {
	return encodeURIComponent(s);
}
StringTools.urlDecode = function(s) {
	return decodeURIComponent(s.split("+").join(" "));
}
StringTools.htmlEscape = function(s) {
	return s.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
}
StringTools.htmlUnescape = function(s) {
	return s.split("&gt;").join(">").split("&lt;").join("<").split("&amp;").join("&");
}
StringTools.startsWith = function(s,start) {
	return (s.length >= start.length && s.substr(0,start.length) == start);
}
StringTools.endsWith = function(s,end) {
	var elen = end.length;
	var slen = s.length;
	return (slen >= elen && s.substr(slen - elen,elen) == end);
}
StringTools.isSpace = function(s,pos) {
	var c = s.charCodeAt(pos);
	return (c >= 9 && c <= 13) || c == 32;
}
StringTools.ltrim = function(s) {
	var l = s.length;
	var r = 0;
	while(r < l && StringTools.isSpace(s,r)) {
		r++;
	}
	if(r > 0) return s.substr(r,l - r);
	else return s;
}
StringTools.rtrim = function(s) {
	var l = s.length;
	var r = 0;
	while(r < l && StringTools.isSpace(s,(l - r) - 1)) {
		r++;
	}
	if(r > 0) {
		return s.substr(0,l - r);
	}
	else {
		return s;
	}
}
StringTools.trim = function(s) {
	return StringTools.ltrim(StringTools.rtrim(s));
}
StringTools.rpad = function(s,c,l) {
	var sl = s.length;
	var cl = c.length;
	while(sl < l) {
		if(l - sl < cl) {
			s += c.substr(0,l - sl);
			sl = l;
		}
		else {
			s += c;
			sl += cl;
		}
	}
	return s;
}
StringTools.lpad = function(s,c,l) {
	var ns = "";
	var sl = s.length;
	if(sl >= l) return s;
	var cl = c.length;
	while(sl < l) {
		if(l - sl < cl) {
			ns += c.substr(0,l - sl);
			sl = l;
		}
		else {
			ns += c;
			sl += cl;
		}
	}
	return ns + s;
}
StringTools.replace = function(s,sub,by) {
	return s.split(sub).join(by);
}
StringTools.hex = function(n,digits) {
	var neg = false;
	if(n < 0) {
		neg = true;
		n = -n;
	}
	var s = n.toString(16);
	s = s.toUpperCase();
	if(digits != null) while(s.length < digits) s = "0" + s;
	if(neg) s = "-" + s;
	return s;
}
StringTools.prototype.__class__ = StringTools;
Reflect = function() { }
Reflect.__name__ = ["Reflect"];
Reflect.hasField = function(o,field) {
	if(o.hasOwnProperty != null) return o.hasOwnProperty(field);
	var arr = Reflect.fields(o);
	{ var $it0 = arr.iterator();
	while( $it0.hasNext() ) { var t = $it0.next();
	if(t == field) return true;
	}}
	return false;
}
Reflect.field = function(o,field) {
	var v = null;
	try {
		v = o[field];
	}
	catch( $e1 ) {
		{
			var e = $e1;
			null;
		}
	}
	return v;
}
Reflect.setField = function(o,field,value) {
	o[field] = value;
}
Reflect.callMethod = function(o,func,args) {
	return func.apply(o,args);
}
Reflect.fields = function(o) {
	if(o == null) return new Array();
	var a = new Array();
	if(o.hasOwnProperty) {
		
					for(var i in o)
						if( o.hasOwnProperty(i) )
							a.push(i);
				;
	}
	else {
		var t;
		try {
			t = o.__proto__;
		}
		catch( $e2 ) {
			{
				var e = $e2;
				{
					t = null;
				}
			}
		}
		if(t != null) o.__proto__ = null;
		
					for(var i in o)
						if( i != "__proto__" )
							a.push(i);
				;
		if(t != null) o.__proto__ = t;
	}
	return a;
}
Reflect.isFunction = function(f) {
	return typeof(f) == "function" && f.__name__ == null;
}
Reflect.compare = function(a,b) {
	return ((a == b)?0:((((a) > (b))?1:-1)));
}
Reflect.compareMethods = function(f1,f2) {
	if(f1 == f2) return true;
	if(!Reflect.isFunction(f1) || !Reflect.isFunction(f2)) return false;
	return f1.scope == f2.scope && f1.method == f2.method && f1.method != null;
}
Reflect.isObject = function(v) {
	if(v == null) return false;
	var t = typeof(v);
	return (t == "string" || (t == "object" && !v.__enum__) || (t == "function" && v.__name__ != null));
}
Reflect.deleteField = function(o,f) {
	if(!Reflect.hasField(o,f)) return false;
	delete(o[f]);
	return true;
}
Reflect.copy = function(o) {
	var o2 = { }
	{
		var _g = 0, _g1 = Reflect.fields(o);
		while(_g < _g1.length) {
			var f = _g1[_g];
			++_g;
			o2[f] = Reflect.field(o,f);
		}
	}
	return o2;
}
Reflect.makeVarArgs = function(f) {
	return function() {
		var a = new Array();
		{
			var _g1 = 0, _g = arguments.length;
			while(_g1 < _g) {
				var i = _g1++;
				a.push(arguments[i]);
			}
		}
		return f(a);
	}
}
Reflect.prototype.__class__ = Reflect;
if(typeof hxjson2=='undefined') hxjson2 = {}
hxjson2.JSONEncoder = function(value) { if( value === $_ ) return; {
	this.jsonString = this.convertToString(value);
}}
hxjson2.JSONEncoder.__name__ = ["hxjson2","JSONEncoder"];
hxjson2.JSONEncoder.prototype.arrayToString = function(a) {
	var s = "";
	{
		var _g1 = 0, _g = a.length;
		while(_g1 < _g) {
			var i = _g1++;
			if(s.length > 0) {
				s += ",";
			}
			s += this.convertToString(a[i]);
		}
	}
	return ("[" + s) + "]";
}
hxjson2.JSONEncoder.prototype.convertToString = function(value) {
	if(Std["is"](value,List) || Std["is"](value,IntHash)) value = Lambda.array(value);
	if(Std["is"](value,Hash)) value = this.mapHash(value);
	if(Std["is"](value,String)) {
		return this.escapeString((function($this) {
			var $r;
			var tmp = value;
			$r = (Std["is"](tmp,String)?tmp:(function($this) {
				var $r;
				throw "Class cast error";
				return $r;
			}($this)));
			return $r;
		}(this)));
	}
	else if(Std["is"](value,Float)) {
		return (Math.isFinite((function($this) {
			var $r;
			var tmp = value;
			$r = (Std["is"](tmp,Float)?tmp:(function($this) {
				var $r;
				throw "Class cast error";
				return $r;
			}($this)));
			return $r;
		}(this)))?value + "":"null");
	}
	else if(Std["is"](value,Bool)) {
		return (value?"true":"false");
	}
	else if(Std["is"](value,Array)) {
		return this.arrayToString((function($this) {
			var $r;
			var tmp = value;
			$r = (Std["is"](tmp,Array)?tmp:(function($this) {
				var $r;
				throw "Class cast error";
				return $r;
			}($this)));
			return $r;
		}(this)));
	}
	else if(Std["is"](value,Dynamic) && value != null) {
		return this.objectToString(value);
	}
	return "null";
}
hxjson2.JSONEncoder.prototype.escapeString = function(str) {
	var s = "";
	var ch;
	var len = str.length;
	{
		var _g = 0;
		while(_g < len) {
			var i = _g++;
			ch = str.charAt(i);
			switch(ch) {
			case "\"":{
				s += "\\\"";
			}break;
			case "\\":{
				s += "\\\\";
			}break;
			case "\n":{
				s += "\\n";
			}break;
			case "\r":{
				s += "\\r";
			}break;
			case "\t":{
				s += "\\t";
			}break;
			default:{
				var code = ch.charCodeAt(0);
				if(ch < " " || code > 127) {
					var hexCode = StringTools.hex(ch.charCodeAt(0));
					var zeroPad = "";
					{
						var _g2 = 0, _g1 = 4 - hexCode.length;
						while(_g2 < _g1) {
							var j = _g2++;
							zeroPad += "0";
						}
					}
					s += ("\\u" + zeroPad) + hexCode;
				}
				else {
					s += ch;
				}
			}break;
			}
		}
	}
	return ("\"" + s) + "\"";
}
hxjson2.JSONEncoder.prototype.getString = function() {
	return this.jsonString;
}
hxjson2.JSONEncoder.prototype.jsonString = null;
hxjson2.JSONEncoder.prototype.mapHash = function(value) {
	var ret = { }
	{ var $it3 = value.keys();
	while( $it3.hasNext() ) { var i = $it3.next();
	ret[i] = value.get(i);
	}}
	return ret;
}
hxjson2.JSONEncoder.prototype.objectToString = function(o) {
	var s = "";
	var value;
	{
		var _g = 0, _g1 = Reflect.fields(o);
		while(_g < _g1.length) {
			var key = _g1[_g];
			++_g;
			value = Reflect.field(o,key);
			if(!Reflect.isFunction(value)) {
				if(s.length > 0) {
					s += ",";
				}
				s += (this.escapeString(key) + ":") + this.convertToString(value);
			}
		}
	}
	return ("{" + s) + "}";
}
hxjson2.JSONEncoder.prototype.__class__ = hxjson2.JSONEncoder;
if(typeof haxe=='undefined') haxe = {}
haxe.Log = function() { }
haxe.Log.__name__ = ["haxe","Log"];
haxe.Log.trace = function(v,infos) {
	js.Boot.__trace(v,infos);
}
haxe.Log.clear = function() {
	js.Boot.__clear_trace();
}
haxe.Log.prototype.__class__ = haxe.Log;
hxjson2.JSONTokenizer = function(s,strict) { if( s === $_ ) return; {
	this.jsonString = s;
	this.strict = strict;
	this.loc = 0;
	this.nextChar();
}}
hxjson2.JSONTokenizer.__name__ = ["hxjson2","JSONTokenizer"];
hxjson2.JSONTokenizer.prototype.ch = null;
hxjson2.JSONTokenizer.prototype.getNextToken = function() {
	var token = new hxjson2.JSONToken();
	this.skipIgnored();
	switch(this.ch) {
	case "{":{
		token.type = hxjson2.JSONTokenType.LEFT_BRACE;
		token.value = "{";
		this.nextChar();
	}break;
	case "}":{
		token.type = hxjson2.JSONTokenType.RIGHT_BRACE;
		token.value = "}";
		this.nextChar();
	}break;
	case "[":{
		token.type = hxjson2.JSONTokenType.LEFT_BRACKET;
		token.value = "[";
		this.nextChar();
	}break;
	case "]":{
		token.type = hxjson2.JSONTokenType.RIGHT_BRACKET;
		token.value = "]";
		this.nextChar();
	}break;
	case ",":{
		token.type = hxjson2.JSONTokenType.COMMA;
		token.value = ",";
		this.nextChar();
	}break;
	case ":":{
		token.type = hxjson2.JSONTokenType.COLON;
		token.value = ":";
		this.nextChar();
	}break;
	case "t":{
		var possibleTrue = (("t" + this.nextChar()) + this.nextChar()) + this.nextChar();
		if(possibleTrue == "true") {
			token.type = hxjson2.JSONTokenType.TRUE;
			token.value = true;
			this.nextChar();
		}
		else {
			this.parseError("Expecting 'true' but found " + possibleTrue);
		}
	}break;
	case "f":{
		var possibleFalse = ((("f" + this.nextChar()) + this.nextChar()) + this.nextChar()) + this.nextChar();
		if(possibleFalse == "false") {
			token.type = hxjson2.JSONTokenType.FALSE;
			token.value = false;
			this.nextChar();
		}
		else {
			this.parseError("Expecting 'false' but found " + possibleFalse);
		}
	}break;
	case "n":{
		var possibleNull = (("n" + this.nextChar()) + this.nextChar()) + this.nextChar();
		if(possibleNull == "null") {
			token.type = hxjson2.JSONTokenType.NULL;
			token.value = null;
			this.nextChar();
		}
		else {
			this.parseError("Expecting 'null' but found " + possibleNull);
		}
	}break;
	case "N":{
		var possibleNAN = ("N" + this.nextChar()) + this.nextChar();
		if(possibleNAN == "NAN" || possibleNAN == "NaN") {
			token.type = hxjson2.JSONTokenType.NAN;
			token.value = Math.NaN;
			this.nextChar();
		}
		else {
			this.parseError("Expecting 'nan' but found " + possibleNAN);
		}
	}break;
	case "\"":{
		token = this.readString();
	}break;
	default:{
		if(this.isDigit(this.ch) || this.ch == "-") {
			token = this.readNumber();
		}
		else if(this.ch == "") {
			return null;
		}
		else {
			this.parseError(("Unexpected " + this.ch) + " encountered");
		}
	}break;
	}
	return token;
}
hxjson2.JSONTokenizer.prototype.hexValToInt = function(hexVal) {
	var ret = 0;
	{
		var _g1 = 0, _g = hexVal.length;
		while(_g1 < _g) {
			var i = _g1++;
			ret = ret << 4;
			switch(hexVal.charAt(i).toUpperCase()) {
			case "1":{
				ret += 1;
			}break;
			case "2":{
				ret += 2;
			}break;
			case "3":{
				ret += 3;
			}break;
			case "4":{
				ret += 4;
			}break;
			case "5":{
				ret += 5;
			}break;
			case "6":{
				ret += 6;
			}break;
			case "7":{
				ret += 7;
			}break;
			case "8":{
				ret += 8;
			}break;
			case "9":{
				ret += 9;
			}break;
			case "A":{
				ret += 10;
			}break;
			case "B":{
				ret += 11;
			}break;
			case "C":{
				ret += 12;
			}break;
			case "D":{
				ret += 13;
			}break;
			case "E":{
				ret += 14;
			}break;
			case "F":{
				ret += 15;
			}break;
			}
		}
	}
	return ret;
}
hxjson2.JSONTokenizer.prototype.isDigit = function(ch) {
	return (ch >= "0" && ch <= "9");
}
hxjson2.JSONTokenizer.prototype.isHexDigit = function(ch) {
	var uc = ch.toUpperCase();
	return (this.isDigit(ch) || (uc >= "A" && uc <= "F"));
}
hxjson2.JSONTokenizer.prototype.isWhiteSpace = function(ch) {
	return (ch == " " || ch == "\t" || ch == "\n" || ch == "\r");
}
hxjson2.JSONTokenizer.prototype.jsonString = null;
hxjson2.JSONTokenizer.prototype.loc = null;
hxjson2.JSONTokenizer.prototype.nextChar = function() {
	return this.ch = this.jsonString.charAt(this.loc++);
}
hxjson2.JSONTokenizer.prototype.obj = null;
hxjson2.JSONTokenizer.prototype.parseError = function(message) {
	throw new hxjson2.JSONParseError(message,this.loc,this.jsonString);
}
hxjson2.JSONTokenizer.prototype.readNumber = function() {
	var input = "";
	if(this.ch == "-") {
		input += "-";
		this.nextChar();
	}
	if(!this.isDigit(this.ch)) {
		this.parseError("Expecting a digit");
	}
	if(this.ch == "0") {
		input += this.ch;
		this.nextChar();
		if(this.isDigit(this.ch)) {
			this.parseError("A digit cannot immediately follow 0");
		}
		else {
			if(!this.strict && this.ch == "x") {
				input += this.ch;
				this.nextChar();
				if(this.isHexDigit(this.ch)) {
					input += this.ch;
					this.nextChar();
				}
				else {
					this.parseError("Number in hex format require at least one hex digit after \"0x\"");
				}
				while(this.isHexDigit(this.ch)) {
					input += this.ch;
					this.nextChar();
				}
				input = Std.string(this.hexValToInt(input));
			}
		}
	}
	else {
		while(this.isDigit(this.ch)) {
			input += this.ch;
			this.nextChar();
		}
	}
	if(this.ch == ".") {
		input += ".";
		this.nextChar();
		if(!this.isDigit(this.ch)) {
			this.parseError("Expecting a digit");
		}
		while(this.isDigit(this.ch)) {
			input += this.ch;
			this.nextChar();
		}
	}
	if(this.ch == "e" || this.ch == "E") {
		input += "e";
		this.nextChar();
		if(this.ch == "+" || this.ch == "-") {
			input += this.ch;
			this.nextChar();
		}
		if(!this.isDigit(this.ch)) {
			this.parseError("Scientific notation number needs exponent value");
		}
		while(this.isDigit(this.ch)) {
			input += this.ch;
			this.nextChar();
		}
	}
	var num = Std.parseFloat(input);
	if(Math.isFinite(num) && !Math.isNaN(num)) {
		var token = new hxjson2.JSONToken();
		token.type = hxjson2.JSONTokenType.NUMBER;
		token.value = num;
		return token;
	}
	else {
		this.parseError(("Number " + num) + " is not valid!");
	}
	return null;
}
hxjson2.JSONTokenizer.prototype.readString = function() {
	var string = "";
	this.nextChar();
	while(this.ch != "\"" && this.ch != "") {
		if(this.ch == "\\") {
			this.nextChar();
			switch(this.ch) {
			case "\"":{
				string += "\"";
			}break;
			case "/":{
				string += "/";
			}break;
			case "\\":{
				string += "\\";
			}break;
			case "n":{
				string += "\n";
			}break;
			case "r":{
				string += "\r";
			}break;
			case "t":{
				string += "\t";
			}break;
			case "u":{
				var hexValue = "";
				{
					var _g = 0;
					while(_g < 4) {
						var i = _g++;
						if(!this.isHexDigit(this.nextChar())) {
							this.parseError(" Excepted a hex digit, but found: " + this.ch);
						}
						hexValue += this.ch;
					}
				}
				string += String.fromCharCode(this.hexValToInt(hexValue));
			}break;
			default:{
				string += "\\" + this.ch;
			}break;
			}
		}
		else {
			string += this.ch;
		}
		this.nextChar();
	}
	if(this.ch == "") {
		this.parseError("Unterminated string literal");
	}
	this.nextChar();
	var token = new hxjson2.JSONToken();
	token.type = hxjson2.JSONTokenType.STRING;
	token.value = string;
	return token;
}
hxjson2.JSONTokenizer.prototype.skipComments = function() {
	if(this.ch == "/") {
		this.nextChar();
		switch(this.ch) {
		case "/":{
			do {
				this.nextChar();
			} while(this.ch != "\n" && this.ch != "");
			this.nextChar();
		}break;
		case "*":{
			this.nextChar();
			while(true) {
				if(this.ch == "*") {
					this.nextChar();
					if(this.ch == "/") {
						this.nextChar();
						break;
					}
				}
				else {
					this.nextChar();
				}
				if(this.ch == "") {
					this.parseError("Multi-line comment not closed");
				}
			}
		}break;
		default:{
			this.parseError(("Unexpected " + this.ch) + " encountered (expecting '/' or '*' )");
		}break;
		}
	}
}
hxjson2.JSONTokenizer.prototype.skipIgnored = function() {
	var originalLoc;
	do {
		originalLoc = this.loc;
		this.skipWhite();
		this.skipComments();
	} while(originalLoc != this.loc);
}
hxjson2.JSONTokenizer.prototype.skipWhite = function() {
	while(this.isWhiteSpace(this.ch)) {
		this.nextChar();
	}
}
hxjson2.JSONTokenizer.prototype.strict = null;
hxjson2.JSONTokenizer.prototype.__class__ = hxjson2.JSONTokenizer;
StringBuf = function(p) { if( p === $_ ) return; {
	this.b = new Array();
}}
StringBuf.__name__ = ["StringBuf"];
StringBuf.prototype.add = function(x) {
	this.b[this.b.length] = x;
}
StringBuf.prototype.addChar = function(c) {
	this.b[this.b.length] = String.fromCharCode(c);
}
StringBuf.prototype.addSub = function(s,pos,len) {
	this.b[this.b.length] = s.substr(pos,len);
}
StringBuf.prototype.b = null;
StringBuf.prototype.toString = function() {
	return this.b.join("");
}
StringBuf.prototype.__class__ = StringBuf;
if(typeof domReady=='undefined') domReady = {}
domReady.DomReady = function() { }
domReady.DomReady.__name__ = ["domReady","DomReady"];
domReady.DomReady.stack = null;
domReady.DomReady.isIE = null;
domReady.DomReady.isWebkit = null;
domReady.DomReady.isOpera = null;
domReady.DomReady.isReady = null;
domReady.DomReady._gecko = function() {
	document.addEventListener("DOMContentLoaded", domReady.DomReady.runAll, false );
}
domReady.DomReady._ie = function() {
	try { 
			document.documentElement.doScroll("left");
		} 
		catch ( error ) {
			setTimeout( arguments.callee, 0 );
			return;	
		};;
	domReady.DomReady.runAll();
}
domReady.DomReady._opera = function() {
	document.addEventListener("DOMContentLoaded", function () {
			for (var i = 0; i < document.styleSheets.length; i++)
				if (document.styleSheets[i].disabled) {
					setTimeout( arguments.callee, 0 );
					return;
				}
			domReady.DomReady.runAll();
		}, false);;
}
domReady.DomReady._webkit = function() {
	var getSafariNumStyles = function() {
			var num=document.getElementsByTagName("style");
			var links = document.getElementsByTagName("link");
			for (var i = 0;i< links.length;i++)
				if ((links[i].getAttribute("rel")!=null) &&  (links[i].getAttribute("rel")!=undefined) && (links[i].getAttribute("rel").toLowerCase()=="stylesheet"))
					num++;
			return num;
		};;
	var numStyles;
		var h = function() {
			if ( document.readyState != "loaded" && document.readyState != "complete" ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			if ( numStyles === undefined )
				numStyles = getSafariNumStyles();
			if ( document.styleSheets.length != numStyles ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			domReady.DomReady.runAll();
		};
		h();;
}
domReady.DomReady.runAll = function() {
	if(domReady.DomReady.isReady) return;
	for (var _i=0;_i<domReady.DomReady.stack.length;_i++)
			domReady.DomReady.stack[_i].fn.apply(domReady.DomReady.stack[_i].sc?domReady.DomReady.stack[_i].sc:this, domReady.DomReady.stack[_i].args?domReady.DomReady.stack[_i].args:[]);
	domReady.DomReady.isReady = true;
}
domReady.DomReady.onReady = function(func,args,scope) {
	if(!domReady.DomReady.isReady) domReady.DomReady.stack.push({sc:scope,fn:func,args:args});
	else func.apply(scope,args);
}
domReady.DomReady.prototype.__class__ = domReady.DomReady;
hxjson2.JSONParseError = function(message,location,text) { if( message === $_ ) return; {
	if(text == null) text = "";
	if(location == null) location = 0;
	if(message == null) message = "";
	this.name = "JSONParseError";
	this._location = location;
	this._text = text;
	this.message = message;
}}
hxjson2.JSONParseError.__name__ = ["hxjson2","JSONParseError"];
hxjson2.JSONParseError.prototype._location = null;
hxjson2.JSONParseError.prototype._text = null;
hxjson2.JSONParseError.prototype.getlocation = function() {
	return this._location;
}
hxjson2.JSONParseError.prototype.gettext = function() {
	return this._text;
}
hxjson2.JSONParseError.prototype.location = null;
hxjson2.JSONParseError.prototype.message = null;
hxjson2.JSONParseError.prototype.name = null;
hxjson2.JSONParseError.prototype.text = null;
hxjson2.JSONParseError.prototype.toString = function() {
	return ((((((this.name + ": ") + this.message) + " at position: ") + this._location) + " near \"") + this._text) + "\"";
}
hxjson2.JSONParseError.prototype.__class__ = hxjson2.JSONParseError;
hxjson2.JSONToken = function(type,value) { if( type === $_ ) return; {
	this.type = (type == null?hxjson2.JSONTokenType.UNKNOWN:type);
	this.value = value;
}}
hxjson2.JSONToken.__name__ = ["hxjson2","JSONToken"];
hxjson2.JSONToken.prototype.type = null;
hxjson2.JSONToken.prototype.value = null;
hxjson2.JSONToken.prototype.__class__ = hxjson2.JSONToken;
net.vixns.chat.VChatUser = function(id,key,payload) { if( id === $_ ) return; {
	this.id = id;
	this.key = key;
	this.payload = payload;
}}
net.vixns.chat.VChatUser.__name__ = ["net","vixns","chat","VChatUser"];
net.vixns.chat.VChatUser.fromJson = function(u) {
	var data = hxjson2.JSON.decode(u);
	return new net.vixns.chat.VChatUser(data.id,data.kay,data.payload);
}
net.vixns.chat.VChatUser.toJson = function(u) {
	return hxjson2.JSON.encode(u);
}
net.vixns.chat.VChatUser.prototype.id = null;
net.vixns.chat.VChatUser.prototype.key = null;
net.vixns.chat.VChatUser.prototype.payload = null;
net.vixns.chat.VChatUser.prototype.toString = function() {
	var data = { id : this.id, key : this.key, payload : this.payload}
	return hxjson2.JSON.encode(data);
}
net.vixns.chat.VChatUser.prototype.__class__ = net.vixns.chat.VChatUser;
haxe.Firebug = function() { }
haxe.Firebug.__name__ = ["haxe","Firebug"];
haxe.Firebug.detect = function() {
	try {
		return console != null && console.error != null;
	}
	catch( $e4 ) {
		{
			var e = $e4;
			{
				return false;
			}
		}
	}
}
haxe.Firebug.redirectTraces = function() {
	haxe.Log.trace = $closure(haxe.Firebug,"trace");
	js.Lib.setErrorHandler($closure(haxe.Firebug,"onError"));
}
haxe.Firebug.onError = function(err,stack) {
	var buf = err + "\n";
	{
		var _g = 0;
		while(_g < stack.length) {
			var s = stack[_g];
			++_g;
			buf += ("Called from " + s) + "\n";
		}
	}
	haxe.Firebug.trace(buf,null);
	return true;
}
haxe.Firebug.trace = function(v,inf) {
	var type = (inf != null && inf.customParams != null?inf.customParams[0]:null);
	if(type != "warn" && type != "info" && type != "debug" && type != "error") type = (inf == null?"error":"log");
	console[type](((inf == null?"":((inf.fileName + ":") + inf.lineNumber) + " : ")) + Std.string(v));
}
haxe.Firebug.prototype.__class__ = haxe.Firebug;
IntIter = function(min,max) { if( min === $_ ) return; {
	this.min = min;
	this.max = max;
}}
IntIter.__name__ = ["IntIter"];
IntIter.prototype.hasNext = function() {
	return this.min < this.max;
}
IntIter.prototype.max = null;
IntIter.prototype.min = null;
IntIter.prototype.next = function() {
	return this.min++;
}
IntIter.prototype.__class__ = IntIter;
Std = function() { }
Std.__name__ = ["Std"];
Std["is"] = function(v,t) {
	return js.Boot.__instanceof(v,t);
}
Std.string = function(s) {
	return js.Boot.__string_rec(s,"");
}
Std["int"] = function(x) {
	if(x < 0) return Math.ceil(x);
	return Math.floor(x);
}
Std.parseInt = function(x) {
	var v = parseInt(x);
	if(Math.isNaN(v)) return null;
	return v;
}
Std.parseFloat = function(x) {
	return parseFloat(x);
}
Std.random = function(x) {
	return Math.floor(Math.random() * x);
}
Std.prototype.__class__ = Std;
net.vixns.chat.JsApi = function() { }
net.vixns.chat.JsApi.__name__ = ["net","vixns","chat","JsApi"];
net.vixns.chat.JsApi.userId = null;
net.vixns.chat.JsApi.userKey = null;
net.vixns.chat.JsApi.userPayload = null;
net.vixns.chat.JsApi.peer = null;
net.vixns.chat.JsApi.roomId = null;
net.vixns.chat.JsApi.vChat = null;
net.vixns.chat.JsApi.init = function() {
	if((typeof(Vchat)=="undefined")) throw "Vchat class unimplemented.";
	net.vixns.chat.JsApi.vChat = Vchat;
	if(net.vixns.chat.JsApi.vChat.init != null) {
		net.vixns.chat.JsApi.vChat.init();
	}
	else {
		throw "Vchat.init() unimplemented.";
	}
}
net.vixns.chat.JsApi.onFlashLoaded = function() {
	if(net.vixns.chat.JsApi.vChat.getUserId == null) throw "Vchat.getUserId() unimplemented.";
	if(net.vixns.chat.JsApi.vChat.getUserKey == null) throw "Vchat.getUserKey() unimplemented.";
	if(net.vixns.chat.JsApi.vChat.getUserPayload == null) throw "Vchat.getUserPayload() unimplemented.";
	net.vixns.chat.JsApi.userId = net.vixns.chat.JsApi.vChat.getUserId();
	net.vixns.chat.JsApi.userKey = net.vixns.chat.JsApi.vChat.getUserKey();
	net.vixns.chat.JsApi.userPayload = net.vixns.chat.JsApi.vChat.getUserPayload();
	net.vixns.chat.Application.connect(net.vixns.chat.JsApi.userId,net.vixns.chat.JsApi.userKey,net.vixns.chat.JsApi.userPayload);
}
net.vixns.chat.JsApi.onOnlineUsersList = function(users) {
	if(net.vixns.chat.JsApi.vChat.onOnlineUsersList == null) throw "Vchat.onOnlineUsersList([users]) unimplemented.";
	net.vixns.chat.JsApi.vChat.onOnlineUsersList(users);
}
net.vixns.chat.JsApi.onOnlineUser = function(user) {
	if(net.vixns.chat.JsApi.vChat.onOnlineUser == null) throw "Vchat.onOnlineUser(user) unimplemented.";
	net.vixns.chat.JsApi.vChat.onOnlineUser(user);
}
net.vixns.chat.JsApi.onOfflineUser = function(user) {
	if(net.vixns.chat.JsApi.peer != null && user.id == net.vixns.chat.JsApi.peer.id) net.vixns.chat.JsApi.onPeerVideoUnPublished(net.vixns.chat.JsApi.peer,net.vixns.chat.JsApi.roomId);
	if(net.vixns.chat.JsApi.vChat.onOfflineUser == null) throw "Vchat.onOfflineUser(user) unimplemented.";
	net.vixns.chat.JsApi.vChat.onOfflineUser(user);
}
net.vixns.chat.JsApi.onSendInvite = function(result) {
	if(net.vixns.chat.JsApi.vChat.onSendInvite == null) throw "Vchat.onSendInvite(result) unimplemented.";
	net.vixns.chat.JsApi.vChat.onSendInvite(result);
}
net.vixns.chat.JsApi.onCancelInvite = function(result) {
	if(net.vixns.chat.JsApi.vChat.onCancelInvite == null) throw "Vchat.onCancelInvite(result) unimplemented.";
	net.vixns.chat.JsApi.vChat.onCancelInvite(result);
}
net.vixns.chat.JsApi.onAcceptInvite = function(room) {
	if(net.vixns.chat.JsApi.vChat.onAcceptInvite == null) throw "Vchat.onAcceptInvite(room) unimplemented.";
	net.vixns.chat.JsApi.vChat.onAcceptInvite(room);
}
net.vixns.chat.JsApi.onRejectInvite = function(result) {
	if(net.vixns.chat.JsApi.vChat.onRejectInvite == null) throw "Vchat.onRejectInvite(result) unimplemented.";
	net.vixns.chat.JsApi.vChat.onRejectInvite(result);
}
net.vixns.chat.JsApi.onInvite = function(user) {
	if(net.vixns.chat.JsApi.vChat.onInvite == null) throw "Vchat.onInvite(user) unimplemented.";
	net.vixns.chat.JsApi.vChat.onInvite(user);
}
net.vixns.chat.JsApi.onInviteCanceled = function(user) {
	if(net.vixns.chat.JsApi.vChat.onInviteCanceled == null) throw "Vchat.onInviteCanceled(user) unimplemented.";
	net.vixns.chat.JsApi.vChat.onInviteCanceled(user);
}
net.vixns.chat.JsApi.onInviteExpired = function(user) {
	if(net.vixns.chat.JsApi.vChat.onInviteExpired == null) throw "Vchat.onInviteExpired(user) unimplemented.";
	net.vixns.chat.JsApi.vChat.onInviteExpired(user);
}
net.vixns.chat.JsApi.onInviteAccepted = function(u,room) {
	null;
	net.vixns.chat.JsApi.peer = u;
	if(net.vixns.chat.JsApi.vChat.onInviteAccepted == null) throw "Vchat.onInviteAccepted(user,room) unimplemented.";
	net.vixns.chat.JsApi.vChat.onInviteAccepted(net.vixns.chat.JsApi.peer,room);
}
net.vixns.chat.JsApi.onInviteRejected = function(user,reason) {
	if(net.vixns.chat.JsApi.vChat.onInviteRejected == null) throw "Vchat.onInviteRejected(user,reason) unimplemented.";
	net.vixns.chat.JsApi.vChat.onInviteRejected(user,reason);
}
net.vixns.chat.JsApi.onMessageSent = function(msg) {
	if(net.vixns.chat.JsApi.vChat.onMessageSent == null) throw "Vchat.onMessageSent(msg) unimplemented.";
	net.vixns.chat.JsApi.vChat.onMessageSent(msg);
}
net.vixns.chat.JsApi.onMessage = function(sender,msg) {
	if(net.vixns.chat.JsApi.vChat.onMessage == null) throw "Vchat.onMessage(sender,msg) unimplemented.";
	net.vixns.chat.JsApi.vChat.onMessage(sender,msg);
}
net.vixns.chat.JsApi.onPeerVideoPublished = function(peer,name) {
	if(net.vixns.chat.JsApi.vChat.onPeerVideoPublished == null) throw "Vchat.onPeerVideoPublished(name) unimplemented.";
	net.vixns.chat.JsApi.vChat.onPeerVideoPublished(name);
}
net.vixns.chat.JsApi.onPeerVideoUnPublished = function(peer,name) {
	net.vixns.chat.JsApi.closeChat(name);
	if(net.vixns.chat.JsApi.vChat.onPeerVideoUnPublished == null) throw "Vchat.onPeerVideoUnPublished(name) unimplemented.";
	net.vixns.chat.JsApi.vChat.onPeerVideoUnPublished(name);
}
net.vixns.chat.JsApi.acceptInvite = function(sender) {
	net.vixns.chat.JsApi.peer = sender;
	net.vixns.chat.Application.flash.acceptInvite(net.vixns.chat.VChatUser.toJson(sender));
}
net.vixns.chat.JsApi.rejectInvite = function(sender,reason) {
	net.vixns.chat.Application.flash.rejectInvite(net.vixns.chat.VChatUser.toJson(sender),reason);
}
net.vixns.chat.JsApi.publishVideo = function() {
	net.vixns.chat.Application.flash.publishVideo(net.vixns.chat.JsApi.userId);
}
net.vixns.chat.JsApi.sendMessage = function(msg) {
	net.vixns.chat.Application.flash.sendMessage(msg);
}
net.vixns.chat.JsApi.sendInvite = function(user) {
	net.vixns.chat.Application.flash.sendInvite(net.vixns.chat.VChatUser.toJson(user));
}
net.vixns.chat.JsApi.disconnect = function() {
	net.vixns.chat.Application.flash.closeAll();
}
net.vixns.chat.JsApi.openChat = function(room) {
	net.vixns.chat.JsApi.roomId = room;
	var ch = js.Lib.document.getElementById("vchatBox");
	ch.style.width = "auto";
	ch.style.height = "auto";
	var vIn = js.Lib.document.getElementById("vchatInput");
	vIn.onkeydown = $closure(net.vixns.chat.JsApi,"onType");
	if(net.vixns.chat.JsApi.vChat.onOpenChat == null) throw "Vchat.onOpenChat(room) unimplemented.";
	net.vixns.chat.JsApi.vChat.onOpenChat(room);
}
net.vixns.chat.JsApi.closeChat = function(room) {
	var ch = js.Lib.document.getElementById("vchatBox");
	ch.style.width = "1px";
	ch.style.height = "1px";
	var vIn = js.Lib.document.getElementById("vchatInput");
	vIn.onkeydown = null;
	net.vixns.chat.JsApi.disconnect();
	if(net.vixns.chat.JsApi.vChat.onCloseChat == null) throw "Vchat.onCloseChat(room) unimplemented.";
	net.vixns.chat.JsApi.vChat.onCloseChat(room);
	net.vixns.chat.JsApi.roomId = null;
}
net.vixns.chat.JsApi.onType = function(e) {
	e = ((e == null)?event:e);
	if(e.keyCode == 13) {
		var f = ((e.target == null)?e.srcElement:e.target);
		net.vixns.chat.JsApi.sendMessage(f.value);
		f.value = "";
	}
}
net.vixns.chat.JsApi.prototype.__class__ = net.vixns.chat.JsApi;
Lambda = function() { }
Lambda.__name__ = ["Lambda"];
Lambda.array = function(it) {
	var a = new Array();
	{ var $it5 = it.iterator();
	while( $it5.hasNext() ) { var i = $it5.next();
	a.push(i);
	}}
	return a;
}
Lambda.list = function(it) {
	var l = new List();
	{ var $it6 = it.iterator();
	while( $it6.hasNext() ) { var i = $it6.next();
	l.add(i);
	}}
	return l;
}
Lambda.map = function(it,f) {
	var l = new List();
	{ var $it7 = it.iterator();
	while( $it7.hasNext() ) { var x = $it7.next();
	l.add(f(x));
	}}
	return l;
}
Lambda.mapi = function(it,f) {
	var l = new List();
	var i = 0;
	{ var $it8 = it.iterator();
	while( $it8.hasNext() ) { var x = $it8.next();
	l.add(f(i++,x));
	}}
	return l;
}
Lambda.has = function(it,elt,cmp) {
	if(cmp == null) {
		{ var $it9 = it.iterator();
		while( $it9.hasNext() ) { var x = $it9.next();
		if(x == elt) return true;
		}}
	}
	else {
		{ var $it10 = it.iterator();
		while( $it10.hasNext() ) { var x = $it10.next();
		if(cmp(x,elt)) return true;
		}}
	}
	return false;
}
Lambda.exists = function(it,f) {
	{ var $it11 = it.iterator();
	while( $it11.hasNext() ) { var x = $it11.next();
	if(f(x)) return true;
	}}
	return false;
}
Lambda.foreach = function(it,f) {
	{ var $it12 = it.iterator();
	while( $it12.hasNext() ) { var x = $it12.next();
	if(!f(x)) return false;
	}}
	return true;
}
Lambda.iter = function(it,f) {
	{ var $it13 = it.iterator();
	while( $it13.hasNext() ) { var x = $it13.next();
	f(x);
	}}
}
Lambda.filter = function(it,f) {
	var l = new List();
	{ var $it14 = it.iterator();
	while( $it14.hasNext() ) { var x = $it14.next();
	if(f(x)) l.add(x);
	}}
	return l;
}
Lambda.fold = function(it,f,first) {
	{ var $it15 = it.iterator();
	while( $it15.hasNext() ) { var x = $it15.next();
	first = f(x,first);
	}}
	return first;
}
Lambda.count = function(it) {
	var n = 0;
	{ var $it16 = it.iterator();
	while( $it16.hasNext() ) { var _ = $it16.next();
	++n;
	}}
	return n;
}
Lambda.empty = function(it) {
	return !it.iterator().hasNext();
}
Lambda.prototype.__class__ = Lambda;
List = function(p) { if( p === $_ ) return; {
	this.length = 0;
}}
List.__name__ = ["List"];
List.prototype.add = function(item) {
	var x = [item];
	if(this.h == null) this.h = x;
	else this.q[1] = x;
	this.q = x;
	this.length++;
}
List.prototype.clear = function() {
	this.h = null;
	this.q = null;
	this.length = 0;
}
List.prototype.filter = function(f) {
	var l2 = new List();
	var l = this.h;
	while(l != null) {
		var v = l[0];
		l = l[1];
		if(f(v)) l2.add(v);
	}
	return l2;
}
List.prototype.first = function() {
	return (this.h == null?null:this.h[0]);
}
List.prototype.h = null;
List.prototype.isEmpty = function() {
	return (this.h == null);
}
List.prototype.iterator = function() {
	return { h : this.h, hasNext : function() {
		return (this.h != null);
	}, next : function() {
		if(this.h == null) return null;
		var x = this.h[0];
		this.h = this.h[1];
		return x;
	}}
}
List.prototype.join = function(sep) {
	var s = new StringBuf();
	var first = true;
	var l = this.h;
	while(l != null) {
		if(first) first = false;
		else s.b[s.b.length] = sep;
		s.b[s.b.length] = l[0];
		l = l[1];
	}
	return s.b.join("");
}
List.prototype.last = function() {
	return (this.q == null?null:this.q[0]);
}
List.prototype.length = null;
List.prototype.map = function(f) {
	var b = new List();
	var l = this.h;
	while(l != null) {
		var v = l[0];
		l = l[1];
		b.add(f(v));
	}
	return b;
}
List.prototype.pop = function() {
	if(this.h == null) return null;
	var x = this.h[0];
	this.h = this.h[1];
	if(this.h == null) this.q = null;
	this.length--;
	return x;
}
List.prototype.push = function(item) {
	var x = [item,this.h];
	this.h = x;
	if(this.q == null) this.q = x;
	this.length++;
}
List.prototype.q = null;
List.prototype.remove = function(v) {
	var prev = null;
	var l = this.h;
	while(l != null) {
		if(l[0] == v) {
			if(prev == null) this.h = l[1];
			else prev[1] = l[1];
			if(this.q == l) this.q = prev;
			this.length--;
			return true;
		}
		prev = l;
		l = l[1];
	}
	return false;
}
List.prototype.toString = function() {
	var s = new StringBuf();
	var first = true;
	var l = this.h;
	s.b[s.b.length] = "{";
	while(l != null) {
		if(first) first = false;
		else s.b[s.b.length] = ", ";
		s.b[s.b.length] = Std.string(l[0]);
		l = l[1];
	}
	s.b[s.b.length] = "}";
	return s.b.join("");
}
List.prototype.__class__ = List;
if(typeof js=='undefined') js = {}
js.Lib = function() { }
js.Lib.__name__ = ["js","Lib"];
js.Lib.isIE = null;
js.Lib.isOpera = null;
js.Lib.document = null;
js.Lib.window = null;
js.Lib.alert = function(v) {
	alert(js.Boot.__string_rec(v,""));
}
js.Lib.eval = function(code) {
	return eval(code);
}
js.Lib.setErrorHandler = function(f) {
	js.Lib.onerror = f;
}
js.Lib.prototype.__class__ = js.Lib;
js.Boot = function() { }
js.Boot.__name__ = ["js","Boot"];
js.Boot.__unhtml = function(s) {
	return s.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
}
js.Boot.__trace = function(v,i) {
	var msg = (i != null?((i.fileName + ":") + i.lineNumber) + ": ":"");
	msg += js.Boot.__unhtml(js.Boot.__string_rec(v,"")) + "<br/>";
	var d = document.getElementById("haxe:trace");
	if(d == null) alert("No haxe:trace element defined\n" + msg);
	else d.innerHTML += msg;
}
js.Boot.__clear_trace = function() {
	var d = document.getElementById("haxe:trace");
	if(d != null) d.innerHTML = "";
	else null;
}
js.Boot.__closure = function(o,f) {
	var m = o[f];
	if(m == null) return null;
	var f1 = function() {
		return m.apply(o,arguments);
	}
	f1.scope = o;
	f1.method = m;
	return f1;
}
js.Boot.__string_rec = function(o,s) {
	if(o == null) return "null";
	if(s.length >= 5) return "<...>";
	var t = typeof(o);
	if(t == "function" && (o.__name__ != null || o.__ename__ != null)) t = "object";
	switch(t) {
	case "object":{
		if(o instanceof Array) {
			if(o.__enum__ != null) {
				if(o.length == 2) return o[0];
				var str = o[0] + "(";
				s += "\t";
				{
					var _g1 = 2, _g = o.length;
					while(_g1 < _g) {
						var i = _g1++;
						if(i != 2) str += "," + js.Boot.__string_rec(o[i],s);
						else str += js.Boot.__string_rec(o[i],s);
					}
				}
				return str + ")";
			}
			var l = o.length;
			var i;
			var str = "[";
			s += "\t";
			{
				var _g = 0;
				while(_g < l) {
					var i1 = _g++;
					str += ((i1 > 0?",":"")) + js.Boot.__string_rec(o[i1],s);
				}
			}
			str += "]";
			return str;
		}
		var tostr;
		try {
			tostr = o.toString;
		}
		catch( $e17 ) {
			{
				var e = $e17;
				{
					return "???";
				}
			}
		}
		if(tostr != null && tostr != Object.toString) {
			var s2 = o.toString();
			if(s2 != "[object Object]") return s2;
		}
		var k = null;
		var str = "{\n";
		s += "\t";
		var hasp = (o.hasOwnProperty != null);
		for( var k in o ) { ;
		if(hasp && !o.hasOwnProperty(k)) continue;
		if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__") continue;
		if(str.length != 2) str += ", \n";
		str += ((s + k) + " : ") + js.Boot.__string_rec(o[k],s);
		}
		s = s.substring(1);
		str += ("\n" + s) + "}";
		return str;
	}break;
	case "function":{
		return "<function>";
	}break;
	case "string":{
		return o;
	}break;
	default:{
		return String(o);
	}break;
	}
}
js.Boot.__interfLoop = function(cc,cl) {
	if(cc == null) return false;
	if(cc == cl) return true;
	var intf = cc.__interfaces__;
	if(intf != null) {
		var _g1 = 0, _g = intf.length;
		while(_g1 < _g) {
			var i = _g1++;
			var i1 = intf[i];
			if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
		}
	}
	return js.Boot.__interfLoop(cc.__super__,cl);
}
js.Boot.__instanceof = function(o,cl) {
	try {
		if(o instanceof cl) {
			if(cl == Array) return (o.__enum__ == null);
			return true;
		}
		if(js.Boot.__interfLoop(o.__class__,cl)) return true;
	}
	catch( $e18 ) {
		{
			var e = $e18;
			{
				if(cl == null) return false;
			}
		}
	}
	switch(cl) {
	case Int:{
		return Math.ceil(o%2147483648.0) === o;
	}break;
	case Float:{
		return typeof(o) == "number";
	}break;
	case Bool:{
		return o === true || o === false;
	}break;
	case String:{
		return typeof(o) == "string";
	}break;
	case Dynamic:{
		return true;
	}break;
	default:{
		if(o == null) return false;
		return o.__enum__ == cl || (cl == Class && o.__name__ != null) || (cl == Enum && o.__ename__ != null);
	}break;
	}
}
js.Boot.__init = function() {
	js.Lib.isIE = (typeof document!='undefined' && document.all != null && typeof window!='undefined' && window.opera == null);
	js.Lib.isOpera = (typeof window!='undefined' && window.opera != null);
	Array.prototype.copy = Array.prototype.slice;
	Array.prototype.insert = function(i,x) {
		this.splice(i,0,x);
	}
	Array.prototype.remove = (Array.prototype.indexOf?function(obj) {
		var idx = this.indexOf(obj);
		if(idx == -1) return false;
		this.splice(idx,1);
		return true;
	}:function(obj) {
		var i = 0;
		var l = this.length;
		while(i < l) {
			if(this[i] == obj) {
				this.splice(i,1);
				return true;
			}
			i++;
		}
		return false;
	});
	Array.prototype.iterator = function() {
		return { cur : 0, arr : this, hasNext : function() {
			return this.cur < this.arr.length;
		}, next : function() {
			return this.arr[this.cur++];
		}}
	}
	var cca = String.prototype.charCodeAt;
	String.prototype.cca = cca;
	String.prototype.charCodeAt = function(i) {
		var x = cca.call(this,i);
		if(isNaN(x)) return null;
		return x;
	}
	var oldsub = String.prototype.substr;
	String.prototype.substr = function(pos,len) {
		if(pos != null && pos != 0 && len != null && len < 0) return "";
		if(len == null) len = this.length;
		if(pos < 0) {
			pos = this.length + pos;
			if(pos < 0) pos = 0;
		}
		else if(len < 0) {
			len = (this.length + len) - pos;
		}
		return oldsub.apply(this,[pos,len]);
	}
	$closure = js.Boot.__closure;
}
js.Boot.prototype.__class__ = js.Boot;
net.vixns.chat.Application = function() { }
net.vixns.chat.Application.__name__ = ["net","vixns","chat","Application"];
net.vixns.chat.Application.flash = null;
net.vixns.chat.Application.init = function() {
	net.vixns.chat.Application.flash = js.Lib.document.getElementById("VixnsChatSwf");
	net.vixns.chat.Application.flash.init();
}
net.vixns.chat.Application.connect = function(userId,userKey,userPayload) {
	net.vixns.chat.Application.flash.connect(userId,userKey,userPayload);
}
net.vixns.chat.Application.prototype.__class__ = net.vixns.chat.Application;
IntHash = function(p) { if( p === $_ ) return; {
	this.h = {}
	if(this.h.__proto__ != null) {
		this.h.__proto__ = null;
		delete(this.h.__proto__);
	}
	else null;
}}
IntHash.__name__ = ["IntHash"];
IntHash.prototype.exists = function(key) {
	return this.h[key] != null;
}
IntHash.prototype.get = function(key) {
	return this.h[key];
}
IntHash.prototype.h = null;
IntHash.prototype.iterator = function() {
	return { ref : this.h, it : this.keys(), hasNext : function() {
		return this.it.hasNext();
	}, next : function() {
		var i = this.it.next();
		return this.ref[i];
	}}
}
IntHash.prototype.keys = function() {
	var a = new Array();
	
			for( x in this.h )
				a.push(x);
		;
	return a.iterator();
}
IntHash.prototype.remove = function(key) {
	if(this.h[key] == null) return false;
	delete(this.h[key]);
	return true;
}
IntHash.prototype.set = function(key,value) {
	this.h[key] = value;
}
IntHash.prototype.toString = function() {
	var s = new StringBuf();
	s.b[s.b.length] = "{";
	var it = this.keys();
	{ var $it19 = it;
	while( $it19.hasNext() ) { var i = $it19.next();
	{
		s.b[s.b.length] = i;
		s.b[s.b.length] = " => ";
		s.b[s.b.length] = Std.string(this.get(i));
		if(it.hasNext()) s.b[s.b.length] = ", ";
	}
	}}
	s.b[s.b.length] = "}";
	return s.b.join("");
}
IntHash.prototype.__class__ = IntHash;
hxjson2.JSONTokenType = { __ename__ : ["hxjson2","JSONTokenType"], __constructs__ : ["UNKNOWN","COMMA","LEFT_BRACE","RIGHT_BRACE","LEFT_BRACKET","RIGHT_BRACKET","COLON","TRUE","FALSE","NULL","STRING","NUMBER","NAN"] }
hxjson2.JSONTokenType.COLON = ["COLON",6];
hxjson2.JSONTokenType.COLON.toString = $estr;
hxjson2.JSONTokenType.COLON.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.COMMA = ["COMMA",1];
hxjson2.JSONTokenType.COMMA.toString = $estr;
hxjson2.JSONTokenType.COMMA.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.FALSE = ["FALSE",8];
hxjson2.JSONTokenType.FALSE.toString = $estr;
hxjson2.JSONTokenType.FALSE.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.LEFT_BRACE = ["LEFT_BRACE",2];
hxjson2.JSONTokenType.LEFT_BRACE.toString = $estr;
hxjson2.JSONTokenType.LEFT_BRACE.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.LEFT_BRACKET = ["LEFT_BRACKET",4];
hxjson2.JSONTokenType.LEFT_BRACKET.toString = $estr;
hxjson2.JSONTokenType.LEFT_BRACKET.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.NAN = ["NAN",12];
hxjson2.JSONTokenType.NAN.toString = $estr;
hxjson2.JSONTokenType.NAN.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.NULL = ["NULL",9];
hxjson2.JSONTokenType.NULL.toString = $estr;
hxjson2.JSONTokenType.NULL.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.NUMBER = ["NUMBER",11];
hxjson2.JSONTokenType.NUMBER.toString = $estr;
hxjson2.JSONTokenType.NUMBER.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.RIGHT_BRACE = ["RIGHT_BRACE",3];
hxjson2.JSONTokenType.RIGHT_BRACE.toString = $estr;
hxjson2.JSONTokenType.RIGHT_BRACE.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.RIGHT_BRACKET = ["RIGHT_BRACKET",5];
hxjson2.JSONTokenType.RIGHT_BRACKET.toString = $estr;
hxjson2.JSONTokenType.RIGHT_BRACKET.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.STRING = ["STRING",10];
hxjson2.JSONTokenType.STRING.toString = $estr;
hxjson2.JSONTokenType.STRING.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.TRUE = ["TRUE",7];
hxjson2.JSONTokenType.TRUE.toString = $estr;
hxjson2.JSONTokenType.TRUE.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONTokenType.UNKNOWN = ["UNKNOWN",0];
hxjson2.JSONTokenType.UNKNOWN.toString = $estr;
hxjson2.JSONTokenType.UNKNOWN.__enum__ = hxjson2.JSONTokenType;
hxjson2.JSONDecoder = function(s,strict) { if( s === $_ ) return; {
	this.strict = strict;
	this.tokenizer = new hxjson2.JSONTokenizer(s,strict);
	this.nextToken();
	this.value = this.parseValue();
	if(strict && this.nextToken() != null) this.tokenizer.parseError("Unexpected characters left in input stream!");
}}
hxjson2.JSONDecoder.__name__ = ["hxjson2","JSONDecoder"];
hxjson2.JSONDecoder.prototype.getValue = function() {
	return this.value;
}
hxjson2.JSONDecoder.prototype.nextToken = function() {
	return this.token = this.tokenizer.getNextToken();
}
hxjson2.JSONDecoder.prototype.parseArray = function() {
	var a = new Array();
	this.nextToken();
	if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACKET) {
		return a;
	}
	else {
		if(!this.strict && this.token.type == hxjson2.JSONTokenType.COMMA) {
			this.nextToken();
			if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACKET) {
				return a;
			}
			else {
				this.tokenizer.parseError("Leading commas are not supported.  Expecting ']' but found " + this.token.value);
			}
		}
	}
	while(true) {
		a.push(this.parseValue());
		this.nextToken();
		if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACKET) {
			return a;
		}
		else if(this.token.type == hxjson2.JSONTokenType.COMMA) {
			this.nextToken();
			if(!this.strict) {
				if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACKET) {
					return a;
				}
			}
		}
		else {
			this.tokenizer.parseError("Expecting ] or , but found " + this.token.value);
		}
	}
	return null;
}
hxjson2.JSONDecoder.prototype.parseObject = function() {
	var o = { }
	var key;
	this.nextToken();
	if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACE) {
		return o;
	}
	else {
		if(!this.strict && this.token.type == hxjson2.JSONTokenType.COMMA) {
			this.nextToken();
			if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACE) {
				return o;
			}
			else {
				this.tokenizer.parseError("Leading commas are not supported.  Expecting '}' but found " + this.token.value);
			}
		}
	}
	while(true) {
		if(this.token.type == hxjson2.JSONTokenType.STRING) {
			key = Std.string(this.token.value);
			this.nextToken();
			if(this.token.type == hxjson2.JSONTokenType.COLON) {
				this.nextToken();
				o[key] = this.parseValue();
				this.nextToken();
				if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACE) {
					return o;
				}
				else if(this.token.type == hxjson2.JSONTokenType.COMMA) {
					this.nextToken();
					if(!this.strict) {
						if(this.token.type == hxjson2.JSONTokenType.RIGHT_BRACE) {
							return o;
						}
					}
				}
				else {
					this.tokenizer.parseError("Expecting } or , but found " + this.token.value);
				}
			}
			else {
				this.tokenizer.parseError("Expecting : but found " + this.token.value);
			}
		}
		else {
			this.tokenizer.parseError("Expecting string but found " + this.token.value);
		}
	}
	return null;
}
hxjson2.JSONDecoder.prototype.parseValue = function() {
	if(this.token == null) this.tokenizer.parseError("Unexpected end of input");
	var $e = (this.token.type);
	switch( $e[1] ) {
	case 2:
	{
		return this.parseObject();
	}break;
	case 4:
	{
		return this.parseArray();
	}break;
	case 10:
	{
		return this.token.value;
	}break;
	case 11:
	{
		return this.token.value;
	}break;
	case 7:
	{
		return true;
	}break;
	case 8:
	{
		return false;
	}break;
	case 9:
	{
		return null;
	}break;
	case 12:
	{
		if(!this.strict) return this.token.value;
		else this.tokenizer.parseError("Unexpected " + this.token.value);
	}break;
	default:{
		this.tokenizer.parseError("Unexpected " + this.token.value);
	}break;
	}
	return null;
}
hxjson2.JSONDecoder.prototype.strict = null;
hxjson2.JSONDecoder.prototype.token = null;
hxjson2.JSONDecoder.prototype.tokenizer = null;
hxjson2.JSONDecoder.prototype.value = null;
hxjson2.JSONDecoder.prototype.__class__ = hxjson2.JSONDecoder;
Hash = function(p) { if( p === $_ ) return; {
	this.h = {}
	if(this.h.__proto__ != null) {
		this.h.__proto__ = null;
		delete(this.h.__proto__);
	}
	else null;
}}
Hash.__name__ = ["Hash"];
Hash.prototype.exists = function(key) {
	try {
		key = "$" + key;
		return this.hasOwnProperty.call(this.h,key);
	}
	catch( $e20 ) {
		{
			var e = $e20;
			{
				
				for(var i in this.h)
					if( i == key ) return true;
			;
				return false;
			}
		}
	}
}
Hash.prototype.get = function(key) {
	return this.h["$" + key];
}
Hash.prototype.h = null;
Hash.prototype.iterator = function() {
	return { ref : this.h, it : this.keys(), hasNext : function() {
		return this.it.hasNext();
	}, next : function() {
		var i = this.it.next();
		return this.ref["$" + i];
	}}
}
Hash.prototype.keys = function() {
	var a = new Array();
	
			for(var i in this.h)
				a.push(i.substr(1));
		;
	return a.iterator();
}
Hash.prototype.remove = function(key) {
	if(!this.exists(key)) return false;
	delete(this.h["$" + key]);
	return true;
}
Hash.prototype.set = function(key,value) {
	this.h["$" + key] = value;
}
Hash.prototype.toString = function() {
	var s = new StringBuf();
	s.b[s.b.length] = "{";
	var it = this.keys();
	{ var $it21 = it;
	while( $it21.hasNext() ) { var i = $it21.next();
	{
		s.b[s.b.length] = i;
		s.b[s.b.length] = " => ";
		s.b[s.b.length] = Std.string(this.get(i));
		if(it.hasNext()) s.b[s.b.length] = ", ";
	}
	}}
	s.b[s.b.length] = "}";
	return s.b.join("");
}
Hash.prototype.__class__ = Hash;
hxjson2.JSON = function() { }
hxjson2.JSON.__name__ = ["hxjson2","JSON"];
hxjson2.JSON.encode = function(o) {
	return new hxjson2.JSONEncoder(o).getString();
}
hxjson2.JSON.decode = function(s,strict) {
	if(strict == null) strict = true;
	return new hxjson2.JSONDecoder(s,strict).getValue();
}
hxjson2.JSON.prototype.__class__ = hxjson2.JSON;
$Main = function() { }
$Main.__name__ = ["@Main"];
$Main.prototype.__class__ = $Main;
$_ = {}
js.Boot.__res = {}
js.Boot.__init();
{
	domReady.DomReady.isReady = false;
	domReady.DomReady.stack = [];
	var ua = navigator.userAgent.toLowerCase();
	domReady.DomReady.isWebkit = /webkit/.test(ua);
	domReady.DomReady.isOpera = /opera/.test(ua);
	domReady.DomReady.isIE = (/msie/.test(ua) && !domReady.DomReady.isOpera);
	if(document.addEventListener && !domReady.DomReady.isOpera) domReady.DomReady._gecko();
	if(domReady.DomReady.isIE && window == top) domReady.DomReady._ie();
	if(domReady.DomReady.isWebkit) domReady.DomReady._webkit();
	if(domReady.DomReady.isOpera) domReady.DomReady._opera();
	window.onload = domReady.DomReady.runAll;
}
{
	String.prototype.__class__ = String;
	String.__name__ = ["String"];
	Array.prototype.__class__ = Array;
	Array.__name__ = ["Array"];
	Int = { __name__ : ["Int"]}
	Dynamic = { __name__ : ["Dynamic"]}
	Float = Number;
	Float.__name__ = ["Float"];
	Bool = { __ename__ : ["Bool"]}
	Class = { __name__ : ["Class"]}
	Enum = { }
	Void = { __ename__ : ["Void"]}
}
{
	Math.NaN = Number["NaN"];
	Math.NEGATIVE_INFINITY = Number["NEGATIVE_INFINITY"];
	Math.POSITIVE_INFINITY = Number["POSITIVE_INFINITY"];
	Math.isFinite = function(i) {
		return isFinite(i);
	}
	Math.isNaN = function(i) {
		return isNaN(i);
	}
	Math.__name__ = ["Math"];
}
{
	js.Lib.document = document;
	js.Lib.window = window;
	onerror = function(msg,url,line) {
		var f = js.Lib.onerror;
		if( f == null )
			return false;
		return f(msg,[url+":"+line]);
	}
}
js.Lib.onerror = null;
$Main.init = VixnsChat.main();

