var SubscriptionMethods = {
    subscription_operator_request: null
    , SetOperator: function(oid) {
        if (SubscriptionMethods.subscription_operator_request != null) {
            SubscriptionMethods.subscription_operator_request.abort();
        }
        var pid = $(input_pid).val();
        SubscriptionMethods.subscription_operator_request = $.ajax({
            type: 'POST',
            url: '/handlers/Subscriptions/SubscriptionsHandler.ashx',
            xhr: function() {
                if ($.browser.msie && $.browser.version.substr(0, 1) <= 7)
                    return new ActiveXObject('Microsoft.XMLHTTP');
                else
                    return new XMLHttpRequest();
            },
            data: '{"Action":"SET-OPERATOR","OID":"' + oid + '","PID":"' + pid + '"}',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            beforeSend: function() { },
            success: function(result) {
                if (result == null) {
                    return;
                }
                if (result.HasError) {
                    return;
                }
                else {
                    SubscriptionMethods.PresentSubscriptionVariations(result);
                    SubscriptionMethods.PresentSubscriptions(result.SubscriptionWrapper, result.SubscriptionWrapper.SubscriptionID);
                    SubscriptionMethods.PresentFixations(result.SubscriptionWrapper.FixationWrapper, result.SubscriptionWrapper.FixationWrapper.FixationTime);
                    SubscriptionMethods.PresentHigherCosts(result.SubscriptionWrapper.FixationWrapper.HigherCostWrapper, result.SubscriptionWrapper.FixationWrapper.HigherCostWrapper.HigherCost);
                    SubscriptionMethods.PresentPrice(result.SubscriptionWrapper.FixationWrapper.HigherCostWrapper.Price);
                }
            },
            error: function(err) {
                if (err.statusText == 'abort') { return; }
            },
            complete: function() {
                SubscriptionMethods.subscription_operator_request = null;
            }
        });
    }
    , PresentSubscriptionVariations: function(result, selectedValue) {
        var select = $(select_subscription_variation);
        select.empty();
        var list = new Array();
        for (var i = 0; i < result.SubscriptionVariationListItems.length; i++) {
            list[i] = { 'Value': result.SubscriptionVariationListItems[i].SubscriptionTypeID, 'Text': result.SubscriptionVariationListItems[i].Name };
        }
        $('#option_template').tmpl(list).appendTo(select);
        if (selectedValue != null) {
            $(select).find(' option[value="' + selectedValue + '"]:first').attr('selected', true);
        }
    }
    , subscription_variation_request: null
    , SetSubscriptionVariation: function(stid) {
        var operatiorIterations = 0;
        while (SubscriptionMethods.subscription_operator_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
            stid = $(select_subscription_variation).val();
        }
        if (SubscriptionMethods.subscription_variation_request != null) {
            SubscriptionMethods.subscription_variation_request.abort();
        }

        var pid = $(input_pid).val();
        var oid = $(select_operator).val();

        SubscriptionMethods.subscription_variation_request = $.ajax({
            type: 'POST',
            url: '/handlers/Subscriptions/SubscriptionsHandler.ashx',
            xhr: function() {
                if ($.browser.msie && $.browser.version.substr(0, 1) <= 7)
                    return new ActiveXObject('Microsoft.XMLHTTP');
                else
                    return new XMLHttpRequest();
            },
            data: '{"Action":"SET-SUBSCRIPTION-VARIATION","OID":"' + oid + '","STID":"' + stid + '","PID":"' + pid + '"}',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            beforeSend: function() { },
            success: function(result) {
                if (result == null) {
                    return;
                }
                if (result.HasError) {
                    return;
                }
                else {
                    SubscriptionMethods.PresentSubscriptions(result, result.SubscriptionID);
                    SubscriptionMethods.PresentFixations(result.FixationWrapper, result.FixationWrapper.FixationTime);
                    SubscriptionMethods.PresentHigherCosts(result.FixationWrapper.HigherCostWrapper, result.FixationWrapper.HigherCostWrapper.HigherCost);
                    SubscriptionMethods.PresentPrice(result.FixationWrapper.HigherCostWrapper.Price);
                }
            },
            error: function(err) {
                if (err.statusText == 'abort') { return; }
            },
            complete: function() {
                SubscriptionMethods.subscription_variation_request = null;
            }
        });
    }
    , PresentSubscriptions: function(result, selectedValue) {
        var select = $(select_subscription);
        select.empty();
        var list = new Array();
        for (var i = 0; i < result.SubscriptionListItems.length; i++) {
            list[i] = { 'Value': result.SubscriptionListItems[i].SubscriptionID, 'Text': result.SubscriptionListItems[i].Name };
        }
        $('#option_template').tmpl(list).appendTo(select);
        if (selectedValue != null) {
            select.find(' option[value="' + selectedValue + '"]:first').attr('selected', true);
            $(input_sid).val(selectedValue);
        }
    }
    , subscription_request: null
    , SetSubscription: function() {
        var operatiorIterations = 0;
        while (SubscriptionMethods.subscription_operator_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
        }
        operatiorIterations = 0;
        while (SubscriptionMethods.subscription_variation_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
        }
        if (SubscriptionMethods.subscription_request != null) {
            SubscriptionMethods.subscription_request.abort();
        }

        var pid = $(input_pid).val();
        var sid = $(select_subscription).val();

        SubscriptionMethods.subscription_request = $.ajax({
            type: 'POST',
            url: '/handlers/Subscriptions/SubscriptionsHandler.ashx',
            xhr: function() {
                if ($.browser.msie && $.browser.version.substr(0, 1) <= 7)
                    return new ActiveXObject('Microsoft.XMLHTTP');
                else
                    return new XMLHttpRequest();
            },
            data: '{"Action":"SET-SUBSCRIPTION","SID":"' + sid + '","PID":"' + pid + '"}',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            beforeSend: function() { },
            success: function(result) {
                if (result == null) {
                    return;
                }
                if (result.HasError) {
                    return;
                }
                else {
                    SubscriptionMethods.PresentFixations(result, result.FixationTime);
                    SubscriptionMethods.PresentHigherCosts(result.HigherCostWrapper, result.HigherCostWrapper.HigherCost);
                    SubscriptionMethods.PresentPrice(result.HigherCostWrapper.Price);

                }
            },
            error: function(err) {
                if (err.statusText == 'abort') { return; }
            },
            complete: function() {
                SubscriptionMethods.subscription_request = null;
            }
        });
    }
    , PresentFixations: function(result, selectedValue) {
        var select = $(select_fixation);
        select.empty();
        var list = new Array();
        for (var i = 0; i < result.FixationListItems.length; i++) {
            list[i] = { 'Value': result.FixationListItems[i].FixationTime, 'Text': result.FixationListItems[i].FixationTime + ' mån' };
        }
        $('#option_template').tmpl(list).appendTo(select);
        if (selectedValue != null) {
            $(select).find(' option[value="' + selectedValue + '"]:first').attr('selected', true);
            $(input_f).val(selectedValue);
        }
    }
   , PresentHigherCosts: function(result, selectedValue) {
       var select = $(select_hc);
       select.empty();
       var list = new Array();
       for (var i = 0; i < result.HigherCostListItems.length; ) {
           var item = result.HigherCostListItems[i];
           list[i] = { 'Value': item.HigherCost, 'Text': item.HigherCost + ' kr/mån' };
           i++;
       }
       $('#option_template').tmpl(list).appendTo(select);
       if (selectedValue != null) {
           select.find(' option[value="' + selectedValue + '"]:first').attr('selected', true);
           $(input_hc).val(selectedValue);
       }
   }
   , PresentPrice: function(result) {
       $('div#buy-type-1 ul.buyArea li.summary span').text(result.PriceFormatted + ' kr');
   }
       , get_price_request: null
    , GetPrice: function() {
        var operatiorIterations = 0;
        while (SubscriptionMethods.subscription_operator_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
        }
        operatiorIterations = 0;
        while (SubscriptionMethods.subscription_variation_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
        }
        operatiorIterations = 0;
        while (SubscriptionMethods.subscription_request != null && operatiorIterations < 10) {
            setTimeout(operatiorIterations++, 100);
        }
        if (SubscriptionMethods.get_price_request != null) {
            SubscriptionMethods.get_price_request.abort();
        }

        var pid = $(input_pid).val();
        var sid = $(select_subscription).val();
        var f = $(select_fixation).val();
        var hc = $(select_hc).val();

        SubscriptionMethods.get_price_request = $.ajax({
            type: 'POST',
            url: '/handlers/Subscriptions/SubscriptionsHandler.ashx',
            xhr: function() {
                if ($.browser.msie && $.browser.version.substr(0, 1) <= 7)
                    return new ActiveXObject('Microsoft.XMLHTTP');
                else
                    return new XMLHttpRequest();
            },
            data: '{"Action":"GET-PRICE","SID":"' + sid + '","PID":"' + pid + '","HC":"' + hc + '","F":"' + f + '"}',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            beforeSend: function() { },
            success: function(result) {
                if (result == null) {
                    return;
                }
                if (result.HasError) {
                    return;
                }
                else {
                    SubscriptionMethods.PresentPrice(result);
                }
            },
            error: function(err) {
                if (err.statusText == 'abort') { return; }
            },
            complete: function() {
                SubscriptionMethods.get_price_request = null;
            }
        });
    }
    , get_si_request: null
    , GetSI: function() {
        if (SubscriptionMethods.get_si_request != null) {
            SubscriptionMethods.get_si_request.abort();
        }

        var sid = $(select_subscription).val();

        SubscriptionMethods.get_price_request = $.ajax({
            type: 'POST',
            url: '/handlers/Subscriptions/SubscriptionsHandler.ashx',
            xhr: function() {
                if ($.browser.msie && $.browser.version.substr(0, 1) <= 7)
                    return new ActiveXObject('Microsoft.XMLHTTP');
                else
                    return new XMLHttpRequest();
            },
            data: '{"Action":"GET-SI","SID":"' + sid + '"}',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            beforeSend: function() { },
            success: function(result) {
                if (result == null) {
                    return;
                }
                if (result.HasError) {
                    return;
                }
                else {
                    FancyboxHandler.ShowFancybox(result.Name, result.Desc, 'info', true, true);
                }
            },
            error: function(err) {
                if (err.statusText == 'abort') { return; }
            },
            complete: function() {
                SubscriptionMethods.get_price_request = null;
            }
        });
    }
};
