var RadioGroup = Class.create();

RadioGroup.prototype = {
    initialize : function(obj) { 
        this.obj = obj;
        this.no = obj.down(); this.no.setStyle({'cursor':'pointer'});
        this.yes = this.no.next(); this.yes.setStyle({'cursor':'pointer'});
        this.title = this.yes.next(); this.title.setStyle({'cursor':'pointer'});
        this.price = this.title.next(); this.price.setStyle({'cursor':'pointer'});
        this.busy = false;
        this.deactivate();
        this.active = false;
    },
    get : function() {
         return this.obj;
    },
    deactivate : function() {
        this.no.show();
        this.yes.hide();
        this.title.removeClassName('highlight');
        this.price.removeClassName('highlight');
        this.setActive(false);
    },
    activate : function() {
        this.no.hide();
        this.yes.show();
        this.title.addClassName('highlight');
        this.price.addClassName('highlight');
        this.setActive(true)
    },
    toggle : function () {
        if(!this.isActive()) {
            this.activate();
        } else {
            this.deactivate();
        }
    },
    setActive : function(val) {
        this.active = val;
    },
    isActive : function() {
        return this.active;
        return this.no.style.display == "none";
     },
     setIsBusy : function(val) {
        this.busy = val;
     },
     isBusy : function() {
        return this.busy;
     }
}
var FrontPriceController = Class.create();

