var param_hash = new Hash();

function getMaps(p) {
    var url = "get_maps.php";
    
    updateParams(p);

    if (param_hash.get("action") == "view") {
	new Effect.BlindUp('game_selector');
    } else {
	new Effect.Appear('game_selector');
    }
    showSearch();
     
    if (param_hash.get("game_id") && 
	param_hash.get("game_name")) {
	    
	if(param_hash.get("author_name") &&
	   param_hash.get("author_name") !== "") {	
	    updateMapsCaption(param_hash.get("game_name")+" Maps by "+
		param_hash.get("author_name"), 
		"maps_"+param_hash.get("game_id"));
	    unhideSearch();
	} else if(param_hash.get("search_text") &&
		  param_hash.get("search_text") !== "") {
	    updateMapsCaption(param_hash.get("game_name")+" Maps matching \""+
		param_hash.get("search_text")+"\"", 
		"maps_"+param_hash.get("game_id"));
	    unhideSearch();
	}else {
	    updateMapsCaption(param_hash.get("game_name")+" Maps", 
		"maps_"+param_hash.get("game_id"));
	}
    }
    params = param_hash.toQueryString();

    new Effect.Appear('loading_maps', {duration: 0.5});
    new Ajax.Updater('maps', url, {method:'get', parameters: params, onComplete:fadeLoading});

}

function fadeLoading() {
    setTimeout(Effect.Fade("loading_maps", {duration: 0.5}), 1000);
}

function mapsPostStr(theForm) {
    var p;

    for(var i = 0; i < theForm.elements.length; i++) {
	    switch (theForm.elements[i].type) {
		case "textarea":
		    if(p !== "") {
			p += "&";
		    }
		    p += theForm.elements[i].name+"="+escape(encodeURI(theForm.elements[i].value));
		    break;
		case "radio":
		    if (theForm.elements[i].checked) {
			if(p !== "") {
			    p += "&";
			}
			p += theForm.elements[i].name+"="+escape(encodeURI(theForm.elements[i].value));
		    }
		    break;
	    }
    }
    getMapsPost(p);
}

function getMapsPost(p) {
    var url = "get_maps.php";
  
    updateParams(p);

    params = param_hash.toQueryString();

    new Effect.Appear('loading_maps', {duration: 0.5});
    new Ajax.Updater('maps', url, {method:'post', parameters: params, onComplete:fadeLoading});
}

function getSearchParams(theForm) {
    for(var i = 0; i < theForm.elements.length; i++) {
	param_hash.set(theForm.elements[i].name, theForm.elements[i].value);
    }
}

function updateMapsCaption(caption, style) {
    caption = urldecode(caption);
    document.getElementById('maps_caption').className = style;
    document.getElementById('maps_caption').innerHTML = caption;
    document.title = "fcmaps.net: "+caption;
}

function selectGame(game_id, game_name, total, start) {
    var i;

    for(i = start; i < (total + start); i++) {
	if (i == game_id) {
	    document.getElementById('gameimage_'+game_id).className = "gameimage_"+game_id;
	    new Effect.Opacity('gameimage_'+game_id, 
		{
		    duration: 1.0, 
		    transition:Effect.Transitions.linear,
		    to: 1.0
		});
	} else {
	    document.getElementById('gameimage_'+i).className = "gameimage_";
	    new Effect.Opacity('gameimage_'+i, 
		{
		    duration: 1.0, 
		    transition:Effect.Transitions.linear,
		    to: 0.25
		});
	}
    }

    updateParams("game_id="+game_id+"&game_name="+game_name);
    showSearch();
    getMaps();
}

function searchMaps() {
    getSearchParams(document.advanced);
    updateParams("start=0");
    getMaps();
}

function resetForm() {
    //updateParams("alpha=");
    //document.forms.advanced.reset();
    
    document.forms.advanced.search_text.value = "";
    document.forms.advanced.search_type.value = "tora";
    document.forms.advanced.template.value = "any";
    document.forms.advanced.brush_set.value = "any";
    document.forms.advanced.time_of_day.value = "any";
    document.forms.advanced.sort.value = "date_added";
    document.forms.advanced.uploaded.value = "any";
    param_hash.set("author_name", "");
    param_hash.set("search_text", "");
    searchMaps();
}

function unhideSearch() {
    showSearch();
    new Effect.Appear('advanced_search');
    new Effect.Fade('show_advanced_search');
}

function showSearch() {
    var url = "search.php";

    //updateParams("start=0");

    params = param_hash.toQueryString();
    new Ajax.Updater('advanced_search', url, {method:'get', parameters: params});
}

function updateParams(p) {
    var i;

    if (p) {
	var args = p.split("&");
	for (i = 0; i < args.length; i++) {
	    var vals = args[i].split("=");
	    param_hash.set(vals[0], vals[1]);
	}
    }
}

function noEnter(e) {
    return !(e.keyCode == 13);
}

function urldecode(s) {
    var match = /\+/g;
    return unescape(String(s).replace(match, " "));
}
