var lastTarget = null;
var lastAirline = null;
var lastOutFilter = null;
var lastBackFilter = null;

var baseURL = "DispatchServlet?cmd=request_sort_search&k_pgen=" + kilroyPageGeneration;

function getFilterParameters(div) {
    var fromNode = dojo.byId(div + '_duration1');
    var toNode = dojo.byId(div + '_duration2');
    var from = null;
    var to = null;
    if (fromNode != null) {
        from = fromNode.value;
    }
    if (toNode != null) {
        to = toNode.value;
    }
    var urlPart = "";
    //console.debug("div: " + div);
    if (div == 'scripty_duration_track1') {
        // outgoing
        var departure = dojo.byId('DepartureTime1').checked;
        //console.debug("departure: " + departure);
        if (departure == true) {
            urlPart = "&filter_out_departure=";
        }
        else {
            urlPart = "&filter_out_arrival=";
        }
    }
    if (div == 'scripty_duration_track2') {
        // back
        var departure = dojo.byId('DepartureTime2').checked;
        if (departure == true) {
            urlPart = "&filter_back_departure=";
        }
        else {
            urlPart = "&filter_back_arrival=";
        }
    }
    if (from != null && to != null) {
        urlPart += from + "-" + to;
    }
    if (div == 'scripty_duration_track1') {
        lastOutFilter = urlPart;
        if (lastBackFilter != null) {
            urlPart += lastBackFilter;
        }
    }
    else if (div == 'scripty_duration_track2') {
        lastBackFilter = urlPart;
        if (lastOutFilter != null) {
            urlPart += lastOutFilter;
        }
    }
    else {
        if (lastOutFilter != null) {
            urlPart += lastOutFilter;
        }
        if (lastBackFilter != null) {
            urlPart += lastBackFilter;
        }
    }
    return urlPart;
}

function changeTimeFilter(div) {
    url = baseURL + getFilterParameters(div);
    if (lastTarget != null) {
        url += "&sort=" + lastTarget;
    }
    if (lastAirline != null) {
        url += "&airline=" + lastAirline;
    }
    url += "&page=0";
    //console.debug("url:" + url);
    loadTickets(url);
}

function markSortingLabel(target) {
    unmarkSortingLabel('price');
    unmarkSortingLabel('kilroytickets');
    unmarkSortingLabel('duration');
    unmarkSortingLabel('airline');
    var l = document.getElementById('sort_' + target + '_label');
    var e = document.getElementById('sort_' + target);
    if(l) l.className = 'special';
    if(e) e.checked = true;
}

function unmarkSortingLabel(target) {
    var l = document.getElementById('sort_' + target + '_label');
    var e = document.getElementById('sort_' + target);
    if(l) l.className = '';
    if(e) e.checked = false;
}

function changeSorting(target, airline) {
    markSortingLabel(target);
    var url = null;
    //console.debug("target: " + target);
    if (target == "airline") {
        url = baseURL + "&sort=" + target + "&airline=" + airline;
        lastAirline = airline;
    }
    else {
        url = baseURL + "&sort=" + target;
        changeLabel('airline_label', 'Airline');
    }
    lastTarget = target;
    url += "&page=0";
    //console.debug("url:" + url);
    loadTickets(url);
}

function changeLabel(obj, name, value) {
    document.getElementById(obj).innerHTML = name;
    if (obj != undefined && obj != null) {
        if (obj == "track1_c1_label") {
            changeTimeFilter("scripty_duration_track1");
        }
        if (obj == "track1_c2_label") {
            changeTimeFilter("scripty_duration_track2");
        }
    }
}

function loadTickets(url) {
    dojo.byId("tickets").innerHTML = '<div id="ajax_search">&nbsp;</div>';
    dojo.xhrGet({
	    url:    url,
	    sc:     "tickets",
	    method: "GET",
	    preventCache: true,
	    load:   function(data, io) {
	    dojo.byId(io.args.sc).innerHTML = data;
	    setTopPager();
	    }
	});
}

