// this only gets used in SC (release script)
function getSelectedValues (select) {
  var r = new Array();
  for (var i = 0; i < select.options.length; i++)
    if (select.options[i].selected)
      r[r.length] = select.options[i].value;
  return r;
}

// this only gets used in SC (release script)
function selectPrices(obj_id, obj_val) {
    var select = document.getElementById('se_prices')
    var element = (obj_id == 'se_pk') ? 0 : 1;
    var div = (obj_id == 'se_pk') ? 'se_rebate' : 'se_pk';
    deSelect(div);
    for (var i = 0; i < select.options.length; i++) {
        select.options[i].selected = false;
        var value = select.options[i].value;
        arr = value.split('|');
        for (var j = 0; j < obj_val.length; j++) {
            if (obj_val[j] == arr[element]) {
                select.options[i].selected = true;
            }
        }
    }
    pricesCheck();
}

// this only gets used in SC (release script)
function deSelect(div) {
    var arr = div.split(',');
    for (var i = 0; i < arr.length; i++) {
        var select = document.getElementById(arr[i]);
        for (var j = 0; j < select.options.length; j++) {
            select.options[j].selected = false;
        }
    }
}

// this only gets used in SC (release script)
function pricesCheck() {

    dateActivate('uef', 'from', false);
    dateActivate('uef', 'to', false);

    var select = document.getElementById('se_prices');
    var date_from = -1;
    var date_to = -1;
    var active = '';
    var j = -1;
    var k = -1;
    var l = -1;

    for (var i = 0; i < select.options.length; i++) {
        if (select.options[i].selected) {
            value = select.options[i].value;
            var arr = value.split('|');
            // alert(arr[3]);
            if (arr[3] != date_from) {
                if (j <= 0) {
                    date_from = arr[3];
                    j++;
                }
            }
            if (arr[4] != date_to) {
                if (k <= 0) {
                    date_to = arr[4];
                    k++;
                }
            }
            if (arr[5] != active) {
                if (l <= 0) {
                    active = arr[5];
                    l++;
                }
            }
        }
    }
    document.getElementById('uef_from').style.color = document.getElementById('uef_to').style.color = '#000000';
    if (j > 0 || date_from == 0) {
        date_from = 0;
        document.getElementById('uef_from').style.color = '#ff0000';
    }
    if (k > 0 || date_to == 0) {
        date_to = 0;
        document.getElementById('uef_to').style.color = '#ff0000';
    }
    if (l > 0 || active == '?') active = '';
    setDate('from', date_from);
    setDate('to', date_to);
    document.getElementById('se_uef_status').value = active;
}

// this only gets used in SC (release script)
function fcValues() {

    dateActivate('uef', 'from1', false);
    dateActivate('uef', 'to1', false);
    var select = document.getElementById('se_fc');
    var date_from = -1;
    var date_to = -1;
    var active = '';
    var j = -1;
    var k = -1;
    var l = -1;

    for (var i = 0; i < select.options.length; i++) {
        if (select.options[i].selected) {
            value = select.options[i].value;
            var arr = value.split('|');
            // alert(arr[3]);
            if (arr[1] != date_from) {
                if (j <= 0) {
                    date_from = arr[1];
                    j++;
                }
            }
            if (arr[2] != date_to) {
                if (k <= 0) {
                    date_to = arr[2];
                    k++;
                }
            }
            if (arr[3] != active) {
                if (l <= 0) {
                    active = arr[3];
                    l++;
                }
            }
        }
    }
    if (j > 0 || date_from == 0) {
        date_from = 0;
        document.getElementById('uef_from').style.color = '#ff0000';
    }
    if (k > 0 || date_to == 0) {
        date_to = 0;
        document.getElementById('uef_to').style.color = '#ff0000';
    }
    if (l > 0 || active == '?') active = '';
    document.getElementById('se_act').value = active;
    setDate('from1', date_from);
    setDate('to1', date_to);

}

// this only gets used in SC (release script and above two scripts)
function setDate(obj_id, val) {

    var myDate = new Date(val*1000);
    var I_diff = myDate.getTimezoneOffset();

    var theDate = new Date((Math.abs(val) + Math.abs(I_diff*60)) * 1000);
    var d = theDate.getUTCDate();
    var m = theDate.getUTCMonth()+1;
    var Y = theDate.getUTCFullYear();
    var H = theDate.getUTCHours();
    var I = theDate.getUTCMinutes();

    // alert(d+' '+m+' '+Y+' '+H+' '+I);
    for(i=0; i<document.release.length; i++) {
        var name = document.release.elements[i].name;
        switch (name) {
            case 'uef_'+ obj_id +'[d]':
            document.release.elements[i].value = d;
            break;

            case 'uef_'+ obj_id +'[m]':
            document.release.elements[i].value = m;
            break;

            case 'uef_'+ obj_id +'[Y]':
            document.release.elements[i].value = Y;
            break;

            case 'uef_'+ obj_id +'[H]':
            document.release.elements[i].value = H;
            break;

            case 'uef_'+ obj_id +'[i]':
            document.release.elements[i].value = I;
            break;
        }
    }

    if (val == 0) {
        document.getElementById('a_uef_' + obj_id).style.display = 'block';
        dateActivate('uef', obj_id, true);

    }
    else {
        document.getElementById('a_uef_' + obj_id).style.display = 'none';
    }
}


