/** ************************** OFFICELINE PRODUCT ************************* */
Product.OfficeLine = Class.create();
Product.OfficeLine.prototype = {
    config : null,
    //config : null,
    startState : null,
    currentState : null,
    invalidState : null,

    initialize : function(config) {
        this.config = config;
        this.startState = this.config.currentState;
        this.currentState = this.config.currentState;
        this.invalidState = this.config.invalidState;

        for (i = 0; i < this.config.variants.length; i++) {
            var element = document
                    .getElementById(this.config.variants[i].htmlcontrolId);
            // Event.observe(element, 'change',
            // this.onSelectionChanged.bind(this));
            Event
                    .observe(element, 'change', this.onSelectionChanged
                            .bind(this));
            // Event.observe(element, 'change', this.configure.bind(this))
        }
    },
    onSelectionChanged : function(event) {
        // find state for the selection
        var element = event.target;
        var action = element.value;
        //alert(action);
        // alert('State before change: ' + this.currentState);
        this.changeState(action);
        // alert('State after change: ' + this.currentState);
        this.updateView();
    },
    getCurrentState : function() {
        return this.currentState;
    },
    changeState : function(action) {
        var i = 0;
        var sRes = '';
        var sLog = '1_' + action + '_';
        for (i = 0; i < this.config.variantStateMachine.length; i++) {
            sLog += '2_' + this.config.variantStateMachine[i].state + '_';
            if (this.config.variantStateMachine[i].state == this.currentState) {
                sLog += '3_' + this.config.variantStateMachine[i].action + '_';
                if (this.config.variantStateMachine[i].action == action) {
                    sLog += '4_';
                    sRes = this.config.variantStateMachine[i].state_new;
                    break;
                }
            }
        }

        if (sRes == '') {
            sRes = this.startState;
        }
        if (sRes != this.startState) {
            this.currentState = sRes;
        }

        //alert('sRes: ' + sRes);
        return this.currentState;
        // return sLog;
    },
    updateView : function() {
        this.changeAddToCartUrl();
    },
    changeAddToCartUrl : function() {
        var theForm = document.getElementById('product_addtocart_form');
        var arrUrl = theForm.action.split('/');
        var sUrl = '';
        var i;

        if (arrUrl.length > 0) {
            //alert('Produktid vor der Aktualisierung: ' + arrUrl[arrUrl.length - 2]);
            // alert('Neue Produktid: ' + this.getCurrentProductId());
            arrUrl[arrUrl.length - 2] = this.getCurrentProductId();
            // alert('Produktid nach der Aktualisierung: ' +
            // arrUrl[arrUrl.length - 2]);
            for (i = 0; i < arrUrl.length; i++) {
                //alert(arrUrl[i]);
                if (sUrl === '') {
                    sUrl = arrUrl[i];
                } else {
                    sUrl += '/' + arrUrl[i];
                }
            }
        }

        //alert(theForm.action);
        // sUrl = theForm.action + 'atd_' + this.getCurrentProductId() + '/';
        theForm.action = sUrl;
        // alert(theForm.action);
    },
    getCurrentProductId : function() {
        var productId = 0;
        var i;
        // alert('getCurrentProductId 1');
        for (i = 0; i < this.config.states.length; i++) {
            //alert('getCurrentProductId 2');
            if (this.config.states[i].state === this.currentState) {
                //alert('getCurrentProductId 3');
                //alert('Current State ' + this.currentState + ' Product id: ' + this.config.states[i].product_id);
                productId = this.config.states[i].product_id;
                break;
            }
        }
        //alert('getCurrentProductId 4');

        return productId;
    },
    getAllowedActions : function() {
        var i = 0;
        var arrRes = null;
        var iCountAllowedActions = 0;
        // alert(serialize(this.config.variantStateMachine));
        //alert('getAllowedActions 1');
        for (i = 0; i < this.config.variantStateMachine.length; i++) {
            if (this.config.variantStateMachine[i].state == this.currentState) {
                iCountAllowedActions += 1;
            }
        }

        if (iCountAllowedActions > 0) {
            var j = 0;
            arrRes = new Array(iCountAllowedActions);
            //alert('getAllowedActions 2: ' + this.config.variantStateMachine.length);

            for (i = 0; i < this.config.variantStateMachine.length; i++) {
                //alert('getAllowedActions 3');
                if (this.config.variantStateMachine[i].state == this.currentState) {
                    //alert('getAllowedActions 4');
                    if (this.config.variantStateMachine[i].state_new != this.invalidState) {
                        //alert('getAllowedActions 5');
                        if (this.config.variantStateMachine[i].state_new != this.startState) {
                            //alert('getAllowedActions 6');
                            if (this.config.variantStateMachine[i].state != this.config.variantStateMachine[i].state_new) {
                                //alert('getAllowedActions 7');
                                //alert('currentState: ' + currentState + ' i: ' + i);
                                arrRes[j++] = this.config.variantStateMachine[i].action;
                            }
                        }
                    }
                }
            }
            
            //alert('getAllowedActions 8: ' + arrRes.length);
            for (i = arrRes.length - 1; i > 0; i--) {
                for (j = i - 1; j >= 0; j--) {
                    if (arrRes[i] == arrRes[j])
                    {
                        arrRes.splice(i, 1);
                        break;
                    }
                }
            }
            for (i = 0; i < arrRes.length; i++) {
                var bNext = false;
                for (j = 0; j < this.config.variants.length; j++) {
                    for (k = 0; k < this.config.variants[j].actions.length; k++) {
                        //alert('getAllowedActions 9');
                        if (arrRes[i] == this.config.variants[j].actions[k].action)
                        {
                            //alert('getAllowedActions 10');
                            //alert('Vorher: ' + arrRes[i]);
                            arrRes[i] = this.config.variants[j].actions[k];
                            //alert('Nacher: ' + arrRes[i]);
                            bNext = true;
                            break;
                        }
                    }
                    if (bNext)
                    {
                        break;
                    }
                }
            }
        }

        return arrRes;
    },
    getVariantCodeByElement : function(element) {
        return element.id.replace(/[a-z]*/, '');
    },
    clearSelect : function(element) {
        for ( var i = element.options.length - 1; i >= 0; i--) {
            element.remove(i);
        }
    },
    fillVariants : function() {
        var i;
        var variantCodes = this.getVariantCodes();

        for (i = variantCodes.length - 1; i >= 0; i--) {
            var variantCode = variantCodes[i];
            var select = this.getSelectForVariantCode(variantCode);
            this.clearSelect(select);
            this.fillSelect(select, variantCode);
        }
    },
    fillSelect : function(element, variantCode) {
        var options = this.getAllowedOptions(variantCode);
        this.clearSelect(element);
        // element.options[0] = new Option('chooseText');

        if (options) {
            for ( var i = 0; i < options.length; i++) {
                if (options[i] !== undefined) {
                    element.options[i] = new Option(this
                            .getOptionLabel(options[i]), options[i].action);
                }
            }
        }
    },
    refreshView : function() {
        var i;
        var k;
        var j;

        // element.options[0] = new Option('chooseText');
        // alert('refreshView 2.1');
        for (i = 0; i < this.config.variants.length; i++) {
            //alert('refreshView 2.2');
            var element = document
                    .getElementById(this.config.variants[i].htmlcontrolId);
            //var actions = this.config.variants[i].actions;
            var actions = this.getAllowedActions();
            var actionHtmlcontrolMap = [];
    
            for (var variant in this.config.variants)
            {
                for (var action in variant.actions)
                {
                    actionHtmlcontrolMap[action] = variant.htmlcontrolId;
                }
            }
            //alert('refreshView 1.1');
            // if(options)
            // {
            // alert('refreshView 1.2');
            // for(i=0;i<options.length;i++)
            // {
            // element = options.
            // alert('refreshView 1.3');
            // if(options[i] !== undefined)
            // {
            // alert('refreshView 1.4');
            // element.options[i] =
            // new Option( options[i].label, options[i].action);
            // }
            // }
            // }
    
            // löschen
            for (k = element.options.length - 1; k >= 0; k--) {
                //alert('refreshView 2.3');
                var bRemove = true;
                for (j = 0; j < actions.length; j++) {
                    //alert('refreshView 2.4: j = ' + j + ' actions[j] = ' + actions[j]);
                    if (actions[j] === undefined)
                    {
                        continue;
                    }
                    if (actionHtmlcontrolMap[actions[j].action] == element.id)
                    {
                        if (element.options[k].value == actions[j].action) {
                            //alert('refreshView 2.5');
                            bRemove = false;
                            break;
                        }
                    }
                }
                if (bRemove) {
                    //alert('refreshView 2.6');
                    element.remove(k);
                }
            }
    
            // hinzufügen
            //alert('refreshView 2.7');
            for (j = 0; j < actions.length; j++) {
                //alert('refreshView 2.8');
                if (actions[j] === undefined)
                {
                    continue;
                }
                var bAdd = true;
                for (k = 0; k < element.options.length; k++) {
                    //alert('refreshView 2.9');
                    if (actionHtmlcontrolMap[actions[j].action] == element.id)
                    {
                        if (element.options[k].value == actions[j].action) {
                            //alert('refreshView 2.10');
                            bAdd = false;
                            element.options[k].text = actions[j].label;
                            break;
                        }
                    }
                }
                if (bAdd) {
                    //alert('refreshView 2.11');
                    element.options[element.options.length] = new Option(
                            actions[j].label, actions[j].action);
                }
            }
        }
    
        //alert('refreshView 3.1');
    },
    getVariantCodes : function() {
        //var variantCodes = new Array();
        var variantCodes = [];
        var index = 0;
        for ( var i = 0; i < this.config.variants.length; i++) {
            variantCodes[index++] = this.config.variants[i].code;
        }
    
        return variantCodes;
    },
    getSelectForVariantCode : function(variantCode) {
    },
    getAllowedOptions : function(variantCode) {
        var variantOptions = this.getVariantOptions(variantCode);
        //if (variantOptions === null)
        //	alert ('variantOptions is null');
        //else
        //	alert ('variantOptions.length: ' + variantOptions.length);
        var allowedOptions = this.getAllowedActions();
        var allowedVariantOptions = [];
        var index = 0;
    
        for ( var i = 0; i < allowedOptions.length; i++) {
            for ( var j = 0; j < variantOptions.length; i++) {
                if (variantOptions[j] == allowedOptions[i]) {
                    allowedVariantOptions[index++] = variantOptions[j];
                    break;
                }
            }
        }
    
        return allowedVariantOptions;
    },
    isVariantSelected : function() {
        var bRes = this.currentState != this.startState;
        bRes &= this.currentState != this.invalidState;
        
        return bRes;
    },
    /*
    hideVariantNotSelectedMessage : function() {
        hideVariantNotSelectedMessage();
    },
    */
    showVariantNotSelectedMessage : function() {
        var element = document.getElementById('variant_not_selected_message');
        if (element !== null)
        {
            var sLabelNotSelected = "";
            if (this.config.variants.length > 0)
            {
                sLabelNotSelected = this.config.variants[0].labelNotSelected;
            }
            
            var i;
            var s = '';
            s += '<table>';
            for (i = 0; i < this.config.states.length; i++)
            {
            	s +=  '<tr>' +
	        		  '<td>' + this.config.states[i].state + '</td>' + 
	        		  '<td>' + this.config.states[i].auspraegungid + '</td>' +
	        		  '<td>' + this.config.states[i].price + '</td>' +
	        		  '<td>' + this.config.states[i].product_id + '</td>' +
	        		  '<td>' + this.config.states[i].isSalable + '</td>' +
	        		  '</tr>';
            }
            s += '</table><br/>';
            s += '<table>';
            var sVariants = '<table>';
            var sActions = '';
            for (i = 0; i < this.config.variants.length; i++)
            {
            	sVariants +=  '<tr>' +
            		  '<td>' + this.config.variants[i].code + '</td>' +
            		  '<td>' + this.config.variants[i].label + '</td>' +
            		  '<td>' + this.config.variants[i].labelNotSelected + '</td>' +
            		  '<td>' + this.config.variants[i].htmlcontrolId + '</td>' +
            		  '</tr>';
            	sActions +=  '<table>';
                for (var j = 0; j < this.config.variants[i].actions.length; j++)
                {
                	sActions +=  '<tr>' +
                		  '<td>' + this.config.variants[i].actions[j].action + '</td>' +
                		  '<td>' + this.config.variants[i].actions[j].label + '</td>' +
                		  '<td>' + this.config.variants[i].actions[j].order + '</td>' +
                		  '<td>' + this.config.variants[i].actions[j].attribute + '</td>' +
                		  '<td>' + this.config.variants[i].actions[j].option + '</td>' +
                		  '</tr>';
                }
            	sActions +=  '</table><br/>'
            }
            sVariants += '<table><br/>';
            s += '</table><br/>';
            s += sVariants + sActions;
            s += '<table>';
            for (i = 0; i < this.config.variantStateMachine.length; i++)
            {
            	s +=  '<tr>' +
            		  '<td>' + this.config.variantStateMachine[i].state + '</td>' + 
            		  '<td>' + this.config.variantStateMachine[i].action + '</td>' +
            		  '<td>' + this.config.variantStateMachine[i].state_new + '</td>' +
            		  '</tr>';
            }
            s += '</table>';
            //element.innerHTML = s;
            element.innerHTML = sLabelNotSelected;
            element.style.visibility = 'visible';
            element.style.display = 'block';
            //element.style.height = '30px';
            //element.style.width = '200px';
            //element.style.position = 'relative';
            //element.style.top = '-80px';
            //element.style.left = '50px';
            //window.setTimeout("this.hideVariantNotSelectedMessage()",3000);
            window.setTimeout("hideVariantNotSelectedMessage()",5000);
        }
    }
};

function hideVariantNotSelectedMessage() {
    var element = document.getElementById('variant_not_selected_message');
    if (element !== null)
    {
        element.style.visibility = 'hidden';
        element.style.display = 'none';
        //element.style.height = '0px';
    }
}
//MK 2010-03-05
function opernShipping(url) {
	popWin(url,'shipping_popup','width=960,height=830,resizable=yes,scrollbars=yes');
	return false;
}