function setTopPager() {
    var newPager = document.getElementById("new_pageselector_top");
    var targetPager = document.getElementById("pageselector_top");
    if(newPager != null && newPager != undefined
       && targetPager != null && targetPager != undefined) {
        targetPager.innerHTML = newPager.innerHTML;
    }
}

function setCurrentMatrixEntry(element) {
    var matrix = document.getElementById('topDirectFlightBox');
    if(matrix) {
	var anchors = matrix.getElementsByTagName('a');
	for(i = 0; i < anchors.length; ++i) {
	    var a = anchors.item(i);
	    a.className = (a == element ? 'special' : '');
	}
    }
}

function scrollToElement(id, offset) {
    element = document.getElementById(id);
    if(element) {
	if(!offset) offset = 0;
	window.scrollTo(0, element.offsetTop + offset);
    }
}

function scrollToTickets() {
    scrollToElement('tickets', -10);
}

if ( ! window.ibe ) {
    window.ibe = {};
}

if ( ! window.ibe.calendarmatrix ) {
    window.ibe.calendarmatrix = new function() {

        var _selectOption = function( sequenceNumber ) {
            var url = "DispatchServlet?cmd=request_calendar_matrix_flight_details&serialNo="+sequenceNumber + "&k_pgen=" + kilroyPageGeneration;
            dojo.xhrGet({
                url:    url,
                sc:     "info",
                method: "GET",
                preventCache: true,
                load:   function(data, io) {
                    dojo.byId(io.args.sc).innerHTML = data;
                }
            });
	    var cell;
	    cell = document.getElementById('option_' + sequenceNumber);
	    _overlaySelectedCell(cell);
        }

        var _selectNoOption = function( cell, departureDate, returnDate ) {
            var url = "DispatchServlet?cmd=request_calendar_matrix_flight_details&departureDate=" + departureDate + "&returnDate=" + returnDate + "&k_pgen=" + kilroyPageGeneration;
            dojo.xhrGet({
                url:    url,
                sc:     "info",
                method: "GET",
                preventCache: true,
                load:   function(data, io) {
                    dojo.byId(io.args.sc).innerHTML = data;
                }
            });
	    _overlaySelectedCell(cell);
        }

	var _overlaySelectedCell = function(cell) {
	    //console.log('overlaying ' + cell.id);
	    var e = document.getElementById('selectedCell');
	    e.style.display = 'none';
	    e.style.top = e.parentNode.offsetTop + cell.offsetTop - 8 + 'px';
	    e.style.left = e.parentNode.offsetLeft + cell.offsetLeft - 7 + 'px';
	    for(var i = 0; i < e.childNodes.length; ++i) {
		e.removeChild(e.childNodes[i]);
	    }
	    var copiedCell = cell.getElementsByTagName('span')[0].cloneNode(true);
	    e.appendChild(copiedCell);
	    e.style.display = 'block';
	    //console.log('--> top: ' + e.style.top + '; left: ' + e.style.left + '; ' + e.innerHTML);
	}

        var _searchForDate = function( departureDate, returnDate ) {
            document.getElementById('sb_outnback_date_fuzz').value = 0;
            document.getElementById('sb_outnback_out_date').value = departureDate;
            document.getElementById('sb_outnback_ret_date').value = returnDate;
            document.getElementById('sb_outnback_form').submit();
        }

	var _showTooltip = function(cell, name) {
	    var e = document.getElementById(name);
	    if(e) {
		var left = cell.offsetLeft + 52 + 15;
		var top = cell.offsetTop + 270 - 24 - 5;
		e.style.display = 'block';
		e.style.left = left + 'px';
		e.style.top = top + 'px';
	    }
	    cell.className += ' hover';
	}
	var _hideTooltip = function(cell, name) {
	    var e = document.getElementById(name);
	    if(e) {
		//console.log('hide ' + name + ': ' + e);
		e.style.display = 'none';
	    }
	    cell.className = cell.className.replace(/ *hover/, '');
	}

        return {
            "selectOption": _selectOption,
	    "selectNoOption": _selectNoOption,
	    "overlaySelectedCell": _overlaySelectedCell,
            "searchForDate": _searchForDate,
            "showTooltip": _showTooltip,
            "hideTooltip": _hideTooltip
        };
    } ();
}

