var case_options = [ // available, talls, shorts
		[1,0,4],
		[1,1,2], 
		[1,2,0],
		[1,4,0]
	];
var chosen_case = null;

$(document).ready(function() {
	$(".addbutton").click(function () { 
		var model = this.id.substr(12);
		choose_map(model);
	});
	$(".caselink").click(function () { 
		if ( $(this).parent().hasClass("casebuttonon") ) {
			choose_case(this);
		}
		return false;
	});
	$(".casedisable").click(function () { 
		unchoose_case(this);
		return false;
	});
	$("#submit_button").click(function () { 
		var cart = $("body").data("cart");
		var url = "?action=add_multi";
		for ( var i in cart ) {
			url += "&add[" + i + "]=" + cart[i][0];
		}
		window.location.href = "http://" + location.hostname + "/store/shopping_cart.php" + url;
	});
	
	$("body").data("cart", null);
	loadcart();

	case_viable = case_viability(0,0);
	map_case_viable = map_type_viability(0,0)
});

function choose_map(model) {
	var cart = $("body").data("cart");
	var chosen = "#selectbutton" + model;
	if (cart) { 
		var next = cart.length; 
	} else { 
		var next=0;
		cart = new Array(); 
	}
	if ( $(chosen).hasClass("mapheight9") ) height = 9;
	if ( $(chosen).hasClass("mapheight4") ) height = 4;
	for ( var i in cart ) {
		if(cart[i][0] == model) var already_in = 1;
	}
	if (already_in != 1) {
		var title = $("#title"+model).html();
		var thumb = $("#thumb"+model).html();
		var addline = "<tr><td class='thumbcell'>"+thumb+"</td><td>"+title+"</td><td id='remove"+model+"' class='map_remove'>&nbsp;</td></tr>";
		$("#chosenmaps").append(addline);		
		$("#row"+model).addClass("chosehidden");
		//$(".map_remove").unbind("click");
		$("#remove"+model).click(function () { 
			var cart = $("body").data("cart");
			$("#row"+model).removeClass("chosehidden");
			$(this).parent().remove();
			for ( var j in cart ) {
				if(cart[j][0] == model) var del_index = j;
			}
			cart.splice(del_index, 1);
			count = map_type_count();
			case_viable = case_viability(count[0], count[1]);
			map_type_viable = map_type_viability(count[0], count[1]); 
			update_maps(map_type_viable);
			update_cases();
			cart_viability();
			//console.log(cart);
		});

		//console.log("- - - - - - - - -");
		//$(chosen).parent().parent().removeClass("row_mapheight" + height);
		cart[next]=[model, height];
	}
	$("body").data("cart", cart);
	
	count = map_type_count();
	case_viable = case_viability(count[0], count[1]);
	map_type_viable = map_type_viability(count[0], count[1]); 
	update_maps(map_type_viable);
	update_cases();
	cart_viability();
}

function choose_case(chosen) {
	chosen_case = chosen.id;
	chosen_talls = chosen.id.substr(4, 1);
	chosen_shorts = chosen.id.substr(5, 1);
	$("body").data("case", [chosen_talls,chosen_shorts]);

	for ( var i in case_options ) {
		var case_id = "#case" + case_options[i][1] + case_options[i][2];
		if (case_options[i][1] == chosen_talls && case_options[i][2] == chosen_shorts) {
			$(case_id).parent().removeClass("casebuttonoff");
			$(case_id).parent().addClass("casebuttonon");
			$(case_id).siblings(".casedisable").css("visibility", "visible");
 			case_options[i][0] = 1;
		} else {
			$(case_id).parent().addClass("casebuttonoff");
			$(case_id).parent().removeClass("casebuttonon");
 			case_options[i][0] = 0;
		}
	}
	count = map_type_count();
	map_type_viable = map_type_viability(count[0], count[1])
	update_maps(map_type_viable);
	update_cases();
}
function unchoose_case() {
	chosen_case = null;
	for ( var i in case_options ) {
 		//case_options[i][0] = 1;
		var case_id = "#case" + case_options[i][1] + case_options[i][2];
		$(case_id).parent().removeClass("casebuttonoff");
		$(case_id).parent().addClass("casebuttonon");
		$(".casedisable").css("visibility", "hidden");
	}
	count = map_type_count();
	map_type_viable = map_type_viability(count[0], count[1])
	update_maps(map_type_viable);
	update_cases();
}

