var geoTargeted,
    geoAjax,
    geoQueue = [],
	id = null,
	content = null;

var geoReplace = function (id, content) {
	if (!id || !content) {
		return;
	}

	String.prototype.base64decode = function () {
		var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
		    output = '',
		    input = this.replace(/[^A-Za-z0-9\+\/\=]/g, ''),
		    chr1, chr2, chr3,
		    enc1, enc2, enc3, enc4,
		    i = 0;

		while (i < input.length) {
			enc1 = keyStr.indexOf(input.charAt(i++));
			enc2 = keyStr.indexOf(input.charAt(i++));
			enc3 = keyStr.indexOf(input.charAt(i++));
			enc4 = keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);

			if (enc3 !== 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 !== 64) {
				output = output + String.fromCharCode(chr3);
			}
		}
		return output;
	};

	//private method for UTF-8 decoding
	_utf8_decode = function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

	var targetElem = document.getElementById(id);
	targetElem.innerHTML = _utf8_decode( content.base64decode() );

	if (typeof(ClickTracker) !== 'undefined') {
		ClickTracker.init(targetElem);
	}
	if (typeof(CTL.modules) !== 'undefined') {
		CTL.modules.carousel.init(targetElem);
		CTL.modules.toplist_restrictions.init(targetElem);
	}
};

var geoProcessQueue = function () {
	for (var i = 0; i < geoQueue.length; i++) {
		geoReplace(geoQueue[i].id, geoQueue[i].content);
	}
	geoQueue = null;
};

var geoContent = function (id, content) {
	doGeoContent(id, content);
	if( this.id == null && this.content == null ) {
		this.id= id;
		this.content = content;
	}

	if( geoAjax.readyState === 4 ) {
		doGeoContent(this.id, this.content);
	} else {
		setTimeout( 'geoContent()', 100 );
	}
};

var doGeoContent = function(id, content) {
	if (typeof(geoTargeted) === 'undefined') {
		geoQueue.push({'id': id, 'content': content});
	} else if (geoTargeted === 'true') {
		geoReplace(id, content);
	}
}

if (window.XMLHttpRequest) {
	geoAjax = new XMLHttpRequest();
} else if (window.ActiveXObject) {
	geoAjax = new ActiveXObject('Microsoft.XMLHTTP');
}

geoAjax.onreadystatechange = function () {
	if (geoAjax.readyState === 4) {
		geoTargeted = geoAjax.responseText;
		if (geoTargeted === 'true') {
			geoProcessQueue();
		} else {
			geoQueue = null;
		}
	}
};

geoAjax.open('GET', '/Geo.php', true);
geoAjax.send(null);