function dateActivate(div, obj, mode) {
    for(i = 0; i<document.release.length; i++) {
        var id = document.release.elements[i].id;
        if (id == 'se_'+div+'_'+obj) {
            document.release.elements[i].disabled = mode;
        }
    }
    if (!mode) {
        document.getElementById('a_'+ div +'_' + obj).innerHTML = 'disable';
        document.getElementById('a_'+ div +'_' + obj).href = 'javascript: dateActivate(\''+div+'\', \''+obj+'\', true)';
    }
    if (mode) {
        document.getElementById('a_'+ div +'_' + obj).innerHTML = 'enable';
        document.getElementById('a_'+ div +'_' + obj).href = 'javascript: dateActivate(\''+div+'\', \''+obj+'\', false)';
    }
}


function show(obj_id, mode) {
    var status = (mode ? 'block' : 'none');
    document.getElementById('a_perf_' + obj_id).style.display = status;
}


function addValue(cId,cValue)
{
    document.getElementById(cId).value = cValue;
}

// used on performance page
function checkPriceCat( cat ) {
    var frm = document.getElementById('frm_choose');
    for (i = 0; i < frm.length; i++) {
        if (frm[i].type == 'select-one') {
            // cat[123_456] => 123_456
            var str_pk = cat.name.slice(4,-1);
            var arr_pk = str_pk.split('_');

            // cat[123_456] => 123_456
            var str_elm = frm[i].name.slice(4,-1);
            var arr_elm = str_elm.split('_');

            if (arr_pk[0] != arr_elm[0]) {
                frm[i].value = 0;
            }
        }
    }

}

function unselectRadioOnFormInput()
{
    // hide the address_new radio button
    $('#address_new').hide();

    // on form click, use the address_new radio button
    $('#shopping_process_form :input').click(function(){
        if (this.type != 'submit' && this.type != 'radio') {
            $('.delivery_address_radio').attr('checked', false);
            $('#address_new').attr('checked', true);
        }
    });
}

/*function disableButtonsOnSubmit()
{
    $('#shopping_process_form').submit(function(){

        $('.buttons_buy .next')
            .attr('class',    'next_disabled')
            .attr('disabled', 'disabled');

        $('.buttons_buy .purchase')
            .attr('class',    'purchase_disabled')
            .attr('disabled', 'disabled');


        $('.buttons_buy .prev')
            .attr('class', 'prev_disabled');

        $('.buttons_buy .clear')
            .addClass('clear_disabled');


    });
}

function enableSubmitButtonOnRadioClick()
{
    $('#diff_delivery_address :input').click(
        function(){
            $('.buttons_buy .next_disabled')
                .attr('class',    'next')
                .attr('disabled', false);
        }
    );
}*/

function handleTickets()
{
    $('#basket .performance').hide();
    var states = Array();

    $('.event_info_details').each(function(i){
        var options = $(this).attr('title').split('|');
        states[i] = {status: 0, id: this.id, statusClass: Array('show', 'hide'), title: Array(options[0], options[1])};
    });

    $('.event_info_details').each(function(i){
        var obj = states[i];
        $(this).html('<a href="#" id="details_'+i+'" class="details '+obj.statusClass[obj.status]+'" alt="" title="'+obj.title[obj.status]+'">'+obj.title[obj.status]+'</a>');
    });

    $('.event_info_details').click(
        function(){

            var index = this.id.charAt(this.id.length-1);
            var obj   = states[index];

            obj.status = Math.abs(obj.status-1);

            $('#details_'+index).html(obj.title[obj.status]);
            $('#details_'+index).attr('class', 'details ' + obj.statusClass[obj.status]);

            // slidetoggle removed problems with ie7 and jquery v 1.2.6
            $('#ticket_'+index).animate({
                height: "toggle",
                opacity:"toggle"
              }, 400);

            return false;
        }
    );
}