function update_maps (map_type_viable) {
	if (map_type_viable[0]) {
		$(".row_mapheight9").each(function(i){
			if ($(this).hasClass("unviable") && !$(this).hasClass("chosehidden")){
				$(".row_mapheight9").removeClass("unviable");
			}
		});
	} else {
		$(".row_mapheight9").addClass("unviable"); 
	}
	if (map_type_viable[1]) {
		$(".row_mapheight4").each(function(i){
			if ($(this).hasClass("unviable") && !$(this).hasClass("chosehidden")){
				$(".row_mapheight4").removeClass("unviable");
			}
		});
	} else {
		$(".row_mapheight4").addClass("unviable");
	}
	savecart();
}

function update_cases () {
	count = map_type_count();
	case_viable = case_viability(count[0], count[1]);

	for ( var i in case_options ) {
		var case_id = "case" + case_options[i][1] + case_options[i][2];
		var case_sel = "#" + case_id; 
		if (case_viable[i] && (chosen_case==null || chosen_case==case_id)) { 
			$(case_sel).parent().removeClass("casebuttonoff");
			$(case_sel).parent().addClass("casebuttonon");
		} else {
			$(case_sel).parent().addClass("casebuttonoff");
			$(case_sel).parent().removeClass("casebuttonon");
		}
	}
}

function case_viability (num_talls, num_shorts) {
	var viable = new Array();
	for ( var i in case_options ) {
		if (case_options[i][1] >= num_talls && case_options[i][2] >= num_shorts) {
			case_options[i][0] = 1;
			viable[i] = 1; 
		} else {
			case_options[i][0] = 0;
			viable[i] = 0; 
		}
	}
	return viable;
}

function map_type_viability (num_talls, num_shorts) {
	var viable = new Array(0,0);
	for ( var i in case_options ) {
		if (case_options[i][1] >= num_talls && case_options[i][2] >= num_shorts && case_options[i][0] == 1) {
			if (case_options[i][1] > num_talls) viable[0] = 1; 
			if (case_options[i][2] > num_shorts) viable[1] = 1; 
		} 
	}
	return viable; // tall, short
}

function map_type_count () {
	var talls=0; 
	var shorts=0;
	var count = new Array();
	var cart = $("body").data("cart");
	for ( var i in cart ) {
		if (cart[i][1] == 9) {
			talls++; 
		} else {
			shorts++; 
		}
	}
	return [talls, shorts];
}

function cart_viability() {
	var viable = 0; 
	count = map_type_count();
	for ( var i in case_options ) {
		if (case_options[i][1] == count[0] && case_options[i][2] == count[1]) {
			viable = 1; 
		} 
	}
	if (viable) {
		$("#submit").animate({"width": "223px"}, "fast");
	} else if ($("#submit").css("width")=="223px") {
		$("#submit").animate({"width": "0"}, "fast");
	}
}

function savecart() {
	var cart = $("body").data("cart");

	var cookie = array2json(cart);
	$.cookie('byotp', cookie, { expires: 7 });
}

function loadcart() {
	var cookie = $.cookie('byotp');
	var cart = eval("(" + cookie + ")");
	for ( var i in cart ) {
		choose_map(cart[i][0]);
	}

	$("body").data("cart", cart);
}

function array2json(arr) {
    var parts = [];
    var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');

    for(var key in arr) {
    	var value = arr[key];
        if(typeof value == "object") { //Custom handling for arrays
            if(is_list) parts.push(array2json(value)); /* :RECURSION: */
            else parts[key] = array2json(value); /* :RECURSION: */
        } else {
            var str = "";
            if(!is_list) str = '"' + key + '":';

            //Custom handling for multiple data types
            if(typeof value == "number") str += value; //Numbers
            else if(value === false) str += 'false'; //The booleans
            else if(value === true) str += 'true';
            else str += '"' + value + '"'; //All other things
            // :TODO: Is there any more datatype we should be in the lookout for? (Functions?)

            parts.push(str);
        }
    }
    var json = parts.join(",");
    
    if(is_list) return '[' + json + ']';//Return numerical JSON
    return '{' + json + '}';//Return associative JSON
}