FrontPriceController.prototype = {
    initialize : function(id, t) { 
        this.id = id;
        this.tab = t;
        this.form = $('form_'+this.id);
        this.bredband = this.form.down('.frontPriceRow');
        this.voip = this.bredband.next();
        this.voips = new Array();
        this.voips.push(new RadioGroup(this.voip));
        this.mbb = this.voip.next();
        this.mbbs = new Array();
        this.mbbs.push(new RadioGroup(this.mbb));
        this.tv = this.mbb.next();
        this.tvs = new Array();
        this.tvs.push(new RadioGroup(this.mbb.next()));
        this.tvs.push(new RadioGroup(this.mbb.next().next()));
        this.tvs.push(new RadioGroup(this.mbb.next().next().next()));
        this.tvs.push(new RadioGroup(this.mbb.next().next().next().next()));
        this.tvs.push(new RadioGroup(this.mbb.next().next().next().next().next()));
        this.tvs.push(new RadioGroup(this.mbb.next().next().next().next().next().next()));
        this.rebate = this.mbb.next().next().next().next().next();
        for(var i=0; i<this.voips.length; i++)
            Event.observe(this.voips[i].get(), 'click', this.toggleVoipOffer.bindAsEventListener(this, i));
        for(i=0; i<this.tvs.length; i++) {
            Event.observe(this.tvs[i].get(), 'click', this.toggleTvOffer.bindAsEventListener(this, i));
        }
        for(i=0; i<this.mbbs.length; i++) {
            Event.observe(this.mbbs[i].get(), 'click', this.toggleMbbOffer.bindAsEventListener(this, i));
        }
        if(this.form.offerCode.value == "dsl1") {
            $('tab_3').setStyle({visibility:'hidden'});
        }
        Event.observe(this.form, 'submit', this.verifySelectedOffer.bindAsEventListener(this));     
        this.splashDiv = this.form.down('.splashContainer');
        this.splashImg = this.form.down('.splashImage');  
        if(this.form.preSelectVoip.value != "Nej") {
        	// Check voip if total price is 0
            //if(this.form.voip.value == this.form.voipRebate.value) {
        		this.toggleVoipOffer(null, 0);
        	//}
        }          
        var s = this.tab.getSize();
        this.tabs = [];
        for(i=0; i<s; i++) {
            var t = this.tab.getObj(i);
            this.tabs.push(t);
            Event.observe(t.get(), 'click', this.toggleTab.bindAsEventListener(this, i));
        }
        this.toggleTvOffer(this, 0); //0 = TV Bas
        this.activeTabIndex = 0;
        this.toggleTab(null, this.activeTabIndex);
        this.updateTotal();
    },
    clickTab : function (e, tab) {
          
    },
    toggleTab : function(e, i) {
        if(i == undefined) i =  this.activeTabIndex;
        switch(i) {
            case 0: 
                 this.toggleVisible(false, this.voips);
                 this.toggleVisible(false, this.mbbs);
                 this.toggleVisible(false, this.tvs);
                 break;

            case 1: 
                 this.toggleVisible(true, this.voips);
                 this.toggleVisible(false, this.mbbs);
                 this.toggleVisible(false, this.tvs);
                 break;
            case 2: 
                 this.toggleVisible(false, this.voips);
                 this.toggleVisible(true, this.mbbs);
                 this.toggleVisible(false, this.tvs);
                 break;
            case 3: 
                 this.toggleVisible(false, this.voips);
                 this.toggleVisible(false, this.mbbs);
                 this.toggleVisible(true, this.tvs);
                 break;
            default: 
                 break;
        }
        this.activeTabIndex = i;
    },
    toggleVisible : function(v, arr) {
        for(i=0; i<arr.length; i++) {
            var obj = arr[i];
            var el = obj.get();
            
            if(!v && !obj.isActive())
                 new Effect.Fade(el, {
                      duration: .3, 
                      delay: 0 + (i * 0.1), 
                      beforeStart: function() {
                            obj.setIsBusy(true);
                      },
                      afterFinish: function() {
                            obj.setIsBusy(false);
                      }
                 });
            else 
                new Effect.Appear(el, {delay:0 + (i * 0.1), duration:0.1}); 
        }
    },
    toggleVoipOffer : function (e, i) {
        var obj = this.voips[i];
        if(obj.isBusy()) return;
        var val = obj.get().readAttribute('voipOfferCode');
        for(var i=0; i<this.voips.length; i++) {
            var o = this.voips[i];
            var v = o.get().readAttribute('voipOfferCode');
            if(v == val) continue;
            o.deactivate();
        }
        obj.toggle();
        this.toggleTab();
        this.updateTotal();
    },
    toggleTvOffer : function(e, i) {
        var obj = this.tvs[i];
        var val = obj.get().readAttribute('tvOfferCode');
        for(var i=0; i<this.tvs.length; i++) {
            var o = this.tvs[i];
            var v = o.get().readAttribute('tvOfferCode');
            if(v == val) continue;
            o.deactivate();
        }
        obj.toggle(); 
        this.toggleTab();
        this.form.tv.value = obj.get().readAttribute('price');
        this.form.tvOfferCode.value = obj.get().readAttribute('tvOfferCode').replace(/\&amp;/g,'&');
        this.updateTotal();
    },
    toggleMbbOffer : function (e, i) {
        var obj = this.mbbs[i];
        var val = obj.get().readAttribute('mbbOfferCode');
        for(var i=0; i<this.mbbs.length; i++) {
            var o = this.mbbs[i];
            var v = o.get().readAttribute('mbbOfferCode');
            if(v == val) continue;
            o.deactivate();
        }
        obj.toggle();
        this.toggleTab();
        this.updateTotal();
    },
    isVoip : function () {
        for(var i=0; i<this.voips.length; i++) {
            if(this.voips[i].isActive()) return true;
        }
        return false;
    },
    isMbb : function () {
        for(var i=0; i<this.mbbs.length; i++) {
            if(this.mbbs[i].isActive()) return true;
        }
        return false;
    },
    isTv : function () {
        for(var i=0; i<this.tvs.length; i++) {
            if(this.tvs[i].isActive()) return true;
        }
        return false;
    },
    isSilver : function () {
        return this.form.tvOfferCode.value.toLowerCase().indexOf("silver") != -1;
    }, 
    isGuld : function () {
        return this.form.tvOfferCode.value.toLowerCase().indexOf("guld") != -1;
    }, 
    isLan : function () {
        return this.form.offerCode.value.indexOf('lan') != -1
    },
    getTripleRebate : function() {
        var val = 0;
        if(this.isVoip() && this.isTv()) {
            var tripleRebate = this.form.tripleRebate.value.split(",");
            if(tripleRebate.length == 1 || this.isSilver()) {
                 val += parseInt(tripleRebate[0]);
            } else  {
                 val += parseInt(tripleRebate[1]);
            } 
        }
        return val;
    },
    updateTotal : function () {
        var bredband = parseInt(this.form.bredband.value);
        var bredbandRebate = parseInt(this.form.bredbandRebate.value);
        var voip = 0;
        var voipRebate = 0;
        var mbb = 0;
        var mbbRebate = 0;
        var tv = 0;
        var tripleRebate = this.getTripleRebate();
        if(this.isVoip()) {
             voip = parseInt(this.form.voip.value);
             voipRebate = parseInt(this.form.voipRebate.value);
        }
        if(this.isMbb()) {
             mbb = parseInt(this.form.mbb.value);
             mbbRebate = parseInt(this.form.mbbRebate.value);
        }
        if(this.isTv()) { 
            tv = parseInt(this.form.tv.value);
        }
        
        /* update voip price */
        var rebate = -voipRebate - bredbandRebate - tripleRebate - mbbRebate;
        var element = this.rebate.down('.col3');
        element.innerHTML = rebate + ' kr/m&#229;n';
        
        /* update bredband price */
        element = this.bredband.down('.col3');
        element.innerHTML = bredband - voipRebate + " kr/m&#229;n";
        
        /* update tv price */
        for(var i=0; i<this.tvs.length; i++) {
            element = i == 0 ? this.tv : this.tv.next(i-1);
            var price = parseInt(element.getAttribute('price'));
            if(this.tvs[i].isActive()) {
                element.down('.col3').innerHTML = price - tripleRebate + " kr/m&#229;n";
            } else {
                element.down('.col3').innerHTML = price + " kr/m&#229;n";
            }
        }
        
        /* update total price */
        var total = bredband + voip + tv + mbb + rebate;
        element = this.form.down('.totalPrice');
        var oldTotal = parseInt(element.innerHTML);
        element.innerHTML = total;
        
        if(!isNaN(oldTotal) && oldTotal != total)
            new Effect.Highlight(element, {
            duration: 0.4,
            startcolor: '#cbe4f3',
            endcolor: '#ffffff',
            restorecolor: '#ffffff'
        });
    },
    verifySelectedOffer : function () {
        this.setTag();
        this.loadUrl();
        return false;
    }, 
    loadUrl : function () {
        var tvOfferCode = this.form.tvOfferCode.value;
        var voipOfferCode = this.form.voipOfferCode.value;
        var mbbOfferCode = this.form.mbbOfferCode.value;
        var u = this.form.orderFlowUrl.value+"?page=new&offerCode="+this.form.offerCode.value+"&category=NO_COMMITMENT_BROADBAND";
        if(this.isVoip()) u += voipOfferCode;
        if(this.isTv()) u += tvOfferCode;
        if(this.isMbb()) u += mbbOfferCode; 
        location.href=u;
    },
    setTag : function () {
        if (typeof Instadia_sendEvent != 'function') {
            return;
        }
        var tvOfferCode = this.form.tvOfferCode.value;
        var voipOfferCode = this.form.voipOfferCode.value;
        var path = this.form.offerPath.value;
        var tag = path.replace(/_/g, ' ').replace(/\//g, '_').substring(1, path.length).toUpperCase();
        if(this.isVoip()) tag += "_VOIP";
        if(this.isTv()) {
            tag += "_" + tvOfferCode.substring(tvOfferCode.lastIndexOf("=")+1, tvOfferCode.length).replace(/_/g, ' ').toUpperCase();
        }
        Instadia_sendEvent('011kr', "BESTALL # " + tag, '');
    }
}