function handleDeliveryDetails()
{
    var maxLength = 100;
    var dDetails  = $('#delivery_details .delivery_description').html();
    var pDetails  = $('#delivery_details .payment_description').html();

    // if html text is longer than maxLength then hide it
    if (dDetails != undefined && dDetails.length > maxLength ) {

        $('#delivery_details .delivery_description').hide();

        var content = $('.delivery_info_details').html();
        $('#delivery_details .delivery_info_details').html('<a href="#" class="details" alt="'+content+'" title="'+content+'">'+content+'</a>');

    } else {
        $('#delivery_details .delivery_info_details').remove();
    }

// payment description hide/show
// if html text is longer than maxLength then hide it
    if (pDetails != undefined && pDetails.length > maxLength ) {

        $('#delivery_details .payment_description').hide();

        var content = $('.payment_info_details').html();
        $('#delivery_details .payment_info_details').html('<a href="#" class="details" alt="'+content+'" title="'+content+'">'+content+'</a>');

    } else {
        $('#delivery_details .payment_info_details').remove();
    }
}

// iterates through form elements and validates their inputs; returns boolean
function isValid(identifier){
    var valid = null;
    if (identifier == 'enable_submit_single'){
        valid = false;
    } else if (identifier == 'enable_submit_group'){
        valid = true;
    }
    $('form .'+identifier).each(
            function(i,el){
                if (identifier == 'enable_submit_single' && el.value != 0 && el.type != 'radio' && el.type != 'radio') {
                    valid = true;
                } else if (identifier == 'enable_submit_single' && el.checked == true && (el.type == 'radio' || el.type == 'checkbox')) {
                    valid = true;
                } else if (identifier == 'enable_submit_group' && el.value == 0 && el.type != 'radio' && el.type != 'checkbox') {
                    valid = false;
                } else if (identifier == 'enable_submit_group' && el.checked == false && el.type == 'checkbox') {
                    valid = false;
                }
            }
        );
    return valid;
}

// intialize on change event for form inputs that have group validator; returns boolean(validity of inputs)
function enableButtonsOnSetGroup() {
    var valid = isValid('enable_submit_group');
    $('form .enable_submit_group').keyup(
        function(){
            var isMixedValidator = $(this).parents('form').hasClass('mixedValidator');
            valid = isValid('enable_submit_group');
            if (isMixedValidator){
                if (isValid('enable_submit_single')) {
                    enableDisableButtons(valid);
                } else {
                    enableDisableButtons(false);
                }
            } else {
                enableDisableButtons(valid);
            }
        }
    );

        $('form .enable_submit_group').change(
        function(){
            var isMixedValidator = $(this).parents('form').hasClass('mixedValidator');
            valid = isValid('enable_submit_group');
            if (isMixedValidator){
                if (isValid('enable_submit_single')) {
                    enableDisableButtons(valid);
                } else {
                    enableDisableButtons(false);
                }
            } else {
                enableDisableButtons(valid);
            }
        }
    );
    return valid;
}

// intialize on change event for form inputs that have single validator; returns boolean(validity of inputs)
function enableButtonsOnSetSingle()
{
    var valid = isValid('enable_submit_single');

    $('form .enable_submit_single').keyup(
        function(){
            var isMixedValidator = $(this).parents('form').hasClass('mixedValidator');
            valid = isValid('enable_submit_single');
            if (isMixedValidator){
                if (isValid('enable_submit_group')) {
                    enableDisableButtons(valid);
                } else {
                    enableDisableButtons(false);
                }
            } else {
                enableDisableButtons(valid);
            }
        }
    );

    $('form .enable_submit_single').change(
        function(){
            var isMixedValidator = $(this).parents('form').hasClass('mixedValidator');
            valid = isValid('enable_submit_single');
            if (isMixedValidator){
                if (isValid('enable_submit_group')) {
                    enableDisableButtons(valid);
                } else {
                    enableDisableButtons(false);
                }
            } else {
                enableDisableButtons(valid);
            }
        }
    );
    /* ie6 first click event binding */
    $('form .enable_submit_single.radio').click(
        function(){
            var isMixedValidator = $(this).parents('form').hasClass('mixedValidator');
            valid = isValid('enable_submit_single');
            if (isMixedValidator){
                if (isValid('enable_submit_group')) {
                    enableDisableButtons(valid);
                } else {
                    enableDisableButtons(false);
                }
            } else {
                enableDisableButtons(valid);
            }
        }
    );
    return valid;
}

// initialize mixed form validator
function enableFormValidator()
{
    var s = $('form .enable_submit_single').length;
    var g = $('form .enable_submit_group').length;
    if (s && g) $('form').addClass('mixedValidator');
}

// enable disable submit buttons
function enableDisableButtons(valid)
{
    if (valid) {
        $('form .disable_on_load')
            .attr('disabled', false)
            .removeClass("disabled");
    } else {
        $('form .disable_on_load')
            .attr('disabled', 'disabled')
            .addClass("disabled");
    }
}

