function CodeJam() {
	var jam = "";
	var output = "";
	var output_size = "";
}
CodeJam.prototype = {
// Execute
	"execute": function(jam, size){
		switch(jam) {
			case "aliennumbers":
				this.jam = "Alien Numbers";
				this.output = $("#" + jam + "_output");
				this.output_size = size;
				
				this.aliennumbers();
				break;
		}
	},

/////////////////
// Alien Numbers
////////////////
	"aliennumbers": function(){
		var that = this;
		
		this.output.html("Now running " + this.jam + ".<br /><br />");
		
		$.get("A-" + this.output_size + "-practice.in.txt", "", function(d){
			var html = "";
			
			var data = d.split("\n");
			var iterations = data[0];
			
			html += that.jam + " will run for " + iterations + " iterations.\n";
			
			var item = "";
			var translated_number = "";
			
			for (var i = 1; i <= iterations; i++) {
				item = data[i].split(" ");

				target_number = that.aliennumbers_translate(item[0], item[1], item[2]);
				
				html += "Case #" + i + ": " + target_number + "\n";
			}
			
			that.output.append(html.replace(/\n/g, "<br />"));
		}, "text");
	},
	"aliennumbers_translate": function(a, s, t) {

		var decimal = this.aliennumbers_todecimal(a, s);
		
		var target_number = this.aliennumbers_totarget(decimal, t);

		return target_number;
	},
	"aliennumbers_todecimal": function(a, s) {
		var source_places = a.length;
		var source_base = s.length;
		var pos = 0;
		var decimal = 0;
		
		for(var i = source_places - 1; i >= 0; i--){
			pos = (source_places - 1) - i;

			decimal += Math.pow(source_base, i) * s.indexOf(a.charAt(pos));
		}
		
		return decimal;
	},
	"aliennumbers_totarget": function(d, t) {
		var target_base = t.length;
		var number = "";
		
		var places = 0;
		var notBigEnough = true;
		
		do {
			if (Math.pow(target_base, places) > d) {
				notBigEnough = false;
			} else {
				places++;
			}
		} while(notBigEnough);
		
		var current_number = 0;
		var current_place = 0;
		var current_character = 0;
		
		for(var i = places - 1; i >= 0; i--){
			notBigEnough = true;
			current_place = Math.pow(target_base, i);
			current_character = 0;
			
			do {
				if ((current_place * current_character) > (d - current_number)) {
					notBigEnough = false;
					current_character--;
				} else {
					current_character++;
				}
			} while(notBigEnough);
			
			current_number += current_place * current_character;
			number += t.charAt(current_character);
		}
		
		return number;
	}
};

// Create an instance of our CodeJam object for use.
$(document).ready(function(){
	window.codejam = new CodeJam();
});