function sack(file) {
	this.xmlhttp = null;

	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};

	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};

	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};

	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				this.xmlhttp = null;
			}
		}

		if (! this.xmlhttp) {
			if (typeof XMLHttpRequest != "undefined") {
				this.xmlhttp = new XMLHttpRequest();
			} else {
				this.failed = true;
			}
		}
	};

	this.setVar = function(name, value){
		this.vars[name] = Array(value, false);
	};

	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
		}
	}

	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}

	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}

		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}

		// prevents caching of URLString
		this.setVar("rndval", new Date().getTime());

		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = Array(encoded[1], true);
				key = encoded[0];
			}

			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}

	this.runResponse = function() {
		eval(this.response);
	}

	this.runAJAX = function(urlstring) {
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = document.getElementById(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}

				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;

							if (self.execute) {
								self.runResponse();
							}

							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200") {
								self.onCompletion();
							} else {
								self.onError();
							}

							self.URLString = "";
							break;
					}
				};

				this.xmlhttp.send(this.URLString);
			}
		}
	};

	this.reset();
	this.createAJAX();
}

//(C) bytefx 0.4
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('g=1s a(){j.V=a(6,H){q e=$6(6).e;e.H=e.13=e.14=H/N;e.1k="V(H="+H+")"};j.15=a(6){q u=["b","n","O","D","h"],r=u.P;R(r--)F($6(6).g[u[r]])};j.h=a(6,e,f,o,l,c){o=g.h$(o);F($6(6).g.h);6.g.h=z(a(){q h=g.h$(f),r=3;R(r--)h[r]=$o(h[r],o[r],l);6.e[e]=f=g.$h(h);k(""+h==""+o)$c(6,"h",c)},1)};j.W=a(6,f,o,c,8){a $c(p,c){k(c)c.G(6,p);m X};q 7=$6(6).g.W;g.$E(6,"B",a(p){7.f=19;7.B=d.B;7.v=d.v;d.v=6.v;d.B=$c;m $c(p,f)});g.$E(6,"v",a(p){7.f=X;d.B=7.B;d.v=7.v;m $c(p,o)});g.$E(d,"1c",a(p){q x=p.1d,y=p.10,b={x:x-7.x,y:y-7.y};k(7.f){k(8){b.x=C(b.x,8.$x);b.y=C(b.y,8.$y);b.x=A(b.x,8.x$);b.y=A(b.y,8.y$)};g.8(6,b);$c(p,c)}17{7.x=x-6.T;7.y=y-6.U};m X})};j.D=a(6,f,o,l,c){F($6(6).g.D);6.g.D=z(a(){f=$o(f,o,l);g.V(6,f);k(f==o)$c(6,"D",c)},1)};j.O=a(6,8,l,c){q f=g.$8($6(6));$z(6,"O",l/N,f,8,["x","y"],"8",c)};j.8=a(6,8){q e=$6(6).e;e.8="1h";e.1i=8.x+"M";e.1j=8.y+"M"};j.n=a(6,l,c){a n(8){m d.J?d.J[8]:d.K[8]};q f=g.$n(),o={x:f.x,y:A(g.$8(6).y,C(n("Y"),d.K.Y)-A(n("Z"),d.K.Z))};$z($6(g),"n",l/N,f,o,["x","y"],"n$",c?a(){c.G(6)}:1r)};j.b=a(6,b,l,c){q f=g.$b($6(6)),7=w.1l;k(!/1m/i.1n(1o.1p)||(7&&I(7.1q())>=9)){k(b.$t)f.t-=b.$t;k(b.$s)f.s-=b.$s;k(b.t$)b.t-=b.t$;k(b.s$)b.s-=b.s$};6.e.1t="1u";$z(6,"b",l/N,f,b,["t","s"],"b$",c)};j.$h=a(h){a 7(r){q 7=h[r].1w(16);m 7.P==1?"0"+7:7};m"#"+7(0)+7(1)+7(2)};j.h$=a(h){a 7(r){m h.1x(r)};h=h.1y(1);k(h.P==3)h=7(0)+7(0)+7(1)+7(1)+7(2)+7(2);m[I(7(0)+7(1),16),I(7(2)+7(3),16),I(7(4)+7(5),16)]};j.$E=a(6,7,c){q Q=6[7];6[7]=a(p){k(!p)p=w.E;k(Q)Q.G(j,p);m c.G(j,p)}};j.$8=a(6){q 8={x:6.T,y:6.U};R(6=6.12){8.x+=6.T;8.y+=6.U};m 8};j.$n=a(){a n(8,n){m(d.J?d.J[8]:w[n]||d.K[8])||0};m{x:n("18","1a"),y:n("1b","1e")}};j.n$=a(6,8){w.1f(8.x,8.y)};j.$b=a(6){m{t:6.1g,s:6.Y}};j.b$=a(6,b){q e=6.e;e.t=b.t+"M";e.s=b.s+"M"};a $c(6,u,c){F(6.g[u]);k(c)c.G(6)};a $6(6){k(!6.g)6.g={h:0,W:{},D:0,O:0,n:0,b:0};m 6};a $o(x,y,l){m x<y?A(x+l,y):C(x-l,y)};a $z(6,u,l,f,8,e,7,c){F(6.g[u]);6.g[u]=z(a(){f[e[0]]+=(8[e[0]]-f[e[0]])*l;f[e[1]]+=(8[e[1]]-f[e[1]])*l;g[7](6,f);k(L(f[e[0]])==8[e[0]]&&L(f[e[1]])==8[e[1]]){g[7](6,8);$c(6,u,c)}},1)};q w=1v,d=11,C=S.C,A=S.A,L=S.L};',62,97,'||||||element|tmp|position||function|size|callback||style|start|bytefx|color||this|if|speed|return|scroll|end|evt|var|index|height|width|interval|onmouseup||||setInterval|min|onmousedown|max|fade|event|clearInterval|call|opacity|parseInt|documentElement|body|round|px|100|move|length|value|while|Math|offsetLeft|offsetTop|alpha|drag|false|offsetHeight|clientHeight|clientY|document|offsetParent|MozOpacity|KhtmlOpacity|clear||else|scrollLeft|true|pageXOffset|scrollTop|onmousemove|clientX|pageYOffset|scrollTo|offsetWidth|absolute|left|top|filter|opera|msie|test|navigator|userAgent|version|null|new|overflow|hidden|window|toString|charAt|substring'.split('|')));