(function() {

    var c_cikkid = 'CIKKID',
        c_kod = 'KOD',
        c_mode = 'MODE',
        cikkek = [],
        cikkcsoport = null;

    var webShopOsszehasonlito,
        webShopOsszehasonlitoArrayLength = 0,
        store,
        initialized = false;

    function Osszehasonlito() {

    }

    function Initialize() {
        if (initialized) return;

        store = new Persist.Store('OCikkek');

        try {
            store.get('myData', function(ok, val) {
                if (ok)
                    webShopOsszehasonlito = val;
                var obj = jQuery.parseJSON(webShopOsszehasonlito);
                webShopOsszehasonlito = obj;
                webShopOsszehasonlitoArrayLength = webShopOsszehasonlito.myTermekcsoportok.length;

                if (webShopOsszehasonlito === null) { webShopOsszehasonlito = { "myTermekcsoportok": [] }; }
            });

            ControlView();
        } catch (e) {
            webShopOsszehasonlito = { "myTermekcsoportok": [] };
        }

        initialized = true;
    };

    Osszehasonlito.prototype.AddToBox = function(object) {
        Initialize();
        webShopOsszehasonlito.myTermekcsoportok.push(object);
        var pushedCikkID = webShopOsszehasonlito.myTermekcsoportok[webShopOsszehasonlitoArrayLength].termekCikkID;       

        for (var i = 0; i <= webShopOsszehasonlitoArrayLength; i++) {
            if (i > 0 && webShopOsszehasonlito.myTermekcsoportok[i - 1].termekCikkID == pushedCikkID) {
                webShopOsszehasonlito.myTermekcsoportok.splice(i, 1);
                alert("Ez a cikk m\u00E1r szerepel az \u00F6sszehasonl\u00EDt\u00F3ban!");
                return 0;
            }
        }

        webShopOsszehasonlito.myTermekcsoportok.sort(function(a, b) {
            var nameA = a.myTermekcsoportNeve.toLowerCase(), nameB = b.myTermekcsoportNeve.toLowerCase();
            if (nameA < nameB)
                return -1;
            if (nameA > nameB)
                return 1;
            return 0;
        });

        var vsMaxKategoriaElem = 0;

        for (var i = 0; i <= webShopOsszehasonlitoArrayLength; i++) {
            var myDataTermCsopNeve = webShopOsszehasonlito.myTermekcsoportok[i].myTermekcsoportNeve;
            if (i > 0 && webShopOsszehasonlito.myTermekcsoportok[i - 1].myTermekcsoportNeve == webShopOsszehasonlito.myTermekcsoportok[i].myTermekcsoportNeve) {
                vsMaxKategoriaElem++;
            } else {
                vsMaxKategoriaElem = 0;
            }

            if (vsMaxKategoriaElem == 5) {
                webShopOsszehasonlito.myTermekcsoportok.splice(i, 1);
                alert("Maxim\u00E1lisan kateg\u00F3ri\u00E1nk\u00E9nt \u00F6sszehasonl\u00EDthat\u00F3 elemek sz\u00E1ma 5!");
                return 0;
            }
        }

        var obj = webShopOsszehasonlito;
        store.set('myData', JSON.stringify(obj));
        webShopOsszehasonlitoArrayLength = webShopOsszehasonlito.myTermekcsoportok.length;
        ControlView();
    };

    Osszehasonlito.prototype.RemoveFromBox = function(i) {
        Initialize();
        webShopOsszehasonlito.myTermekcsoportok.splice(i, 1);
        var obj = webShopOsszehasonlito;
        store.set('myData', JSON.stringify(obj));
        webShopOsszehasonlitoArrayLength = webShopOsszehasonlito.myTermekcsoportok.length;
        ControlView();
    };

    Osszehasonlito.prototype.Draw = function() {
        Initialize();
        ControlView();
    }

    function ControlView() {

        // TermekcsoportNevek szerinti Tömb rendezés.                
        webShopOsszehasonlito.myTermekcsoportok.sort(function(a, b) {
            var nameA = a.myTermekcsoportNeve.toLowerCase(), nameB = b.myTermekcsoportNeve.toLowerCase();
            if (nameA < nameB)
                return -1;
            if (nameA > nameB)
                return 1;
            return 0;
        });

        // Tömb feldolgozása
        var i = 0;
        var termcsopSzamossag = 0;
        //Max Összehasonlítható elemek száma
        var osszahasonlitIDs = [4];
        var myHtml;

        if (webShopOsszehasonlitoArrayLength !== 0) {
            for (i = 0; i < webShopOsszehasonlitoArrayLength; i++) {
                var myDataTermCsopNeve = webShopOsszehasonlito.myTermekcsoportok[i].myTermekcsoportNeve;
                var myDataID = webShopOsszehasonlito.myTermekcsoportok[i].termekCikkID;
                var myDataTermNeve = webShopOsszehasonlito.myTermekcsoportok[i].termekNeve;
                var myKatKod = webShopOsszehasonlito.myTermekcsoportok[i].katKod;
                var myCikkUrl = webShopOsszehasonlito.myTermekcsoportok[i].cikkUrl;
                // Rendezett tömben ha "új termékcsoport" ( [i-1] != [i] ) jön zárja le a régit és nyisson új blockot!

                if (i === 0) { myHtml = '<div class="nsJobbTop"></div><div class="nsJobbRep">' + '<div style="display: table;"><div class="nsJobbTextOsszehasonlito">&Ouml;sszehasonl&iacute;t&oacute;<br/>' + myDataTermCsopNeve + '</div><div class="imgPackOsszehasonlit"></div></div>'; }

                if (i > 0 && webShopOsszehasonlito.myTermekcsoportok[i - 1].myTermekcsoportNeve != webShopOsszehasonlito.myTermekcsoportok[i].myTermekcsoportNeve) {
                    //Összehasonlít Gomb Összerakása
                    var osszehasonlitGombParameterei = 'KOD=' + myKatKod + '&';
                    for (var o = 0; o != termcsopSzamossag; o++) {
                        osszehasonlitGombParameterei += 'CIKKID=' + osszahasonlitIDs[o];
                        //& jeleket füzze bele ha nem az utolsó id a tömbben
                        if (o < termcsopSzamossag - 1) {
                            osszehasonlitGombParameterei += '&';
                        }
                    }

                    // Termcsoport Lezárása ha a csoportban 1 elem van
                    if (termcsopSzamossag == 1) {
                        myHtml += '</div><div class="nsJobbBot"></div>' + '<div class="nsJobbTop"></div><div class="nsJobbRep">' + '<div style="display: table;"><div class="nsJobbTextOsszehasonlito">&Ouml;sszehasonl&iacute;t&iacute;<br/>' + myDataTermCsopNeve + '</div><div class="imgPackOsszehasonlit"></div></div>';
                    } else {
                        // Termcsoport Lezárása ha a csoportban több elem van
                    myHtml += '<div class="OsszehasonlitobtnClass" onclick="Osszehasonlito.Show2(\'' + osszehasonlitGombParameterei + '\');">&Ouml;sszehasonl&iacute;t' + '</div>' + '</div><div class="nsJobbBot"></div>' + '<div class="nsJobbTop"></div><div class="nsJobbRep">' + '<div style="display: table;"><div class="nsJobbTextOsszehasonlito">&Ouml;sszehasonl&iacute;t&oacute;<br/>' + myDataTermCsopNeve + '</div><div class="imgPackOsszehasonlit"></div></div>';
                    }

                    termcsopSzamossag = 0;
                }

                osszahasonlitIDs[termcsopSzamossag] = myDataID;
                termcsopSzamossag++;

                // Default elem felsorolas
                myHtml = myHtml + '<div class="OsszehasonlitoItemClass"><a href="' + Shop.ResolveVirtualPath(myCikkUrl) + '">' + myDataTermNeve + '</a></div>' + '<div style="float:left; cursor:pointer" onclick="javascript:Osszehasonlito.RemoveFromBox(' + i + ')" ><img alt="" src="http://vsweb2003/notebookstore/App_Themes/NotebookStore/nsbtn_x.jpg"/></div><div style="clear:both"></div>';

                // Utolso termekcsoport osszehasonlíto gombja
                if (i == webShopOsszehasonlitoArrayLength - 1 && i !== 0) {
                    var osszehasonlitGombParameterei = 'KOD=' + myKatKod + '&';
                    for (var o = 0; o != termcsopSzamossag; o++) {
                        osszehasonlitGombParameterei += 'CIKKID=' + osszahasonlitIDs[o];
                        //& jeleket füzze bele ha nem az utolsó id a tömbben
                        if (o < termcsopSzamossag - 1) {
                            osszehasonlitGombParameterei += '&';
                        }
                    }

                    if (termcsopSzamossag == 1) {
                        // Termcsoport Lezárása
                        myHtml += '</div><div class="nsJobbBot"></div>' + '<br/>';
                    } else {
                        // Termcsoport Lezárása ha a csoportban több elem van
                        myHtml += '<div class="OsszehasonlitobtnClass" onclick="Osszehasonlito.Show2(\'' + osszehasonlitGombParameterei + '\');">&Ouml;sszehasonl&iacute;t' + '</div>' + '</div><div class="nsJobbBot"></div>';
                    }

                    termcsopSzamossag = 0;

                }

            }
            //Eredmények beírása a DIVbe   
            if (webShopOsszehasonlitoArrayLength == 1) { myHtml += '</div><div class="nsJobbBot"></div>'; }
            var container = document.getElementById('vsOsszehasonlitoContainer');
            if (container) {
                container.innerHTML = myHtml;
            }
        } else {
            myHtml = '';
            var container = document.getElementById('vsOsszehasonlitoContainer');
            if (container) {
                container.innerHTML = myHtml;
            }
        }
    }

    Osszehasonlito.prototype.ChangeKategoria = function(control) {
        if (control) {
            var selected = control.options[control.selectedIndex].value;

            window.location = window.location.pathname + '?' + c_kod + '=' + selected;
        }
        return false;
    };

    Osszehasonlito.prototype.ChangeTermek = function(control, index, kategoria) {
        if (control) {
            var selected = control.options[control.selectedIndex].value;

            var query = GenerateQueryCollection();

            var cikkek = query[c_cikkid];

            if (cikkek && index < cikkek.length) {
                cikkek[index] = selected;
            } else {
                if (!cikkek) {
                    cikkek = [];
                    query[c_cikkid] = cikkek;
                }
                cikkek.push(selected);
            }

            if (!query[c_kod]) {
                query[c_kod] = [kategoria];
            }

            window.location = window.location.pathname + '?' + GenerateQueryString(query);
        }
        return false;
    };

    Osszehasonlito.prototype.GetCurrentMode = function() {
        var query = GenerateQueryCollection();
        var mode = query[c_mode];
        if (mode) return mode[0];
        return '0';
    };

    Osszehasonlito.prototype.SetOsszes = function() {
        var query = GenerateQueryCollection();

        query[c_mode] = ['0'];

        window.location = window.location.pathname + '?' + GenerateQueryString(query);
        return false;
    };

    Osszehasonlito.prototype.SetAzonosElrejtese = function() {
        var query = GenerateQueryCollection();

        query[c_mode] = ['1'];

        window.location = window.location.pathname + '?' + GenerateQueryString(query);
    };

    Osszehasonlito.prototype.SetElteroKiemelese = function() {
        var query = GenerateQueryCollection();

        query[c_mode] = ['2'];

        window.location = window.location.pathname + '?' + GenerateQueryString(query);
    };

    Osszehasonlito.prototype.Toggle = function(cikkcsoport, cikkid, control) {
        var add = true;
        if (control) {
            add = control.checked;
        }

        if (add) {
            return this.Add(cikkcsoport, cikkid);
        } else {
            return this.Del(cikkcsoport, cikkid);
        }
    };

    Osszehasonlito.prototype.Add = function(cikkcsop, cikkid) {
        if (cikkek.length >= WebConfig.OsszehasnlitoMax) {
            alert(Shop.Format(WebStrings.Osszehasonlito_Maximum, WebConfig.OsszehasnlitoMax));
            return false;
        }
        cikkcsoport = cikkcsop;
        cikkek.push(cikkid);

        return true;
    };

    Osszehasonlito.prototype.Del = function(cikkcsop, cikkid) {
        var index = 0;
        for (var c in cikkek) {
            if (cikkek[c] == cikkid) {
                break;
            }

            index++;
        }

        if (cikkek.length > 0 && index < cikkek.length) {
            cikkek.splice(index, 1);
        }

        return true;
    };

    Osszehasonlito.prototype.Show = function() {
        if (cikkek.length === 0 || !cikkcsoport) {
            return;
        }

        var query = '?' + c_kod + '=' + cikkcsoport;
        for (var c in cikkek) {
            query = query + '&' + c_cikkid + '=' + cikkek[c];
        }

        window.location = Shop.ResolveVirtualPath(ShopConsts.Pages.Osszehasonlito) + query;
        return false;
    };

    Osszehasonlito.prototype.Show2 = function(params) {
        window.location = Shop.ResolveVirtualPath(ShopConsts.Pages.Osszehasonlito) + '?' + params;
        return false;
    };

    function GenerateQueryCollection() {
        var qs = location.search.substring(1, location.search.length);
        if (qs.length === 0) return [];

        var result = [];

        qs = qs.replace(/\+/g, ' ');
        var args = qs.split('&');

        for (var i = 0; i < args.length; i++) {
            var pair = args[i].split('=');
            var name = decodeURIComponent(pair[0]);

            var value = (pair.length == 2) ? decodeURIComponent(pair[1]) : name;

            var x = result[name];
            if (x) {
                x.push(value);
            } else {
                result[name] = [value];
            }
        }

        return result;
    }

    function GenerateQueryString(queryCollection) {
        var _values = "";
        for (var i in queryCollection) {
            var values = queryCollection[i];

            for (var z in values) {
                if (_values.length > 0)
                    _values = _values + "&";
                _values = _values + i + "=" + window.escape(values[z]);
            }
        }
        return _values;
    }

    window.Osszehasonlito = new Osszehasonlito();
})();
