
var fs_params = { };

function setFilter(name, value) {
    if(value != null) {
	fs_params[name] = value;
    } else {
	delete fs_params[name];
    }
    //console.log("setFilter(" + name + ", " + value + ") => " + fs_params);
}

function applyFilters() {
    setFilter("page", "0");
    var url = createUrl("DispatchServlet?cmd=request_sort_search&k_pgen=" + kilroyPageGeneration);
    loadTickets(url);
}

function loadTicketsWithFilters(baseUrl) {
    var url = createUrl(baseUrl);
    loadTickets(url);
}

function createUrl(baseUrl) {
    var url = baseUrl;
    var sep = "&";
    if(url.indexOf('?') < 0) {
	sep = "?";
    }
    for(var i in fs_params) {
	url += sep + i + "=" + fs_params[i];
	sep = "&";
    }
    return url;
}

var sHandles = new Array();
var filter_sliders = new Array();
var filter_resetting = 0;

function initTimeFilterSlider(name, radio_name) {
    document.write('<div class="addSliderBars"><div id="'+name+'" class="track"><div id="'+name+'_h1" class="hand1"><img src="gfx/dragSlider1.gif"/></div><div id="'+name+'_h2" class="hand2"><img src="gfx/dragSlider2.gif"/></div></div><input name="'+name+'_time1" value="00:00" type="hidden" id="'+name+'_duration1"/><input name="'+name+'_time2" value="23:45" type="hidden" id="'+name+'_duration2"/></div>');
    sHandles[name] = [$(name+'_h1'),$(name+'_h2')];
    var values = [0, 100];
    filter_sliders[name] = new Control.Slider(sHandles[name], name, {
	range:$R(0,96),
	step:0.25,
	restricted:true,
	sliderValue: values,
	onSlide: function(value) {
	    if(filter_sliders[name].values) {
		genClock(name, filter_sliders[name].values);
	    }
	},
	onChange: function(value) {
	    //console.log("onChange()");
	    if(filter_sliders[name].values) {
		genClock(name, filter_sliders[name].values);

		setTimeFilter( radio_name, name );
		if(!filter_resetting) {
		    applyFilters();
		}
	    }
	}
    });
}

function setTimeFilter( radio_name, slider_name ) {
    var radio = dojo.byId(radio_name);
    var v = timeFilterValue(slider_name);
    if (radio) {
        if (radio.checked) {
            setFilter(slider_name + "_departure", v);
            setFilter(slider_name + "_arrival", null);
        } else {
            setFilter(slider_name + "_departure", null);
            setFilter(slider_name + "_arrival", v);
        }
    }
}


function genClock(name,times) {
	var clock = ""+times+"";
	var clockArray=clock.split(",");
	document.getElementById(name+'_c1').innerHTML=precisionTime(Math.round(clockArray[0]));
	document.getElementById(name+'_c2').innerHTML=precisionTime(Math.round(clockArray[1]));
	document.getElementById(name+'_duration1').value=precisionTime(Math.round(clockArray[0]));
	document.getElementById(name+'_duration2').value=precisionTime(Math.round(clockArray[1]));
}

function precisionTime(tid) {
	var nyTid = ""+(tid/4)+"";
	var nyTidSplit = nyTid.split(".");
	if(nyTidSplit[1]=="25") { nyTidSplit[1]="15"; } else if(nyTidSplit[1]=="5") { nyTidSplit[1]="30"; } else if(nyTidSplit[1]=="75") { nyTidSplit[1]="45"; } else { nyTidSplit[1]="00"; }
	if(nyTidSplit[0]<=9) { nyTidSplit[0]="0"+nyTidSplit[0]; }
	return nyTidSplit[0]+":"+nyTidSplit[1];
}

function timeFilterValue(name) {
    var from = dojo.byId(name + '_duration1');
    var to = dojo.byId(name + '_duration2');
    if(!from || !to) {
	return null;
    }
    return from.value + "-" + to.value;
}

function setMatrixEntryAndFilter(element, stops, airline) {
    setCurrentMatrixEntry(element);
    var sel = document.getElementById('filter_airline');
    if(sel) {
	for ( var i = 0; i < sel.length; i++ ) {
	    var o = sel.options[i];
	    o.selected = o.value == airline || (o.value == '--' && airline == null );
	}
    }
    setFilter('filter_airline', airline);
    setFilter('filter_stops', stops);
}

function resetFilters(selects, sliders) {
    filter_resetting = 1;
    for(var i = 0; i < selects.length; ++i) {
	var e = document.getElementById(selects[i]);
	if(e) {
	    e.selectedIndex = 0;
	}
    }
    setFilter('filter_airline', '--');
    setFilter('filter_stops', '');
    setFilter('filter_ticket', 'all');
    for(var i = 0; i < sliders.length; ++i) {
	var s = filter_sliders[sliders[i]];
	if(s) {
	    s.setValue(  0, 0);
	    s.setValue(100, 1);
	}
    }
    filter_resetting = 0;
    applyFilters();
}

