
$().ready(function() {
    $('#next').live('click', nextClick);
    $('#DeliveryType').live('change', cartChange);
    $('[name^=CustomerCategory]').live('change', cartChange);
    $('[name=PaymentType]').live('change', cartChange);

    $('#myreservations_filter_status').live('change', myReservationsFilterChange);
    $('#myreservations_filter_date').live('change', myReservationsFilterChange);

    $('#eventlist_filter_date').live('change', eventsFilterChange);
    $('#eventlist_filter_org').live('change', eventsFilterChange);
    $('#eventlist_filter_title').live('keyup', eventsFilterChange);

    $('#titlelist_filter_org').live('change', titlesFilterChange);
    $('#titlelist_filter_title').live('keyup', titlesFilterChange);

    $('.tablelist tr').live('click', tableListClick);

    $('input[name=eticket]').live('click', printeTicket);
    
    $('#printeticketwaitbutton').live('click', function() {
        $("#printeticketwait").jqm().jqmHide();
    });

    function tableListClick() {
        var id = $(this).find('.list_id').html();
        $(this).toggleClass('selected');

        var id_arr = new Array();
        var ids = $('#test_table_ids').val();
        id_arr = ids.split(',');

        var is_selected = 0;

        for (var i = 0; i < id_arr.length; i++) {
            if (id == id_arr[i]) {
                is_selected = 1;
            }
        }

        if (is_selected == 0) {
            ids += id + ",";
        }
        else {
            ids = "";
            for (var i = 0; i < id_arr.length; i++) {
                if ((id != id_arr[i]) && (id_arr[i] != '')) {
                    ids += id_arr[i] + ",";
                    ids.replace(",,", ",");
                }
            }
        }

        $('#test_table_ids').val(ids);
    };

    $('#captchaLink a').live('click', captchaReload);

    var open = function(hash) {
        hash.w.fadeIn(1000);
        hash.o.fadeIn(1000);
    };

    var close = function(hash) {
        hash.w.fadeOut(1000);
        hash.o.fadeOut(1000, function() { hash.o.remove(); });
    };

    $('.jqmWindow').jqm({
        onShow: open,
        onHide: close
    });

    $('[name^=voucher_select]').live('click', function() {
        var ti = urlParams($(this).attr('href'));
        var im = $('img', this).attr('src');

        if (im.indexOf('icon_voucher.gif') > 0) {
            $('#voucherTicketId').val(ti.ticketId);
            $('#dialogVoucher').jqm().jqmShow();
        }
        else {
            $('#voucherTicketId').val(ti.ticketId);
            $('#removeVoucher').val(1);
            $('#setvoucher-form').submit();
        }

        return false;
    });

    $.fn.dataTableExt.oPagination.four_button = {
        /*
        * Function: oPagination.four_button.fnInit
        * Purpose:  Initalise dom elements required for pagination with a list of the pages
        * Returns:  -
        * Inputs:   object:oSettings - dataTables settings object
        *           node:nPaging - the DIV which contains this pagination control
        *           function:fnCallbackDraw - draw function which must be called on update
        */
        "fnInit": function(oSettings, nPaging, fnCallbackDraw) {
            nFirst = document.createElement('span');
            nPrevious = document.createElement('span');
            nNext = document.createElement('span');
            nLast = document.createElement('span');

            nFirst.appendChild(document.createTextNode(oSettings.oLanguage.oPaginate.sFirst));
            nPrevious.appendChild(document.createTextNode(oSettings.oLanguage.oPaginate.sPrevious));
            nNext.appendChild(document.createTextNode(oSettings.oLanguage.oPaginate.sNext));
            nLast.appendChild(document.createTextNode(oSettings.oLanguage.oPaginate.sLast));

            nFirst.className = "paginate_button first";
            nPrevious.className = "paginate_button previous";
            nNext.className = "paginate_button next";
            nLast.className = "paginate_button last";

            nPaging.appendChild(nFirst);
            nPaging.appendChild(nPrevious);
            nPaging.appendChild(nNext);
            nPaging.appendChild(nLast);

            $(nFirst).click(function() {
                oSettings.oApi._fnPageChange(oSettings, "first");
                fnCallbackDraw(oSettings);
            });

            $(nPrevious).click(function() {
                oSettings.oApi._fnPageChange(oSettings, "previous");
                fnCallbackDraw(oSettings);
            });

            $(nNext).click(function() {
                oSettings.oApi._fnPageChange(oSettings, "next");
                fnCallbackDraw(oSettings);
            });

            $(nLast).click(function() {
                oSettings.oApi._fnPageChange(oSettings, "last");
                fnCallbackDraw(oSettings);
            });

            /* Disallow text selection */
            $(nFirst).bind('selectstart', function() { return false; });
            $(nPrevious).bind('selectstart', function() { return false; });
            $(nNext).bind('selectstart', function() { return false; });
            $(nLast).bind('selectstart', function() { return false; });
        },

        /*
        * Function: oPagination.four_button.fnUpdate
        * Purpose:  Update the list of page buttons shows
        * Returns:  -
        * Inputs:   object:oSettings - dataTables settings object
        *           function:fnCallbackDraw - draw function which must be called on update
        */
        "fnUpdate": function(oSettings, fnCallbackDraw) {
            if (!oSettings.aanFeatures.p) {
                return;
            }

            /* Loop over each instance of the pager */
            var an = oSettings.aanFeatures.p;
            for (var i = 0, iLen = an.length; i < iLen; i++) {
                var buttons = an[i].getElementsByTagName('span');
                if (oSettings._iDisplayStart === 0) {
                    buttons[0].className = "paginate_disabled_first";
                    buttons[1].className = "paginate_disabled_previous";
                }
                else {
                    buttons[0].className = "paginate_enabled_first";
                    buttons[1].className = "paginate_enabled_previous";
                }

                if (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()) {
                    buttons[2].className = "paginate_disabled_next";
                    buttons[3].className = "paginate_disabled_last";
                }
                else {
                    buttons[2].className = "paginate_enabled_next";
                    buttons[3].className = "paginate_enabled_last";
                }
            }
        }
    };

    function compareDT(x, y) {
        var dtxfrom = x.toUpperCase().indexOf("<STRONG>") + 8;
        var dtxto = x.toUpperCase().indexOf("</STRONG>");
        var dtxs = x.substring(dtxfrom, dtxto);

        var comma = "."
        var pos = dtxs.indexOf(comma);

        if (pos < 0) {
            comma = "/";
            pos = dtxs.indexOf(comma);
        }

        var dtx_d = dtxs.substring(0, pos);
        var rest = dtxs.substring(pos + 1, dtxs.length);
        pos = rest.indexOf(comma);
        var dtx_m = rest.substring(0, pos);
        rest = rest.substring(pos + 1, rest.length);
        pos = rest.indexOf(" ");
        var dtx_y = rest.substring(0, pos);
        dtx = new Date(dtx_y, dtx_m, dtx_d);

        var dtyfrom = y.toUpperCase().indexOf("<STRONG>") + 8;
        var dtyto = y.toUpperCase().indexOf("</STRONG>");
        dtys = y.substring(dtyfrom, dtyto);

        var pos = dtys.indexOf(comma);

        var dty_d = dtys.substring(0, pos);
        var rest = dtys.substring(pos + 1, dtys.length);
        pos = rest.indexOf(comma);
        var dty_m = rest.substring(0, pos);
        rest = rest.substring(pos + 1, rest.length);
        pos = rest.indexOf(" ");
        var dty_y = rest.substring(0, pos);
        dty = new Date(dty_y, dty_m, dty_d);

        var diff = dtx - dty;
        return diff;
    };

    function compareLinkDT(x, y) {
        var dtxfrom = x.toUpperCase().indexOf(">") + 1;
        var dtxto = x.toUpperCase().indexOf("</A>");
        var dtxs = x.substring(dtxfrom, dtxto);

        var comma = "."
        var pos = dtxs.indexOf(comma);

        if (pos < 0) {
            comma = "/";
            pos = dtxs.indexOf(comma);
        }

        var dtx_d = dtxs.substring(0, pos);
        var rest = dtxs.substring(pos + 1, dtxs.length);
        pos = rest.indexOf(comma);
        var dtx_m = rest.substring(0, pos);
        rest = rest.substring(pos + 1, rest.length);
        pos = rest.indexOf(" ");
        var dtx_y = rest.substring(0, pos);
        dtx = new Date(dtx_y, dtx_m, dtx_d);

        var dtyfrom = y.toUpperCase().indexOf(">") + 1;
        var dtyto = y.toUpperCase().indexOf("</A>");
        dtys = y.substring(dtyfrom, dtyto);

        var pos = dtys.indexOf(comma);
        var dty_d = dtys.substring(0, pos);
        var rest = dtys.substring(pos + 1, dtys.length);
        pos = rest.indexOf(comma);

        var dty_m = rest.substring(0, pos);
        rest = rest.substring(pos + 1, rest.length);
        pos = rest.indexOf(" ");
        var dty_y = rest.substring(0, pos);
        dty = new Date(dty_y, dty_m, dty_d);

        var diff = dtx - dty;
        return diff;
    };

    function compareStringLocal(x, y) {
        return x.toLocaleString().localeCompare(y.toLocaleString());
    };


    // callback functions for datatables sorting columns in titlelist.aspx
    // "title_date" keyword corresponds to keyword used in ListController's GetTitleDateColumnFormat
    jQuery.fn.dataTableExt.oSort['title_date-asc'] = function(x, y) {
        var diff = compareDT(x, y);

        return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['title_date-desc'] = function(x, y) {
        var diff = compareDT(x, y);

        return ((diff > 0) ? -1 : ((diff < 0) ? 1 : 0));
    };

    // "detail_date" keyword corresponds to keyword used in ListController's GetTitleDetailColumnFormat
    jQuery.fn.dataTableExt.oSort['detail_date-asc'] = function(x, y) {
        var diff = compareLinkDT(x, y);

        return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['detail_date-desc'] = function(x, y) {
        var diff = compareLinkDT(x, y);

        return ((diff > 0) ? -1 : ((diff < 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['event_date-asc'] = function(x, y) {
        var diff = compareLinkDT(x, y);

        return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['event_date-desc'] = function(x, y) {
        var diff = compareLinkDT(x, y);

        return ((diff > 0) ? -1 : ((diff < 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['local_string-asc'] = function(x, y) {
        var diff = compareStringLocal(x, y);

        return ((diff < 0) ? -1 : ((diff > 0) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['local_string-desc'] = function(x, y) {
        var diff = compareStringLocal(x, y);

        return ((diff > 0) ? -1 : ((diff < 0) ? 1 : 0));
    };

    iniStyles();

    $([directory_root + 'themes/' + theme + '/images/spinner-large.gif']).preload();

    $(function() {
        var region = $('#CalendarRegion').val();
        $.datepicker.setDefaults($.datepicker.regional[region]);
        $('#myreservations_filter_date').datepicker($.datepicker.regional[region]);
        $('#myreservations_filter_date').val('');
        $('#myreservations_filter_status').val(0);
    });

    $(function() {
        var region = $('#CalendarRegion').val();
        $.datepicker.setDefaults($.datepicker.regional[region]);
        $('#eventlist_filter_date').datepicker($.datepicker.regional[region]);
        $('#eventlist_filter_date').val('');
    });

    $('form:has([name^=printticket])').live('submit', function() {
        $.get($(this).attr('action'), function(response) {
            orderPrint(response);
        });
        return false;
    });

    $('#voucherSubmitCancel').live('click', function() {
        $('#dialogVoucher').jqm().jqmHide();
        return false;
    });

    $('#quick_email').live('focus', function() {
        if ($('#quick_email').val() == $('#login_login').val()) {
            $('#quick_email').val('');
        }
    });

    $('#quick_password_label').live('focus', function() {
        $('#quick_password_label').css('display', 'none');
        $('#quick_password').css('display', 'inline');
        $('#quick_password').val('');
        $('#quick_password').focus();
    });
});

function urlParams(s) {
    var r = {};
    if (s) {
        var q = s.substring(s.indexOf('?') + 1); // remove everything up to the ?
        q = q.replace(/\&$/, ''); // remove the trailing &
        jQuery.each(q.split('&'), function() {
            var splitted = this.split('=');
            var key = splitted[0];
            var val = splitted[1];
            // convert numbers
            if (/^[0-9.]+$/.test(val)) val = parseFloat(val);
            // convert booleans
            if (val == 'true') val = true;
            if (val == 'false') val = false;
            // ignore empty values
            if (typeof val == 'number' || typeof val == 'boolean' || val.length > 0) r[key] = val;
        });
    }
    return r;
};

function nextClick() {
    var delivery = $('#DeliveryType option:selected').val();
    var payment = $('input[@name=pm_type]:checked').val();
    var requireAuthorization = $("#RequireAuthorization").val();
    var authorized = $("#Authorized").val();
    var dialog;
    if ((requireAuthorization == 'False') && (delivery == 1) && (payment == 1)) { dialog = '#dialogRegister'; }
    else { dialog = '#dialogLogin'; }

    if ($(dialog).length) {
        var valid = $('#CartValid').attr('value');
        var showDialog = '';

        $.ajax({
            async: false,
            type: 'GET',
            url: directory_root + 'cartshowdlg.aspx',
            success: function(response) {
                showDialog = response;
            }
        });

        if (showDialog != 'True') {
            return true;
        }
        else {
            $(dialog).jqm().jqmShow();
            return false;
        }
    }
}

function cartChange() {
    var $this = $(this);

    var opts = {
        img: directory_root + 'themes/' + theme + '/images/spinner-large.gif',
        height: 30,
        width: 30
    };

    $this.spinner(opts);
    var delivery = $('#DeliveryType option:selected').val();
    var payment = $('input[@name=pm_type]:checked').val();
    var ticketIds = $(this).attr('name');
    var ticketid = "";
    var pos = ticketIds.indexOf('_');

    if (pos > 0) {
        ticketid = ticketIds.substring(pos + 1, ticketIds.length);
    }

    var urlParam = '?delivery=' + delivery + '&category=' + $(this).val() + '&ticket='
        + ticketid + '&payment=' + payment;

    var tsTimeStamp = new Date().getTime();
    
    $.get(directory_root + 'cartcontent.aspx' + urlParam, { action: 'get', time: tsTimeStamp }, function(response) {
        $('img[src*=spinner]').remove();

        if (response.toString().indexOf('page_expired') > 0) {
            document.body.innerHTML = response;
        }
        else {
            $('#CartContent').html(response);
        }

        iniStyles();
    });
}

function myReservationsFilterChange() {
    var $this = $(this);

    var opts = {
        img: directory_root + 'themes/' + theme + '/images/spinner-large.gif',
        height: 30,
        width: 30
    };

    $this.spinner(opts);
    var state = $('#myreservations_filter_status option:selected').val();
    var created = $('#myreservations_filter_date').val();
    var urlParam = '?state=' + state + '&created=' + created;
    var tsTimeStamp = new Date().getTime();

    $.get(directory_root + 'myreservationscontent.aspx' + urlParam, { action: 'get', time: tsTimeStamp }, function(response) {
        $('#MyReservationsContent').html(response);
        $('img[src*=spinner]').remove();
        iniStyles();
    });
}

function printeTicket() {
    var $this = $(this);
    var id = $(this).attr("id");
    //$("#printeticketwait").jqm().jqmShow();
    $("#print_"+id).submit();
}

function captchaReload() {
    var tsTimeStamp = new Date().getTime();

    $.get($(this).attr('href'), { action: 'get', time: tsTimeStamp }, function(response) {
        $('#captchaImage').html(response);
    });

    return false;
}

function iniStyles() {
    $('.myreservations tr:not(:has(form)):even').addClass('even').next(':has(form)').addClass('even');
    $('.shopping_cart tr:not([class]):even').addClass('even');
    artButtonsSetupJsHover("art-button");

    //$('#eventlist_table').kiketable_colsizable();

	 if (typeof iniDataTables == 'function') {
	     iniDataTables();
	 }
}

function orderPrint(printbody) {
    var pp = window.open('', 'printVersion', 'fullscreen=no,toolbar=no,status=no,menubar=yes,scrollbars=yes,resizable=no,directories=no,location=no,width=640,height=480,top=0,left=0');
    pp.document.write(printbody);
    pp.document.close();
    pp.focus();
    pp.print();
}

$.fn.preload = function() {
    this.each(function() {
        $('<img/>')[0].src = this;
    });
}

function eventsFilterChange() {
    var $this = $(this);

    var opts = {
        img: directory_root + 'themes/' + theme + '/images/spinner-large.gif',
        height: 30,
        width: 30
    };

    $this.spinner(opts);
    var org = $('#eventlist_filter_org option:selected').val();
    var evdate = $('#eventlist_filter_date').val();
    var title = $('#eventlist_filter_title').val();
    var urlParam = '?org=' + org + '&evdate=' + evdate + '&title=' + title;
    var tsTimeStamp = new Date().getTime();

    $.get(directory_root + 'eventlistcontent.aspx' + urlParam, { action: 'get', time: tsTimeStamp }, function(response) {
        $('#events_table').html(response);
        $('img[src*=spinner]').remove();
        iniStyles();
    });
}

function titlesFilterChange() {
    var $this = $(this);

    var opts = {
        img: directory_root + 'themes/' + theme + '/images/spinner-large.gif',
        height: 30,
        width: 30
    };

    $this.spinner(opts);
    var org = $('#titlelist_filter_org option:selected').val();
    var title = $('#titlelist_filter_title').val();

    var urlParam = '?org=' + org + '&title=' + encodeURIComponent(title);
    
    var tsTimeStamp = new Date().getTime();

    $.get(directory_root + 'titlelistcontent.aspx' + urlParam, { action: 'get', time: tsTimeStamp }, function(response) {
        $('#events_table').html(response);
        $('img[src*=spinner]').remove();
        iniStyles();
    });
}


