var portal = function() {
    function string(name) {
        var lang = {
            pl: {
				close: "Zamknij",
                addrmail: "Adres e-mail",
                username: "Użytkownik",
                password: "Hasło",
                search: "Szukaj",
                formempty: "Nie wszystkie wymagane pola są uzupelnione.",
                formerror: "Błąd podczas przesyłania formularza, prosimy spróbować ponownie za jakiś czas.",
                formok: "Dziękujemy za przesłanie formularza."
            },
            en: {
				close: "Close",
                addrmail: "E-mail address",
                username: "User",
                password: "Password",
                search: "Search",
                formempty: "Not all required fields are completed.",
                formerror: "An error has occurred whilst sending the form, please try again later.",
                formok: "Thank you for submitting the form."
            },
            de: {
				close: "Schließen",
                addrmail: "E-Mail Adresse",
                username: "Benutzer",
                password: "Kennwort",
                search: "Suchen",
                formempty: "Einige benötigte Felder wurden nicht ausgefüllt.",
                formerror: "Fehler beim Übertragen der Daten. Bitte versuchen Sie es später noch einmal.",
                formok: "Vielen Dank für die Übermittlung des Formulars."
            }
        };


        try {
            var elements = document.getElementsByTagName("html");

            if (elements.length == 1) {
                return lang[elements[0].lang][name];
            }
        }
        catch (error) {
            alert(error);
        }

        return false;
    };






    function open(content, openEventHandler) {
        try {
            var container = document.getElementById("center-box-container");




            var win = document.getElementById("window");

            if (win) {
                win.innerHTML = content;
            }
            else {
                win = container.insertBefore(
					mksystem.dom().createElement("div", { id: "window", innerHTML: content }), container.firstChild
				);

                document.getElementById("center-contenet").style.display = "none";
            }




            var scroll = 0;

            if (self.pageYOffset) {
                scroll = self.pageYOffset;
            } else if (document.documentElement && document.documentElement.scrollTop) {
                scroll = document.documentElement.scrollTop;
            } else if (document.body) {
                scroll = document.body.scrollTop;
            }


            scroll -= 265;

            if (scroll < 0) {
                scroll = 0;
            }

            win.style.marginTop = scroll + "px";




            var onclick = function() {
                document.getElementById("center-contenet").style.display = "block";

                container.removeChild(win);

                return false;
            };


            var anchors = win.getElementsByTagName("a");

            for (var i = 0; i < anchors.length; i++) {
                if (anchors[i].rel == "window[close]") { anchors[i].onclick = onclick; }
            }




            if (openEventHandler) { openEventHandler(win); }
        }
        catch (error) {
            alert(error);
        }
    };






    var form = function() {
        this.validate = function(node, onSelectElement) {
            var handler = new function() {
                this.onCheckedElement = function(element) {
                    var obligation = this.obligation(element);

                    if (obligation != false) {
                        if (element.checked != "checked" || element.checked) {
                            this.selectElement(element, true);

                            this.error = true;
                        }
                        else {
                            this.selectElement(element, false);

                            this.param[obligation] = element.value;
                        }
                    }
                    else {
                        if (element.checked == "checked" || element.checked) {
                            this.param[element.name] = element.value;
                        }
                    }
                };


                this.onValueElement = function(element) {
                    var obligation = this.obligation(element);

                    if (obligation != false) {
                        if (element.value.length == 0) {
                            this.selectElement(element, true);

                            this.error = true;
                        }
                        else {
                            this.selectElement(element, false);

                            this.param[obligation] = element.value;
                        }
                    }
                    else {
                        this.param[element.name] = element.value;
                    }
                };


                this.obligation = function(element) {
                    if (element.name.substring(0, 1) != "!") {
                        return false;
                    }

                    return element.name;
                };


                this.selectElement = function(element, select) {
                };


                this.param = {
            };


            this.error = false;
        };


        if (onSelectElement) {
            handler.selectElement = onSelectElement;
        }


        mksystem.form().read(node, handler);


        return new function() {
            this.param = handler.param;
            this.error = handler.error;
        };
    };




    this.selectElement = function(element, select) {
    };


    this.requestResult = function(sender, args) {
    };




    this.send = function(node, url) {
        var requestResult = this.requestResult;


        var validate = this.validate(node, this.selectElement);

        if (validate.error) {
            alert(string("formempty"));
        }
        else {
            mksystem.request(url, validate.param, function(sender, args) {
                requestResult(sender, args);

                mksystem.form().clear(node);
            }
				);
        }

        return false;
    };
};






var primitive = new function() {
    this.selectElementCenter = function(element, select) {
        /*
        *
        */


        if (select) {
            element.style.borderColor = "rgb(78,56,48)";
        }
        else {
            element.style.borderColor = "rgb(255,255,255)";
        }
    };




    this.selectElementApart = function(element, select) {
        /*
        *
        */


        if (select) {
            element.style.backgroundColor = "rgb(78,56,48)";
        }
        else {
            element.style.backgroundColor = "rgb(255,255,255)";
        }
    };




    this.requestResultAlert = function(sender, args) {
        /*
        *
        */


        if (sender.responseText == "1") {
            alert(string("formok"));
        }
        else {
            alert(string("formerror"));
        }
    };




    this.link = function(node, patter, oneventhandler) {
        /*
        *  Funkcja przeszukuje przekazanego noda i znajduje w nim wszystkie taki 'a' których
        *  właściwość rel spełnia założenia patterna.
        *
        *  Wybranie skojarzonego linku powoduje otwarcie strony na którą link wskazuje w
        *  warstwie okna na stronie.
        */


        var onclick = function() {
            try {
                mksystem.request(this.href, undefined, function(sender, args) {
                    open(
								sender.responseText, oneventhandler
							);
                }
					);
            }
            catch (error) {
                alert(error);
            }

            return false;
        };


        var links = node.getElementsByTagName("a");

        for (var i = 0; i < links.length; i++) {
            if (links[i].rel == patter) { links[i].onclick = onclick; }
        }
    };
};






return {
    contact: function(node) {
        /*
        *  Opis:
        *    Proces wysłania wiadomości przez obiekt Request (komunikat zwraca w oknie).
        *
        *  Status: zakończono
        */
        var action = new form();

        action.requestResult = function(sender, args) {
            open(sender.responseText);
        };

        action.selectElement = primitive.selectElementCenter;


        node.onsubmit = function() {
            return action.send(node, node.action);
        };
    },


    newsletter: function(node) {
        /*
        *  Opis:
        *    Proces zapisania przez obiekt Request (komunikat zwraca przez alert).
        *
        *  Status: zakończono
        */
        var mail = document.getElementById("fieldAddrMail");

        mail.onblur = function() {
            if (this.value == "") {
                this.value = string("addrmail");
            }
        };

        mail.onfocus = function() {
            if (this.value == string("addrmail")) {
                this.value = "";
            }
        };


        /*
        var action = new form();

			action.requestResult = primitive.requestResultAlert;
        action.selectElement = primitive.selectElementCenter;


			node.onsubmit = function() {
        return action.send(node, node.action);
        };
        */
    },


    menu: function(node) {
        /*
        *  Opis:
        *    Rozwija / Zwija obiekt przekazany w REL.
        *
        *  Status: zakończono
        */
        var action = function(target) {
            target.parentNode.className = target.className;
        };


        mksystem.effect().expander(node, action);
    },


    catalog: function() {
        return {
            product: function(node) {
                /*
                *  Opis:
                *    Otwarcie produktu w nowym oknie.
                *
                *  Status: zakończono
                */
                var action = function(target) {
                    try {
                        if (target.dependent != "") {
                            var element = document.getElementById(target.dependent);


                            if (target.className == "selected") {
                                var handler = function(request, args) {
                                    element.innerHTML = request.responseText;

                                    portal.order().product().form(
											element
										);

                                    element.style.display = "block";
                                };


                                mksystem.request(target.href, {}, handler);
                            }
                            else {
                                element.style.display = "none";
                            }
                        }


                        target.parentNode.className = target.className;
                    }
                    catch (error) {
                        alert(error);
                    }
                };


                mksystem.effect().expander(node, action);
            },




            downexpander: function(anchor, node) {
                var action = function(target) {
                    target.parentNode.className = target.className;
                };




                var onclick = function() {
                    var anchors = node.getElementsByTagName("a");

                    for (var i = 0; i < anchors.length; i++) {
                        if ((/expander\[(.*?)\]/).test(anchors[i].rel)) {
                            anchors[i].className = "selected";


                            action(anchors[i]);
                        }
                    }

                    return false;
                };




                if (anchor) {
                    anchor.onclick = onclick;
                }
            },




            upexpander: function(anchor, node) {
                var action = function(target) {
                    target.parentNode.className = target.className;
                };




                var onclick = function() {
                    var anchors = node.getElementsByTagName("a");

                    for (var i = 0; i < anchors.length; i++) {
                        if ((/expander\[(.*?)\]/).test(anchors[i].rel)) {
                            anchors[i].className = "noselected";


                            action(anchors[i]);
                        }
                    }

                    return false;
                };




                if (anchor) {
                    anchor.onclick = onclick;
                }
            }
        };
    },


    login: function(node) {
        /*
        *  Opis:
        *    Sprawdza czy użytkownik wypełnił pola i jeśli są wypełnione przepuszcza formularz.
        *
        *  Status: zakończone
        */
        var password = document.getElementById("fieldPassword");
        var username = document.getElementById("fieldUsername");


        try {
            password.type = "text";
        }
        catch (error) {
        }


        username.onblur = function() {
            if (this.value == "") {
                this.value = string("username");
            }
        };


        username.onfocus = function() {
            if (this.value == string("username")) {
                this.value = "";
            }
        }


        password.onblur = function() {
            if (this.value == "") {
                try {
                    this.type = "text";
                }
                catch (error) {
                }

                this.value = string("password");
            }
        };


        password.onfocus = function() {
            if (this.value == string("password")) {
                try {
                    this.type = "password";
                }
                catch (error) {
                }

                this.value = "";
            }
        }


        node.onsubmit = function() {
            var validate = form.validate(node);

            if (validate.error) {
                alert(string("formempty"));

                return false;
            }
            else {
                return true;
            }
        };
    },




    newsletterform: function(node) {
        var action = new form();

        action.selectElement = primitive.selectElementCenter;


        node.onsubmit = function() {
            var validate = action.validate(node);

            if (validate.error) {
                alert(string("formempty"));

                return false;
            }
            else {
                return true;
            }
        };
    },




    search: function() {
        return {
            form: function(node) {
                /*
                *  Opis:
                *    Sprawdza czy użytkownik wypełnił pola i jeśli są wypełnione przepuszcza formularz.
                *
                *  Status: zakończone
                */
                var search = document.getElementById("fieldSearch");

                search.onblur = function() {
                    if (this.value == "") {
                        this.value = string("search");
                    }
                };

                search.onfocus = function() {
                    if (this.value == string("search")) {
                        this.value = "";
                    }
                }


                node.onsubmit = function() {
                    var validate = form.validate(node);

                    if (validate.error) {
                        alert(string("formempty"));

                        return false;
                    }
                    else {
                        return true;
                    }
                };
            }
        }
    },


    password: function() {
        return {
            change: function(node) {
                /*
                *  Opis:
                *    Proces zmiany hasła przez obiekt Request (komunikat zwraca w oknie alertu).
                *
                *  Status: zakończono
                */
                var action = new form();

                action.requestResult = function(sender, args) {
                    open(sender.responseText);
                };

                action.selectElement = primitive.selectElementCenter;


                node.onsubmit = function() {
                    return action.send(node, node.action);
                };
            },


            form: function(node) {
                /*
                *  Opis:
                *    Wywołuje formularz zmiany hasła w oknie przez obiekt Request.
                *
                *  Status: zakończono
                */
                var oneventhandler = function(node) {
                    try {
                        portal.password().change(
								document.getElementById("login#password#change")
							);
                    }
                    catch (error) {
                        alert(error);
                    }
                };

                primitive.link(node, "password.change", oneventhandler);
            }
        };
    },


    baner: function(swf, node, width, height, baners) {
        var containerBaner = node.appendChild(
			mksystem.dom().createElement("ul")
		);




		var array = [
		];




        for (var i = 0; i < baners.length; i++) {
            var id = node.id + "-" + i;


            var baner = containerBaner.appendChild(
					mksystem.dom().createElement("li", {}, [
							mksystem.dom().createElement("span", { innerHTML: baners[i].title }),
							mksystem.dom().createElement("div", { className: "baner", id: id })
						]
					)
				);


            try {
                swfobject.embedSWF(swf, id, width, height, "9.0.0", "portal/image/flash/expressInstall.swf", baners[i], { wmode: "transparent" }, { wmode: "transparent" });
            }
            catch (error) {
                alert(error);
            }
        }




        return {
            baner: function() {
                var containerMenu = node.appendChild(
						mksystem.dom().createElement("ul", { className: "red-list list" })
					);




                var onclick = function() {
                    for (var i = 0; i < containerBaner.childNodes.length; i++) {
						containerBaner.childNodes[i].style.display = "none";


						try {
							array[i].className = "noselected";
						}
						catch (error) {
						}
                    }


					containerBaner.childNodes[this.rel].style.display = "block";
					
					
					try {
						array[this.rel].className = "selected";
					}
					catch (error) {
					}


                    return false;
                };


                for (var i = 0; i < baners.length; i++) {
                    var position = containerMenu.appendChild(
							mksystem.dom().createElement("li", {}, [
									mksystem.dom().createElement("a", { href: "#", innerHTML: i + 1, onclick: onclick, rel: i })
								]
							)
						);


                    if (i == 0) {
                        containerBaner.childNodes[i].style.display = "block";

                        position.className = "selected";
                    }
                    else {
                        containerBaner.childNodes[i].style.display = "none";

                        position.className = "noselected";
                    }


					array.push(position);
                }
            },


            list: function(prev, next) {
                mksystem.effect().scroll(prev, next, containerBaner, 4);
            }
        };
    },


    order: function() {
        return {
            order: function(node) {
                /*
                *  Opis:
                *    Otwiera okno z wybranym zamówieniem.
                *
                *  Status: zakończono
                */
                var oneventhandler = function(node) {
                    try {
                        portal.order().save(
								document.getElementById("order#save")
							);
                    }
                    catch (error) {
                        alert(error);
                    }
                };

                primitive.link(node, "order.details", oneventhandler);
            },


            save: function(node) {
                /*
                *  Opis:
                *    Obsługuje zapisanie zamówienia.
                *
                *  Status: zakończone
                */
                if (node != null) {
                    var action = new form();

                    action.requestResult = function(sender, args) {
                        open(sender.responseText);
                    };

                    action.selectElement = primitive.selectElementCenter;


                    node.onsubmit = function() {
                        return action.send(node, node.action);
                    };
                }
            },


            product: function() {
                return {
                    form: function(node) {
                        /*
                        *  Opis:
                        *    Okno dodania produktu do zamówienia.
                        *
                        *  Status: zakończono
                        */
                        var oneventhandler = function(node) {
                            try {
                                portal.order().product().save(
										document.getElementById("order#product#insert")
									);
                            }
                            catch (error) {
                                alert(error);
                            }
                        };

                        primitive.link(node, "order.product.insert", oneventhandler);
                    },


                    save: function(node) {
                        /*
                        *  Opis:
                        *    Akcja dodania produktu do zamówienia.
                        *
                        *  Status: zakończone
                        */
                        var action = new form();

                        action.requestResult = function(sender, args) {
                            open(sender.responseText);
                        };

                        action.selectElement = primitive.selectElementCenter;


                        node.onsubmit = function() {
                            return action.send(node, node.action);
                        };
                    }
                };
            }
        };
    },


    picture: function() {
        return {
            billboard: function(node) {
                /*
                *  Opis:
                *    Obsługuje przełączanie między banerami.
                *
                *  Status: Zakończone
                */
                primitive.iteracja(node, /picture\[(.+?)\]/);
            },


            slaid: function(prev, next, node) {
                /*
                *  Opis:
                *    Przełączanie zdjęć co 1. na liście zdjęć.
                *
                *  Status: zakończono
                */
                mksystem.effect().scroll(prev, next, node, 1);
            },


            button: function(node) {
                /*
                *  Opis:
                *    Otwarcie zdjęcia w oknie.
                *
                *  Status: zakończono
                */
                var onclick = function() {
                    try {
                        var content = mksystem.dom().createElement("div", { className: "window-content" }, [
									mksystem.dom().createElement("a", { href: "#", rel: "window[close]", className: "window-close-link", innerHTML: string("close") }),
									mksystem.dom().createElement("div", { className: "center-box-content" }, [
											mksystem.dom().createElement("div", { className: "padding-10-0" }, [
													mksystem.dom().createElement("img", { src: this.href })
												]
											),
											mksystem.dom().createElement("div", { className: "padding-10-0" }, [
													mksystem.dom().createElement("p", { innerHTML: this.title })
												]
											)
										]
									),
									mksystem.dom().createElement("a", { href: "#", rel: "window[close]", className: "window-close-link", innerHTML: string("close") })
								]
							);

                        open(
								content.innerHTML
							);
                    }
                    catch (error) {
                        alert(error);
                    }

                    return false;
                };


                var links = node.getElementsByTagName("a");

                for (var i = 0; i < links.length; i++) {
                    if (links[i].rel == "picture.button") { links[i].onclick = onclick; }
                }
            }
        };
    }
};
} ();