// terms of hide/show on performance page
function toggleTermsOfUse()
{
    $('#standard_terms_content').hide();
    $('#special_terms_content').hide();
    $('#standard_terms').addClass('collapsed');
    $('#special_terms').addClass('collapsed');

    $('#standard_terms_toggler').click(
        function(){
            if ($('#standard_terms_content').is(':visible')){
                $('#standard_terms_content').fadeOut('slow');
                $('#standard_terms').removeClass('expanded');
                $('#standard_terms').addClass('collapsed');
             } else {
                $('#standard_terms_content').fadeIn('slow');
                $('#standard_terms').removeClass('collapsed');
                $('#standard_terms').addClass('expanded');
             }
             return;
        }
    );

     $('#special_terms_toggler').click(
      function(){
          if ($('#special_terms_content').is(':visible')){
              $('#special_terms_content').fadeOut('slow');
              $('#special_terms').removeClass('expanded');
              $('#special_terms').addClass('collapsed');
           } else {
              $('#special_terms_content').fadeIn('slow');
              $('#special_terms').removeClass('collapsed');
              $('#special_terms').addClass('expanded');
           }
           return;
      }
    );

    return;
}

// display terms of use on order overview page
function handleTermsOfUse()
{
    $('#standard_terms_content').show();
    $('#special_terms_content').show();

    //initializing events
    $("#tou_agree").click(
        function() {
            termsOfUseWindow('hide');
            $("#additions_to_terms_of_use_checkbox").attr({checked: "checked"});

            return false;
        }
    );

    $("#tou_reject").click(
        function() {
            termsOfUseWindow('hide');
            $("#additions_to_terms_of_use_checkbox").attr({checked: ""});

            return false;
        }
    );

    $("p.agree_box a").click(
        function() {
            termsOfUseWindow('show');

            return false;
        }
    );

    //Set window class that assignes proper CSS styling
    $("#terms_of_use_window").addClass("window");

    //Get the screen height and width
    var maskHeight = $(window).height();
    var maskWidth = $(window).width();

    //Set height and width to mask to fill up the whole screen
    $('#mask').css({'width':maskWidth,'height':maskHeight});

    //Calculate modal window position
    //var windowTop = maskHeight / 2 - $(".window").height() / 2;
    //var windowLeft = maskWidth / 2 - $(".window").width() / 2;

    var windowTop = maskHeight / 2 - 200;
    var windowLeft = maskWidth / 2 - 300;

    $(".window").css({'top':windowTop,'left':windowLeft});

    //Show modal window on load if not agreed
    var alreadyAgreed = $("#additions_to_terms_of_use_checkbox").attr("checked");

    if (!alreadyAgreed) {
        termsOfUseWindow('show');
    } else {
        termsOfUseWindow('hide');
    }

    return;
}

// Show Terms of use window
function termsOfUseWindow(action)
{
    if (action == 'show') {
        //show background mask with transition effect
        $('#mask').fadeIn(500);
        $('#mask').fadeTo("slow",0.2);

        //show window
        $(".window").show();
        }
    else {
        $("#mask").hide();
        $(".window").hide();
        }

    return;
}

function handleDrawer()
{
    $('.drawer-content').each(function(){
        if ($(this).hasClass('active')) {
            $(this).slideDown('fast');
        }
    });
}

function clickDrawer(_self)
{
    if ($.inArray('drawer-handler', _self.attr('class').split(' ')) == -1) {
        _elem = $(_self.parents('.drawer-handler').get(0));
    } else {
        _elem = _self;
    }

    _split = _elem.attr('id').split('-');
    _class = '#drawer-content-' + _split[_split.length - 1];

    if (!$(_class).is(':visible')) {
        $('.drawer-content').removeClass('active');
        $('.drawer-content').hide();

        $(_class).addClass('active');
        handleDrawer();
    }
}

$(document).ready(
    function(){

        $("input[@type=text]:visible:enabled:first").focus();

        unselectRadioOnFormInput();
        //disableButtonsOnSubmit();
        //enableSubmitButtonOnRadioClick();
        handleTickets();
        handleDeliveryDetails();

        enableDisableButtons(false);
        enableFormValidator();
        if (enableButtonsOnSetGroup() && enableButtonsOnSetSingle()){
            enableDisableButtons(true);
        } else {
            enableDisableButtons(false);
        }

        // Terms of use for performance page
        toggleTermsOfUse();

        // Terms of use for order overview
        handleTermsOfUse();

        // drawers (mop, mod, address)
        $('.drawer-content:not(.open)').hide();
        $('.enable_submit_single:checked').each(function(){ clickDrawer($(this)); });
        $('.drawer-handler input[type=radio]').click(function(){ clickDrawer($(this)); });

        // drawers (order overview)
        $('h2.drawer-handler').click(function(){clickDrawer($(this));});

        handleDrawer();
    }
);

