PHOControllers.cookiesAgreement = {

	allowCookies: function() {
		PHOData.cookiesAllowed = 1;
		var date = new Date();
		date.setFullYear(date.getFullYear() + 10);
		document.cookie = "cookiesAllowed=1; expires=" + date.toGMTString() + "; path=/";
		render("cookiesAgreement");
	},

	bind: function() {

		$(document).on("submit", "#cookiesAgreement", function(e) {
			e.preventDefault();
			PHOControllers.cookiesAgreement.allowCookies();
		});

		$(document).ready(function() {
			render("cookiesAgreement");
		});
	}
};
PHOControllers.datePicker = {

	setDate: function(datePicker, value) {
		datePicker.find("input[name='sqlDate']").val(value);
		datePicker.find("input[name='date']").val(dateFormat(value, "j.n.Y"));

	},

	daySelected: function(datePicker, key) {
		var date = datePicker.find("input[name='sqlDate']").val();
		date = date.split("-");
		var Y = date[0];
		var m = date[1];
		var d = key > 9 ? key : "0"+key;
		PHOControllers.datePicker.setDate(datePicker, Y+"-"+m+"-"+d);
	},

	shiftMonth: function(datePicker, addition) {
		var date = datePicker.find("input[name='sqlDate']").val();
		date = date.split("-");
		var Y = date[0];
		var m = parseInt(date[1]) + addition;
		var d = parseInt(date[2]);
		if(m < 1) { m = 12; Y--; }
		if(m > 12) { m = 1; Y++; }
		var d = Math.min(d, getLastMonthDay(Y, m));
		if(m < 10) m = "0"+m;
		if(d < 10) d = "0"+d;
		PHOControllers.datePicker.setDate(datePicker, Y+"-"+m+"-"+d);
		var datePickerId = PHO.componentId(datePicker);
		var label = datePicker.find("label").text();
		var isRequired = !!datePicker.find("input[name='date']").attr("required");
		render("datePicker."+datePickerId, datePickerId, label, Y+"-"+m+"-"+d, isRequired);
	},

	bind: function() {

		$(document).on("focus", ".datePicker input[name='date']", function () {
			if ($(this).val().length == 0) {
				var datePicker = $(this).parents(".datePicker");
				PHOControllers.datePicker.setDate(datePicker, getToday());
			}
		});

		$(document).on("mousedown", ".datePicker .box .tools a", function (e) {
			e.stopPropagation();
			e.preventDefault();
			var a = $(e.target);
			var datePicker = $(this).parents(".datePicker");
			switch (a.attr("class")) {
				case "prev-month" :
					PHOControllers.datePicker.shiftMonth(datePicker, -1);
					break;
				case "next-month" :
					PHOControllers.datePicker.shiftMonth(datePicker, 1);
					break;
			}
		});

		$(document).on("mousedown click", ".datePicker .box button", function (e) {
			e.stopPropagation();
			e.preventDefault();
			var datePicker = $(this).parents(".datePicker");
			var button = $(e.target);
			if (button.attr("name") == "day") {
				PHOControllers.datePicker.daySelected(datePicker, button.attr("data-key"));
			}
		});

		$(document).on("mousedown click", ".datePicker .box", function (e) {
			e.preventDefault();
			e.stopPropagation();
		});
	}
};
PHOControllers.emailCatch = {
  
  catch: function() {
    var url = location.origin + location.pathname;
    var userEmail = emailCatch.email.value;
    var utmSource = location.search.split('utm_source=')[1];
		var ajax = new Ajax({
			url: "/pho-ajax/emails/email-catch",
			data: {
                url: url,
                userEmail: userEmail,
                utmSource: utmSource
			},
			error: function(message, code) {
        console.warn(message);
        if(code == "email")alert("Neplatný email");
        if(code == "emailExists")alert(message);
        if(code == "emailNotSend")alert(message);
			},

            ok: function(){
        PHOData.emailGiven = 1;
        var date = new Date();
        date.setFullYear(date.getFullYear() + 10);
        document.cookie = "emailGiven=1; expires=" + date.toGMTString() + "; path=/";
        PHOData.emailSent = 1;
        render("emailCatch");
        $("#emailCatch").css("bottom", "0px");
        setTimeout(function(){
          delete PHOData.emailSent;
          render("emailCatch"); 
        }, 3000);
			}
		});
		ajax.send();
  },

	bind: function() {

        $(document).on("scroll", "", function(e){
            if($("#emailCatch").length) {
                var height = $("#emailCatch").outerHeight();
                if (document.documentElement.scrollTop > 20) {
                    document.getElementById("emailCatch").style.bottom = "0px";
                } else {
                    document.getElementById("emailCatch").style.bottom = "-"+height+"px";
                }
            }
        });
    
        $(document).on("click", "#emailCatch button[name='confirm']", function(e) {
            e.preventDefault();
			PHOControllers.emailCatch.catch();
    });
    
        $(document).on("click", "#emailCatch button[name='close']", function(e) {
            e.preventDefault();
            PHOData.emailGiven = 1;
            var date = new Date();
            date.setMonth(date.getMonth() + 1);
            document.cookie = "emailGiven=1; expires=" + date.toGMTString() + "; path=/";
            render("emailCatch");
        });

		$(document).ready(function() {
			render("emailCatch");
		});
	}

};


/**
 * Created by tom on 06.09.17.
 */
PHOControllers.htmlWrapper = {

	bind: function() {

        $(document).ready(function() {
            // do not load adverts if article is PR
            if(typeof PHOData.article != "undefined" && PHOData.article.isPRArticle == 1 && PHO.getCookie("SEZNAM") == "") return;
            window.zenyAdverts.loadAdvertisements();
            window.zenyAdverts.advertisementListeners();
            window.zenyAdverts.advertisementStickyListen();

        });
	}
};
/**
 * Created by tom on 06.09.17.
 */
PHOControllers.modalWrapper = {

	bind: function() {

		// click on closer
		$(document).on("click", "#modal .modalWrapper .closer", function() {
			Modal.hide();
		});

		// click outside
		$(document).on("click", "#modal .modal", function(e) {
			if($(e.target).parents(".container").parents(".modalWrapper").length) return;
			if(!$(this).hasClass("close-on-blur")) return;
			e.stopPropagation();
			Modal.hide();
		});
	}
};
PHOControllers.rapingFox = {

    view: function() {
        var id = PHOData.fox.id;
        var ajax = new Ajax({
            url: "/pho-ajax/increst-fox-view",
            data: {
                id: id,
            },
        });
        ajax.send();
    },

    click: function() {
        var id = PHOData.fox.id;
        var ajax = new Ajax({
            url: "/pho-ajax/increst-fox-click",
            data: {
                id: id,
            },
        });
        ajax.send();
    },

    show: function() {
        var id = PHOData.fox.id;
        var ajax = new Ajax({
            url: "/pho-ajax/get-fox",
            data: {
                id: id,
            },
            ok: function(response) {
                PHOData.fox = response.fox;
                render("rapingFox");
            }

        });
        ajax.send();
    },

    hide: function() {
        PHOData.fox = null;
        var date = new Date();
        date.setDate (date.getDate() + 7);
        document.cookie = "rapingFox=1; expires=" + date.toGMTString() + "; path=/";
        render("rapingFox");
    },

    bind: function() {

        $(document).on("click", "#rapingFox a[name='confirm']", function(e) {
            PHOControllers.rapingFox.click();
            var date = new Date();
            date.setDate (date.getDate() + 7);
            document.cookie = "rapingFox=1; expires=" + date.toGMTString() + "; path=/";
        });

        $(document).on("click", "#rapingFox button[name='close']", function(e) {
            e.preventDefault();
            PHOControllers.rapingFox.hide();
        });

        $(document).ready(function(){
            if(PHOData.fox){
                PHOControllers.rapingFox.view();
                PHOData.emailGiven = 1;
            }
        });

        $(document).ready(function() {
            render("rapingFox");
        });
    }

};



/**
 * Created by tom on 06.09.17.
 */
PHOControllers.loginComponent = {

	userLoginOk: function(response) {
		PHOData.activeUser = response.user;
        if(location.pathname != "/login" && location.pathname != "/logout"){
		    Modal.hide();
		    window.location.reload();
        }
        else location.href = "/";
	},

	// user login error
	userLoginError: function(message) {
		PHOState.components["login"].errorMessage = message;
		render("loginComponent");
	},
    loginProgress: function(state) {
        PHOState.components["login"].fb.loginInProgress = state;
        render("loginComponent");
    },
	login: function() {
        var checkedRemeber = $("#loginComponent input[name = 'rememberMe']").is(':checked');
        var autologin = checkedRemeber ? 1 : 0;
		var data = {
			email: $("#loginComponent input[name='email']").val(),
			password: $("#loginComponent input[name='password']").val(),
			autologin: autologin
		};

		PHOState.components["login"].errorMessage = null;
		PHOState.components["login"].email = data.email;
		PHOState.components["login"].password = data.password;

		var c = PHOControllers.loginComponent;

		var ajax = new Ajax({url: "/pho-ajax/users/login", data: data, ok: c.userLoginOk, error: c.userLoginError});
		ajax.send();
	},
    fbLogin: function() {

        var data = {
            scope: "email"
        };

        // rerequest
        if(PHOState.components["login"].fb.rerequest) data.auth_type ="rerequest";

        PHOControllers.loginComponent.loginProgress(true);

        FB.login(function(response) {

            // unset rerequest
            PHOState.components["login"].fb.rerequest = false;

            FB.api('/me/permissions', function(permissions) {
                // // check permissions
                // for(i in permissions.data) {
                //     var permission = permissions.data[i];
                //     switch(permission) {
                //         case "email" :
                //         case "user_birthday" :
                //             if(permission.status == "declined") {
                //                 PHOState.components["login"].fb.rerequest = true;
                //                 // PHOControllers.loginComponent.loginProgress(false);
                //                 alert("Přihlášení selhalo.");
                //                 return;
                //             }
                //     }
                // }

                if(response.authResponse) {
                    var data = {
                        accessToken: response.authResponse.accessToken
                    };
                    if(PHOState.afterLogin && PHOState.afterLogin.onLoadScript) data.onLoadScript = PHOState.afterLogin.onLoadScript;
                    (new Ajax({
                        url: "/pho-ajax/users/fb-login",
                        data: data,
                        ok: function(response) {
                            if(response.status == "registration-required") {
                                PHO.dispatchEvent("fb-registration-required", response);
                            } else if(response.status == "accounts-linking") {
                                PHO.dispatchEvent("fb-accounts-linking", response);
                            } else {
                                PHO.dispatchEvent("fb-logged-in", response.user);
                            }
                        },
                        error: function(message) {
                            PHOState.components["login"].errorMessage = message;
                            render("loginComponent");
                        },
                        complete: function() {
                            PHOControllers.loginComponent.loginProgress(false);
                        }
                    })).send();
                } else {
                    PHOControllers.loginComponent.loginProgress(false);
                    alert("Přihlášení selhalo.");
                }
            });
        }, data);
    },
	bind: function() {
        // login with fb
        $(document).on("click", "#loginComponent [name='fb-login']", function(e) {
            e.preventDefault();
            PHOControllers.loginComponent.fbLogin();
        });
		// form submit
		$(document).on("submit", "#loginComponent form", function(e) {
			e.preventDefault();
			PHOControllers.loginComponent.login();
		});

		// register clicked
		$(document).on("click", "#loginComponent .register", function() {
            if(location.pathname != "/login") Modal.show("mRegister");
            else location.href = "/registrace";
		});

		// forgotten password clicked
		$(document).on("click", "#loginComponent .forgotten-password", function() {
			Modal.show("mForgottenPassword");
		});

        // FB logged in
        window.addEventListener("fb-logged-in", function() {

            if(location.pathname != "/login") location.reload();
            else location.href = "/";
        });


        // fb registration required
        window.addEventListener("fb-registration-required", function(data) {
            PHOControllers.mFbRegister.init();
            PHOState.modals.mFbRegister.fbUser = data.detail.fbUser;
            PHOState.modals.mFbRegister.fbAccessToken = data.detail.fbAccessToken;
            Modal.show("mFbRegister");
        });

        // fb accounts linking
        window.addEventListener("fb-accounts-linking", function(data) {
            PHOControllers.mFbAccountsLinking.init();
            PHOState.modals.mFbAccountsLinking.fbUser = data.detail.fbUser;
            PHOState.modals.mFbAccountsLinking.fbAccessToken = data.detail.fbAccessToken;
            Modal.show("mFbAccountsLinking");
        });

	},

	init: function() {
		PHOState.components["login"] = {
			email: "",
			password: "",
			errorMessage: null,
            fb: {
			    rerequest: false,
                loginInProgress: false
            }
		};
	}
};
/**
 * Created by tom on 06.09.17.
 */
PHOControllers.register = {

	registrationOk: function() {
        window.location.href = "/registration-complete";
		// Modal.show("mRegistrationDone");
		if(location.pathname != "/registrace"){
            setTimeout(function() {
                Modal.hide();
            }, 5000);
        }

	},

	registrationError: function(message) {
		PHOState.components["register"].errorMessage = message;
        if(location.pathname != "/registrace") Modal.show("mRegister");
        else render();
	},
    loginProgress: function(state) {
        PHOState.components["register"].fb.loginInProgress = state;
        render("register");
    },
	register: function() {
        var c = PHOControllers.register;
        var newsletterChecked = 1;
        if($("#register input[name='newsletterCheck']").is(":checked")) newsletterChecked = 0;

		var data = {
			name: $("#register input[name='name']").val(),
			surname: $("#register input[name='surname']").val(),
			email: $("#register input[name='email']").val(),
            password: $("#register input[name='password']").val(),
            newsletterChecked : newsletterChecked,
            recaptchaToken : grecaptcha.getResponse()
		};

		PHOState.components["register"].errorMessage = null;
		PHOState.components["register"].name = data.name;
		PHOState.components["register"].surname = data.surname;
		PHOState.components["register"].email = data.email;
		PHOState.components["register"].password = data.password;

		var ajax = new Ajax({url: "/pho-ajax/users/register", data: data, ok: c.registrationOk, error: c.registrationError});
		ajax.send();
	},
    fbLogin: function() {

        var data = {
            scope: "email"
        };

        // rerequest
        if(PHOState.components["register"].fb.rerequest) data.auth_type ="rerequest";

        PHOControllers.register.loginProgress(true);

        FB.login(function(response) {

            // unset rerequest
            PHOState.components["register"].fb.rerequest = false;

            FB.api('/me/permissions', function(permissions) {
                // // check permissions
                // for(i in permissions.data) {
                //     var permission = permissions.data[i];
                //     switch(permission) {
                //         case "email" :
                //         case "user_birthday" :
                //             if(permission.status == "declined") {
                //                 PHOState.components["register"].fb.rerequest = true;
                //                 // PHOControllers.register.loginProgress(false);
                //                 alert("Přihlášení selhalo.");
                //                 return;
                //             }
                //     }
                // }

                if(response.authResponse) {
                    var data = {
                        accessToken: response.authResponse.accessToken
                    };
                    if(PHOState.afterLogin && PHOState.afterLogin.onLoadScript) data.onLoadScript = PHOState.afterLogin.onLoadScript;
                    (new Ajax({
                        url: "/pho-ajax/users/fb-login",
                        data: data,
                        ok: function(response) {
                            if(response.status == "registration-required") {
                                PHO.dispatchEvent("fb-registration-required", response);
                            } else if(response.status == "accounts-linking") {
                                PHO.dispatchEvent("fb-accounts-linking", response);
                            } else {
                                PHO.dispatchEvent("fb-logged-in", response.user);
                            }
                        },
                        error: function(message) {
                            PHOState.components["register"].errorMessage = message;
                            render("register");
                        },
                        complete: function() {
                            PHOControllers.register.loginProgress(false);
                        }
                    })).send();
                } else {
                    PHOControllers.register.loginProgress(false);
                    alert("Přihlášení selhalo.");
                }
            });
        }, data);
    },
	bind: function() {

		// form submit
		$(document).on("submit", "#register form", function(e) {
			e.preventDefault();
			PHOControllers.register.register();
		});

		// login clicked
		$(document).on("click", "#register .login", function() {
            if(location.pathname != "/registrace") Modal.show("mLogin");
            else location.href = "/login";
		});
        // login with fb
        $(document).on("click", "#register [name='fb-login']", function(e) {
            e.preventDefault();
            PHOControllers.register.fbLogin();
        });
        // FB logged in
        window.addEventListener("fb-logged-in", function() {
            if(location.pathname != "/registrace") location.reload();
            location.href = "/";
        });

        // fb registration required
        window.addEventListener("fb-registration-required", function(data) {
            PHOControllers.mFbRegister.init();
            PHOState.modals.mFbRegister.fbUser = data.detail.fbUser;
            PHOState.modals.mFbRegister.fbAccessToken = data.detail.fbAccessToken;
            Modal.show("mFbRegister");
        });

        // fb accounts linking
        window.addEventListener("fb-accounts-linking", function(data) {
            PHOControllers.mFbAccountsLinking.init();
            PHOState.modals.mFbAccountsLinking.fbUser = data.detail.fbUser;
            PHOState.modals.mFbAccountsLinking.fbAccessToken = data.detail.fbAccessToken;
            Modal.show("mFbAccountsLinking");
        });
	},

	init: function() {
		PHOState.components["register"] = {
			name: "",
			surname: "",
			email: "",
			password: "",
			errorMessage: null,
            fb: {
                rerequest: false,
                loginInProgress: false
            }
		};

	}
};
PHOControllers.editArticleImage = {

    fileChoosen: function(file) {
        var m = PHOState.editReview.review;
        (new Ajax({
            url: "/ajax/tmp-file/create",
            data: {
                name: file.name,
                mime: file.type,
                size: file.size
            },
            ok: function(response) {
                m.attachments[response.file.id] = {
                    file: file,
                    upload: response.file,
                    uploader: new TmpFileUploader(response.file.id, file)
                };
                m.attachments[response.file.id].uploader.upload();
                render();
            }.bind(this),
            error: function(message) {
                m.errorMessage = message;
                render();
            }
        })).send();
    },

    uploaderEvent: function(data) {

        var m = PHOState.editReview.review;

        var attachment = m.attachments[data.id];

        if(!attachment || !attachment.upload) return;

        switch(data.state) {
            case "progress-changed" :
                attachment.progress = Math.round(100 * attachment.uploader.getProgress())
                render("editReview");
                break;
            case "done" :
                attachment.progress = 100;
                render("editReview");
                delete attachment.progress;
                attachment.upload.state = PHOData.constants.TMP_FILE_STATE_UPLOADED;
                setTimeout(function() {
                    delete attachment.uploader;
                    render("editReview");
                }, 2000);
                break;
            case "error" :
                m.errorMessage = data.message;
                render("editReview");
                break;
        }
    },

    bind: function() {

        $(document).on("tmp-file-uploader", function(e, data) {
            PHOControllers.editReview.uploaderEvent(data);
        });

        //ATTACHMENTs - START
        $(document).on("change", ".editReview .attachments .drop-zone input[name='file']", function(e) {
            var productId = $(this).closest(".editReview").attr("data-id");
            PHOControllers.editReview.fileChoosen(e.target.files[0], productId);
            $(this).val("");
        });

        $(document).on("click", ".editReview .attachments .drop-zone", function(e) {
            if($(e.target).attr("name") == "file") return;
            e.preventDefault();
            var productId = $(this).closest(".editReview").attr("data-id");
            $("#editReview .attachments .drop-zone input[name='file']").trigger("click");
        });

        $(document).on("drag dragstart dragend dragover dragenter dragleave drop", ".editReview .attachments .drop-zone", function(e) {
            e.preventDefault();
            e.stopPropagation();

            if(e.type != "drop") return;
            if(!e.originalEvent) return;
            if(!e.originalEvent.dataTransfer) return;
            if(!e.originalEvent.dataTransfer.files) return;
            if(e.originalEvent.dataTransfer.files.length < 1) return;

            var productId = $(this).closest(".editReview").attr("data-id");

            PHOControllers.editReview.fileChoosen(e.originalEvent.dataTransfer.files[0], productId);
        });

        $(document).on("click", ".editReview .attachments .uploaded-files .file button[name='remove']", function(e) {
            e.preventDefault();
            var fileId = $(this).parents(".file").attr("data-id");
            var productId = $(this).closest(".editReview").attr("data-id");
            PHOState.editReview.review.deletedFiles.push(fileId);
            render("editReview");
        });

        $(document).on("click", ".editReview .attachments .files .file button[name='remove']", function(e) {
            e.preventDefault();
            var productId = $(this).closest(".editReview").attr("data-id");
            var m = PHOState.editReview.review;
            var fileId = $(this).parents(".file").attr("data-id");
            if(m.attachments[fileId] && m.attachments[fileId].uploader) {
                m.attachments[fileId].uploader.abort();
            }
            delete m.attachments[fileId];
            render("editReview");
        });
        //ATTACHMENTS - END
    },
};



PHOControllers.editArticleMain = {


    bind: function () {

        // click on testArticle
        $(document).on("click", "#editArticleMain textarea[name='content']", function() {
            var data = {
                itemType: "editArticleMain",
            };
            PHOTinyMCE.start("textarea[name='content']", data);
        });

        //RECALCULATE CONTENT LENGTH
        // $(document).on("keyup", "#editArticleMain textarea[name='content']", function() {
        //     var content = $(this).val();
        //     PHOState.components.editArticle.content = content;
        //
        //     var compressedContent = compressString(content);
        //     PHOState.components.editArticle.contentLength = compressedContent.length;
        //
        //     clearTimeout(PHOControllers.keyupTimeout);
        //
        //     PHOControllers.keyupTimeout = setTimeout(function() {
        //         render("editArticleMain");
        //     }, 1000);
        // });
    }
};



PHOControllers.editCategory = {
    sendData: function(){
        var name = $("#category .title .category-name").text();
        var title = $("#editCategory .title").text();
        var perex = $("#editCategory .perex").text();
        var description = $("#editCategory .description").text();

        var ajax = new Ajax({
            url: "/pho-ajax/admin/edit-category",
            data: {
                name: name,
                title: title,
                perex: perex,
                description: description,
                categoryId: PHOData.category.id,
            },
            error: function(message) {
                alert(message);
            },
            ok: function(){
                window.location.reload();
            }
        });
        ajax.send();

    },
	bind: function() {
        // clear pasted data
	    $(document).on("paste", "#category [contenteditable]", function(e) {
            e.preventDefault();
            var pastedData = e.originalEvent.clipboardData.getData('text');
            document.execCommand("insertHTML", false, pastedData);
        });
	    // submit changes
        $(document).on("click", "#editCategory button", function(e) {
            e.preventDefault();
            PHOControllers.editCategory.sendData();
        });
	}
};


PHOControllers.inlineEditArticle = {
    initTinyMCE: function(){
        if(typeof tinymce == "undefined") {
            $.getScript('/static/js/core/external/tinymce/js/tinymce/tinymce.min.js', function() {
                tinymce.baseURL = "/static/js/core/external/tinymce/js/tinymce";
                tinymce.suffix = '.min';
                tinymce.init({
                    selector: '#articleText',
                    theme: "modern",
                    inline: false,
                    content_css : "/static/css/scss",
                    plugins: [
                        "advlist autolink lists link image charmap preview anchor",
                        "searchreplace visualblocks code fullscreen",
                        "insertdatetime contextmenu paste imagetools"
                    ],
                    menubar:false,
                    style_formats: [
                        { title: 'Nadpis 2', block: 'h2'},
                        { title: 'Nadpis 3', block: 'h3'},
                        { title: 'Odstavec', block: 'p'},
                    ],
                    block_formats: 'Odstavec=p;Nadpis 2=h2;Nadpis 3=h3',
                    contextmenu: "link image",
                    toolbar: "undo redo | styleselect | bold italic removeformat | alignleft aligncenter alignright| bullist numlist | code | link image",
                    entity_encoding : "raw",

                    images_upload_handler: function (blobInfo, success, failure) {

                        var xhr, formData;

                        xhr = new XMLHttpRequest();
                        xhr.withCredentials = false;
                        xhr.open('POST', '/pho-ajax/tinymce/image-upload');

                        xhr.onload = function() {
                            var json;

                            if (xhr.status != 200) {
                                failure('HTTP Error: ' + xhr.status);
                                return;
                            }

                            json = JSON.parse(xhr.responseText);

                            if (!json || typeof json.location != 'string') {
                                failure('Invalid JSON: ' + xhr.responseText);
                                return;
                            }

                            success(json.location);
                        };

                        formData = new FormData();
                        formData.append('file', blobInfo.blob(), blobInfo.filename());
                        formData.append('itemGroup', "articles");
                        formData.append('itemId', PHOData.article.agregator_id);

                        xhr.send(formData);
                    },

                });
            });
        }
        else{
            tinymce.EditorManager.execCommand('mceRemoveEditor',true, "articleText");
            tinymce.EditorManager.execCommand('mceAddEditor',true, "articleText");
        }
    },
    sendData: function(){
        var articleName = $("#inlineEditArticle #articleName").text();
        var articleText = tinymce.activeEditor.getContent();
        var ajax = new Ajax({
            url: "/pho-ajax/admin/edit-article",
            data: {
                articleName: articleName,
                articleText: articleText,
                articleId: PHOData.article.agregator_id
            },
            error: function(message) {
                alert(message);
            },
            ok: function(){
                window.location.reload();
            }
        });
        ajax.send();
    },
	bind: function() {
        // clear pasted data
        $(document).on("paste", "#article [contenteditable]", function(e) {
            e.preventDefault();
            var pastedData = e.originalEvent.clipboardData.getData('text');
            document.execCommand("insertHTML", false, pastedData);
        });
        // inlineEditArticle RENDERED - init tinyMCE
        window.addEventListener("component-rendered", function(data) {
            if(data.detail.attr("id") != "inlineEditArticle") return;
            PHOControllers.inlineEditArticle.initTinyMCE();
        });
        // submit changes
        $(document).on("click", "#inlineEditArticle button[type='submit']", function(e) {
            e.preventDefault();
            PHOControllers.inlineEditArticle.sendData();
        });
	}
};

PHOControllers.addCommentImages = {

	readURL: function(input, id, comment) {

		if (input.files && input.files[0]) {
			var reader = new FileReader();

			reader.onload = function(e) {
				$("#img-"+id).attr('src', e.target.result);
				PHO.dispatchEvent("savePHOState", {commentId: comment, attachmentId: id, src: e.target.result});
			}.bind(this);

			reader.readAsDataURL(input.files[0]);
		}
	},

	removeAttachment: function(attachmentId) {
		(new Ajax({
			url: "/pho-ajax/tmp-file/remove",
			data: {
				tmpFileId: attachmentId
			},
			ok: function() {
				console.log("OK");
			},
			error: function() {
				console.log("ERROR");
			}
		})).send()
	},


	fileChoosen: function(file, element, comment) {
		(new Ajax({
			url: "/pho-ajax/tmp-file/create",
			data: {
				name: file.name,
				mime: file.type,
				size: file.size
			},
			ok: function(response) {
				if(!PHOState.comments.attachments[comment]) PHOState.comments.attachments[comment] = {};
				PHOState.comments.attachments[comment][response.file.id] = {
					file: file,
					upload: response.file,
					uploader: new TmpFileUploader(response.file.id, file)
				};
				//preview
				render("addCommentImages."+comment.toString(), comment);
				PHOControllers.addCommentImages.readURL(element, response.file.id, comment);

				PHOState.comments.attachments[comment][response.file.id].uploader.upload();
				//unset val
				$(element).val("");
			}.bind(this),
			error: function(message) {
				alert(message);

			}
		})).send();
	},

	uploaderEvent: function(data) {

		var m = PHOState.comments;

		// var attachment = m.attachments[data.id];
		var key = undefined;
		var attachment = undefined;
		for(i in Object.keys(m.attachments)) {
			key = Object.keys(m.attachments)[i];
			if(attachment = m.attachments[key]) break;
		}

		if(!attachment || !attachment.upload) return;

		switch(data.state) {
			case "progress-changed" :
				attachment.progress = Math.round(100 * attachment.uploader.getProgress());
				break;
			case "done" :
				attachment.progress = 100;
				delete attachment.progress;
				attachment.upload.state = PHOData.constants.TMP_FILE_STATE_UPLOADED;
				setTimeout(function() {
					delete attachment.uploader;
					$("[data-id='"+data.id+"']").parent().addClass("hidden");
				}, 2000);
				break;
			case "error" :
				m.errorMessage = data.message;
				break;
		}
		render("addCommentImages."+key.toString(), key);
	},

	bind: function() {

        //trigger select image
		$(document).on("click", ".addCommentImages button[name='select-image']", function(e) {
			if($(e.target).attr("name") == "file") return;
			e.preventDefault();
			$(this).closest(".addCommentImages").find("input[name='image']").trigger("click");
		});

		$(document).on("change", ".addCommentImages input[name='image']", function(e) {
			var comment = PHO.componentId($(this).closest(".addCommentImages"));
			PHOControllers.addCommentImages.fileChoosen(e.target.files[0], this, comment);
		});

		$(document).on("click", ".addCommentImages button[name='remove']", function(e) {
			var commentId = PHO.componentId($(this).closest(".addCommentImages"));
			var attachmentId = $(this).closest(".upload").attr("data-attachment-id");
			delete PHOState.comments.attachments[commentId][attachmentId];
			PHOControllers.addCommentImages.removeAttachment(attachmentId);
			render("addCommentImages."+commentId.toString(), commentId);
		});

		window.addEventListener("tmp-file-uploader", function(data) {
			PHOControllers.addCommentImages.uploaderEvent(data.detail);
		});

		window.addEventListener("savePHOState", function(data) {
			PHOState.comments.attachments[data.detail.commentId][data.detail.attachmentId].preview = data.detail.src;
		});
	},
};
PHOControllers.addComment = {

    updateParent: function(parentId, comments, newComment){
        for(i in comments){
            // parent found
            if(comments[i].comments_id == parentId){
            	comments[i].comments.push(newComment);
            	return true;
            }
		}
		return false;
	},

	add: function (articleId, commentText, parentId) {
    	console.log(1);
    	var images = [];
    	console.log(2);
    	var parent = parentId ? parentId : 0;
    	console.log(3);
    	if(PHOState.comments.attachments[parent]) {
    	console.log(4);
	        for(i in Object.keys(PHOState.comments.attachments[parent])) {
	            images.push(Object.keys(PHOState.comments.attachments[parent])[i]);
		    }
    	console.log(5);
	    }
    	console.log(6);
		(new Ajax({
			url: "/pho-ajax/comments/add",
			data: {
				articleId: articleId,
				commentText: commentText,
				userId: PHOState.activeUser.users_id,
                parentId: parentId,
				images: images
			},
			ok: function(response){
				var newComment = response.comment;
				// root comment
				if(newComment.comment_id_parent == 0){
					// insert to beginning of comment array
                    PHOData.article.comments.unshift(newComment);

				}
				// child
				else{
                    var update = PHOControllers.addComment.updateParent(parentId, PHOData.article.comments, newComment);
                    if(!update) console.warn("Nepodařilo se nalézt nadřazený komentář");
				}
				if(PHOState.comments.attachments[parent]) delete PHOState.comments.attachments[parent];
				console.log(newComment);
				PHOState.comments.addReplies = [];
				$(".addComment .comment-input").val("");
				render();
				$(".addComment .send-comment button[name='send-comment']").prop("disabled", false);
			},
			error: function(message, code) {

			}
		})).send();
	},


	bind: function() {
		$(document).on("click", ".addComment .send-comment button[name='send-comment']", function(e) {
			e.preventDefault();
            var articleId = $(this).attr("data-articleId");
            var parentId = $(this).attr("data-parentId");
			var textarea = $(this).parents(".textarea-comment").children("textarea");
			var commentText = textarea.val();
			if(commentText == "") {
				alert("zadejte text komentáře");
				return;
            }

			PHOControllers.addComment.add(articleId, commentText, parentId);
            $(".addComment .send-comment button[name='send-comment']").prop("disabled", true);
		});

		$(document).on("keydown", ".addComment .textarea-comment textarea", function(e) {
			if(e.which == 13) $(this).siblings(".icons-wrap").children(".send-comment").children("button[name='send-comment']").click();
		});

		$(document).on("click", ".addComment button[name='add-emoticon']", function(e) {
            e.preventDefault();
            var smileySelect = $(this).siblings("#smileySelect");
            if(smileySelect.is(":visible")){
                smileySelect.hide();
			}
			else smileySelect.show();
        });

        //Show div for load images
		$(document).on("click", ".addComment .add-image button[name='add-image']", function(e) {
			e.preventDefault();
			$(this).closest(".addComment").find(".addCommentImages").toggleClass("hidden");
			parentId = PHO.componentId($(this).closest(".addComment"));

			var index = PHOState.comments.addImages.indexOf(parentId);
			if(index >= 0) {
				delete PHOState.comments.addImages[index];
			} else {
				PHOState.comments.addImages.push(parentId);
			}
		});

	}
};
PHOControllers.articleAuthor = {

	setAuthorInspirative: function(authorId) {
		var ajax = new Ajax({
			url: "/pho-ajax/likes/set-author-inspirative",
			data: {
				authorId: authorId,
			},
			error: function(message, code) {
				if(code == "login") Modal.show("mLogin");
				else if(code =="alreadySetAsFollower") alert("autor článku již je vaší inspirací");
				else console.warn(message);
			},
			ok: function(response){
			    PHOData.followedUsers.push(response.userId);
				render();
			}
		});
		ajax.send();
	},
    unsetAuthorInspirative: function(authorId) {
        var ajax = new Ajax({
            url: "/pho-ajax/likes/unset-author-inspirative",
            data: {
                authorId: authorId,
            },
            error: function(message, code) {
                if(code == "login") Modal.show("mLogin");
                else console.warn(message);
            },
            ok: function(response){
                var index = PHOData.followedUsers.indexOf(response.userId);
                if (index > -1) {
                    PHOData.followedUsers.splice(index, 1);
                }
                render();
            }
        });
        ajax.send();
    },

	bind: function() {
		$(document).on("click", "#articleAuthor button.inspire", function() {
			var authorId = $(this).attr("data-id");
			if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
			}
			PHOControllers.articleAuthor.setAuthorInspirative(authorId);
		});
        $(document).on("click", "#articleAuthor button.noInspire", function() {
            var authorId = $(this).attr("data-id");
            if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
            }
            PHOControllers.articleAuthor.unsetAuthorInspirative(authorId);
        });
	}
};
PHOControllers.articleLikes = {

	setLike: function(articleId) {
		var ajax = new Ajax({
			url: "/pho-ajax/likes/set-like",
			data: {
				articleId: articleId,
			},
			error: function(message, code) {
				if(code == "login") Modal.show("mLogin");
				else if(code =="alreadyLiked") alert("autor článku může dát jen jeden like");
				else console.warn(message);
			},
			ok: function(){

			}
		});
		ajax.send();
	},
    setMoreLikes: function(articleId, likesCount) {
        var ajax = new Ajax({
            url: "/pho-ajax/likes/set-more-likes",
            data: {
                articleId: articleId,
                likesCount: likesCount,
            },
            error: function(message, code) {
                if(code == "noRights") alert("nemáte dostatečná oprávnění");
                else console.warn(message);
            },
            ok: function(){
                window.location.reload();
            }
        });
        ajax.send();
    },
	bind: function() {
		$(document).on("click", "#articleLikes", function() {
			var articleId = $(this).attr("data-article");
			if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
			}
            var val = $(this).find(".likes").text();

            if(val.indexOf("tis") < 0) {
                var val = val.replace(" ", "");
                var newVal = numberFormat(parseInt(val) + 1, 0, " ");
                $(this).find(".likes").text(newVal);
            }
			PHOControllers.articleLikes.setLike(articleId);
		});
        $(document).on("contextmenu", "#articleLikes", function(e) {
            if(PHOState.activeUser == null || PHOState.activeUser.user_role < PHOData.constants.USER_ROLE_SUPER_ADMIN) return;
            e.preventDefault();
            var likesCount = Number(prompt("Kolik liků chcete přidat?", 10));
            var articleId = $(this).attr("data-article");
            PHOControllers.articleLikes.setMoreLikes(articleId, likesCount);
        });

	}
};
PHOControllers.articlePhotoGallery = {
	showArticleGallery: function(imageKey) {

		PHOControllers.mGalleryImage.init(true);
		PHOState.modals.mGalleryImage.album = PHOData.otherImages;
		PHOState.modals.mGalleryImage.imageKey = imageKey;
		PHOState.modals.mGalleryImage.pathPrefix = PHOData.otherImagesPath;
		Modal.show("mGalleryImage");
	},
	bind: function() {
		$(document).on("click", "#articlePhotoGallery .img img", function() {
			var imageKey = $(this).attr("data-imageKey");
			PHOControllers.articlePhotoGallery.showArticleGallery(imageKey);




			// var src= $(this).attr("data-src");

			// PHOState.modal.mImage = {};
			// PHOState.modal.mImage.src = src;
			// Modal.show("mImage");
		});

		$(document).on("click", "#articlePhotoGallery button.showMore", function () {
			PHOState.components.articlePhotoGallery.showMore = PHOState.components.articlePhotoGallery.showMore != 1
			// if (PHOState.components.articlePhotoGallery.showMore == 0) PHOState.components.articlePhotoGallery.showMore = 1
			// else PHOState.components.articlePhotoGallery.showMore = 0;
			render();
		});
	}
};
PHOControllers.articleProductPoints = {

	bind: function() {
		$(document).on("click", "#articleProductPoints input[name='changePoints']", function() {
			if(PHOState.activeUser != null){
				Modal.show("mArticleProductChange");
			}
		});
	}
};
PHOControllers.commentPhotoGallery = {

	bind: function() {
		$(document).on("click", ".commentPhotoGallery .img img", function() {
			var src= $(this).attr("src");
			PHOState.modal = {
				mImage: {
					src: src
				}
			};
			Modal.show("mImage");
		});
	},


};
PHOControllers.comments = {

	loadComments: function (articleId, start) {
		var ajax = (new Ajax({
			url: "/pho-ajax/comments/load",
			data: {
				articleId: articleId,
				start: start
			},
			ok: function(response){
				PHOState.moreComments = response.moreComments;
				for(i in Object.keys(response.comments)) {
					var comment = response.comments[i];
					PHOData.article.comments.push(comment);
				}
				render();
			},
			error: function(message, code) {

			},
			complete: function(response) {
				$("#comments .button button").prop("disabled", false);
				$("#comments .button button").removeClass("inverse");
			}
		})).send();
	},


	bind: function() {
		$(document).on("click", "#comments .button button", function() {
			var articleId = $(this).attr("data-article");
			$(this).prop("disabled", true);
			$(this).addClass("inverse");
			var count = PHOData.article.comments.length;


			PHOControllers.comments.loadComments(articleId, count);
		});
	}
};
PHOControllers.commentTools = {
    deleteComment: function(commentId) {
        var ajax = (new Ajax({
            url: "/pho-ajax/comments/delete-comment",
            data: {
                articleId: PHOData.article.agregator_id,
                commentId: commentId,
                commentCount: count(PHOData.article.comments)
            },
            ok: function(response){
                PHOData.article.comments = response.comments;
                render();
            },
            error: function(message, code) {

            },
            complete: function() {

            }
        })).send();
    },
	bind: function() {
		$(document).on("click", ".commentTools .reply", function() {
            var addComment = $(this).closest(".comment").find(".addCommentChild");
            addComment.toggleClass("hidden");
            var parentId = parseInt($(this).attr("data-comment-id"));
            var index = PHOState.comments.addReplies.indexOf(parentId);
            if(index >= 0) {
	            delete PHOState.comments.addReplies[index];
            } else {
                PHOState.comments.addReplies.push(parentId);
            }
		});
        $(document).on("click", ".commentTools .edit", function() {
        	var commentTools = $(this).parents(".commentTools");
            var editComment = commentTools.siblings(".editComment");
            var commentText = commentTools.siblings(".comment-text");


            if(!editComment.is(":visible")){
                editComment.addClass("visible");
                editComment.find("textarea").focus();
	            editComment.find("textarea").val();
                commentText.hide();
			}
			else {
            	editComment.removeClass("visible");
                commentText.show();
            }

        });
        $(document).on("click", ".commentTools .delete", function() {
            var commentId = $(this).attr("data-comment-id");
            PHOControllers.commentTools.deleteComment(commentId);

        });
	}
};
PHOControllers.contestQuestion = {

	sendAnswer : function(answer) {
		(new Ajax({
			url: "/pho-ajax/competitions/answer",
			data: {
				competitionId: PHOData.article.competition.competitions_id,
				answer: answer
			},
			ok: function(response) {
				PHOData.article.competition.answer = response.answer;
				render();
			},
			error: function(message) {
				alert(message);
			}
		})).send();
	},

	bind: function() {
		$(document).on("change", "#contestQuestion form[name='question'] input[name='answer']", function() {
			PHOState.showButton = 1;
			render();
			if(PHOState.activeUser == null){
				Modal.show("mLogin");
				return;
			}
		});

		$(document).on("submit", "#contestQuestion form[name='question']", function(e) {
			e.preventDefault();
			if(PHOState.activeUser == null){
				Modal.show("mLogin");
				return;
			}
			var value = $("form[name='question'] input[name='answer']:checked").val();
			PHOControllers.contestQuestion.sendAnswer(value);
		});
	}
};
PHOControllers.editComment = {

	edit: function (commentId, commentText) {
		var ajax = (new Ajax({
			url: "/pho-ajax/comments/edit-comment",
			data: {
                articleId: PHOData.article.agregator_id,
				commentId: commentId,
				commentText: commentText,
				commentCount: count(PHOData.article.comments)
			},
			ok: function(response){
				PHOData.article.comments = response.comments;
				render();
			},
			error: function(message, code) {

			},
			complete: function() {
				$(".editComment .send-comment button[name='send-comment']").prop("disabled", false);
			}
		})).send();
	},


	bind: function() {
		$(document).on("click", ".editComment .send-comment button[name='send-comment']", function(e) {
			e.preventDefault();
            var commentId = $(this).attr("data-commentId");
			var textarea = $(this).parents(".textarea-comment").children("textarea");
			var commentText = textarea.val();
			if(commentText == "") {
				alert("zadejte text komentáře");
				return;
            }

			PHOControllers.editComment.edit(commentId, commentText);
            $(".editComment .send-comment button[name='send-comment']").prop("disabled", true);
		});

		$(document).on("keydown", ".editComment .textarea-comment textarea", function(e) {
			if(e.which == 13) $(this).siblings(".icons-wrap").children(".send-comment").children("button[name='send-comment']").click();
		});

        $(document).on("click", ".editComment button[name='add-emoticon']", function(e) {
            e.preventDefault();
            console.log("datel");
            var smileySelect = $(this).siblings("#smileySelect");
            if(smileySelect.is(":visible")){
                smileySelect.hide();
			}
			else smileySelect.show();
        });

	}
};
PHOControllers.eventParticipants = {


	bind: function() {
		$(document).on("click", "#eventParticipants a.showMore", function() {
            if(PHOState.components.eventParticipants.showMore == 0) PHOState.components.eventParticipants.showMore = 1;
            else PHOState.components.eventParticipants.showMore = 0;
            render();
		});

	}
};
PHOControllers.eventParticipate = {

    eventParticipate: function(eventId) {
		var ajax = new Ajax({
			url: "/pho-ajax/articles/event-participate",
			data: {
				eventId: eventId,
			},
			error: function(message, code) {
				if(code == "login") Modal.show("mLogin");
				else if(code =="alreadyParticipant") alert("této události se již účastníte");
				else console.warn(message);
			},
			ok: function(response){

                PHOData.eventParticipants = response.eventParticipants;
                PHOData.eventParticipantsIds = response.eventParticipantsIds;
                render();
			}
		});
		ajax.send();
	},
    deleteParticipation: function(eventId) {
        var ajax = new Ajax({
            url: "/pho-ajax/articles/event-delete-participation",
            data: {
                eventId: eventId,
            },
            error: function(message, code) {
                if(code == "login") Modal.show("mLogin");
                else console.warn(message);
            },
            ok: function(response){
                PHOData.eventParticipants = response.eventParticipants;
                PHOData.eventParticipantsIds = response.eventParticipantsIds;
                render();
            }
        });
        ajax.send();
    },

	bind: function() {
		$(document).on("click", "#eventParticipate button.participate", function() {
			var eventId = $(this).attr("data-eventId");
			if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
			}
			PHOControllers.eventParticipate.eventParticipate(eventId);
		});
        $(document).on("click", "#eventParticipate button.notParticipate", function() {
            var eventId = $(this).attr("data-eventId");
            if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
            }
            PHOControllers.eventParticipate.deleteParticipation(eventId);
        });
	}
};

PHOControllers.eventFilters = {

	bind: function() {

        $(document).on("click", "#eventFilters .select-like", function(e) {
            e.preventDefault();
            var parent = $(this).parents(".filter-wrap");
            if(parent.hasClass("opened")) parent.removeClass("opened");
            else parent.addClass("opened");
        });
	}
};
PHOControllers.FBShare = {

	bind: function() {

        // FBShare RENDERED - get like button again
        window.addEventListener("component-rendered", function(data) {
            if(data.detail.attr("id") != "FBShare") return;
            FB.XFBML.parse();
        });
	}
};
PHOControllers.header = {
    userLogOutOk: function(){
    	window.location = "/"; //FIXME
	},
    userLogOutError: function(message){
    	alert(message);
	},
    setNotificationsReadOk: function(){
        PHOData.userNotices = Array();
    },
    setNotificationsReadError: function(message){
        console.error(message);
    },
    logOut:function(){
        // var c = PHOControllers.header;

        // var ajax = new Ajax({url: "/pho-ajax/users/logout", ok: c.userLogOutOk, error: c.userLogOutError});
        // ajax.send();
	    window.location.href = "/logout";
    },
    setNotificationsRead:function(){
        var c = PHOControllers.header;

        var ajax = new Ajax({url: "/pho-ajax/users/notification-shown", ok:c.setNotificationsReadOk,  error: c.setNotificationsReadError});
        ajax.send();
    },

	bind: function() {

		$(document).on("click", "#header .menu .icon button[name='menu']", function() {
			var menu = $(this).parents(".menu");
			if(!menu.hasClass("opened")) {
				menu.addClass("opened");
			} else {
				menu.addClass("closing");
				menu.removeClass("opened");
				setTimeout(function () {
					menu.removeClass("closing");
				}, 250);
			}
		});
        $(document).on("click", "#header #noticeButton", function() {
            if(count(PHOData.userNotices) > 0) PHOControllers.header.setNotificationsRead();
            var menu = $(this);
            if(!menu.hasClass("opened")) {
                menu.addClass("opened");
            } else {
                menu.addClass("closing");
                menu.removeClass("opened");
                setTimeout(function () {
                    menu.removeClass("closing");
                }, 250);
            }
        });
        $(document).on("click", "#header .user-menu button[name='user-menu']", function() {
            var menu = $(this).parents(".user-menu");
            if(!menu.hasClass("opened")) {
                menu.addClass("opened");
            } else {
                menu.addClass("closing");
                menu.removeClass("opened");
                setTimeout(function () {
                    menu.removeClass("closing");
                }, 250);
            }
        });
        $(document).on("click", "#header #addContent button[name='add-content-menu']", function() {
            var menu = $(this).parents("#addContent");
            if(!menu.hasClass("opened")) {
                menu.addClass("opened");
            } else {
                menu.addClass("closing");
                menu.removeClass("opened");
                setTimeout(function () {
                    menu.removeClass("closing");
                }, 250);
            }
        });
        $(document).on("click", "#header .user-menu a[name='logout']", function(e) {
            e.preventDefault();
            PHOControllers.header.logOut();
        });

		$(document).on("click", "#header .search button[name='search']", function(e) {
			e.preventDefault();
			var search = $(this).parents("form.search");
			search.submit();
		});

		$(document).on("blur", "#header .search input[name='search']", function() {
			var value = $(this).val();
			if(value.length <= 0) $("#header form.search").removeClass("opened");
		});

		$(document).on("submit", "#header form.search", function(e) {
			e.preventDefault();
			var input = $(this).find("input[name='search']");
			var value = input.val();

			if($(this).hasClass("opened") && !/^\s*$/.test(value)) {
				location.href = "/hledat/"+encodeURI(value);
				return;
			}

			$(this).addClass("opened");
			input.focus();
		});
        $(document).on("click", "#header .login", function(e) {
            e.preventDefault();
            Modal.show("mLogin");
        });
        $(document).on("click", "#header .register", function(e) {
            e.preventDefault();
            Modal.show("mRegister");
        });
	}
};
PHOControllers.htmlField = {
    saveStart: function(){
        PHOState.components.htmlField.saveInProgress = true;
        $("document").css('cursor', 'progress');
    },
    saveEnd: function(){
        PHOState.components.htmlField.saveInProgress = false;
        $("document").css('cursor', 'auto');
    },
    save: function(){
        if(!tinyMCE.activeEditor || tinyMCE.activeEditor.id != PHOState.editingField) alert("chyba při ukládání");
        var newContent = tinymce.activeEditor.getContent();
        PHOControllers.htmlField.saveStart();
        var ajax = new Ajax({
            url: "/pho-ajax/admin/edit-text",
            data: {
                newContent: newContent,
                positionName: PHOState.editingField,
            },
            error: function(message) {
                alert(message);
            },
            ok: function(response){
                PHOData.editableTexts[response.positionName].content = response.newContent;
                PHOControllers.htmlField.stopTinyMCE(response.positionName);
            },
            complete: function(){
                PHOControllers.htmlField.saveEnd();
                PHOState.components.htmlField.saveInProgress = false;
            }
        });
        ajax.send();
    },
    stopTinyMCE: function(selector) {
        PHOState.editingField = null;
        tinymce.EditorManager.execCommand('mceRemoveEditor',true, selector);
        render();
    },
    startTinyMCE: function(selector) {
        var mceType = $("#" + selector).attr("data-mceType");
        var toolbar = "styleselect | bold italic forecolor removeformat | alignleft aligncenter alignright | table tableCellProps | bullist numlist | code | link image";
        if(mceType == "simple") toolbar = " bold italic | alignleft aligncenter alignright | code | link";

        var settings = {
            selector: "#" + selector,
            theme: "silver",
            inline: true,
            // content_css: "/static/css/scss",
            plugins: [
                "image imagetools lists link media"
            ],
            image_dimensions:false,
            menubar: false,
            style_formats: [
                {title: 'Nadpis 2', block: 'h2'},
                {title: 'Nadpis 3', block: 'h3'},
                {title: 'Odstavec', block: 'p'},
            ],
            extended_valid_elements: 'a[href|target=_blank]',
            block_formats: 'Odstavec=p;Nadpis 2=h2;Nadpis 3=h3',
            contextmenu: "link table",
            table_default_styles: {
                'width': "100%",
                'border': "0",
                'border-collapse' : "collapse",
            },
            table_cell_class_list: [
                {title: 'None', value: ''},
                {title: 'time', value: 'time'}
            ],
            toolbar: "styleselect | bold italic forecolor removeformat | alignleft aligncenter alignright | table tableCellProps | bullist numlist | code | link image media",
            entity_encoding: "raw",
            auto_focus: true,
            language: "cs",
            color_map: [
                "0098e4", "mainColor",
                "ff698f", "pink",
                "00bc9c", "green",
                "9673d1", "violet",
                "e3545c", "red",
                "e7faff", "lightBlue",
                "9f9f9f", "noticeText",
                "bfbfbf", "greyBorder",
                "E4E4E4", "greyBackground",
            ],
            custom_colors: false,

            images_upload_handler: function (blobInfo, success, failure) {
                var itemId = PHOData.editableTexts[PHOState.editingField].id;

                var xhr, formData;

                xhr = new XMLHttpRequest();
                xhr.withCredentials = false;
                xhr.open('POST', '/pho-ajax/tinymce/' + 'image-upload');

                xhr.onload = function () {
                    var json;

                    if (xhr.status != 200) {
                        failure('HTTP Error: ' + xhr.status);
                        return;
                    }

                    json = JSON.parse(xhr.responseText);

                    if (!json || typeof json.location != 'string') {
                        failure('Invalid JSON: ' + xhr.responseText);
                        return;
                    }

                    success(json.location);
                };

                formData = new FormData();
                formData.append('file', blobInfo.blob(), blobInfo.filename());
                formData.append('itemType', 'image');
                formData.append('itemId', itemId);

                xhr.send(formData);
            },
            // file_picker_types: 'image',
            /* and here's our custom image picker*/
            // file_picker_callback: function (cb, value, meta) {
            //     var input = document.createElement('input');
            //     input.setAttribute('type', 'file');
            //     input.setAttribute('accept', '*');
            //
            //     /*
            //       Note: In modern browsers input[type="file"] is functional without
            //       even adding it to the DOM, but that might not be the case in some older
            //       or quirky browsers like IE, so you might want to add it to the DOM
            //       just in case, and visually hide it. And do not forget do remove it
            //       once you do not need it anymore.
            //     */
            //
            //     input.onchange = function () {
            //         var file = this.files[0];
            //
            //         var reader = new FileReader();
            //
            //         var itemId = PHOState.editingField;
            //
            //         reader.onload = function () {
            //             /*
            //               Note: Now we need to register the blob in TinyMCEs image blob
            //               registry. In the next release this part hopefully won't be
            //               necessary, as we are looking to handle it internally.
            //             */
            //             var id = 'blobid' + (new Date()).getTime();
            //             var blobCache = tinymce.activeEditor.editorUpload.blobCache;
            //             var base64 = reader.result.split(',')[1];
            //             var blobInfo = blobCache.create(file.name, file, base64);
            //
            //             blobCache.add(blobInfo);
            //
            //             var xhr, formData;
            //
            //             xhr = new XMLHttpRequest();
            //             xhr.withCredentials = false;
            //             xhr.open('POST', '/pho-ajax/tinymce/file-upload');
            //
            //             xhr.onload = function () {
            //                 var json;
            //
            //                 if (xhr.status != 200) {
            //                     alert('HTTP Error: ' + xhr.status);
            //                     return;
            //                 }
            //
            //                 json = JSON.parse(xhr.responseText);
            //
            //                 if (!json || typeof json.location != 'string') {
            //                     alert('Invalid JSON: ' + xhr.responseText);
            //                     return;
            //                 }
            //                 /* call the callback and populate the Title field with the file name */
            //                 cb(json.location, {title: file.name});
            //                 // success(json.location);
            //             };
            //
            //
            //             formData = new FormData();
            //             formData.append('file', blobInfo.blob(), file.name);
            //             formData.append('itemGroup', "htmlField");
            //             formData.append('itemId', itemId);
            //
            //             xhr.send(formData);
            //
            //         };
            //         reader.readAsDataURL(file);
            //     };
            //
            //     input.click();
            // },
        };


        if(typeof tinymce == "undefined") {
            $.getScript('/static/js/core/external/tinymce/js/tinymce/tinymce.min.js', function () {
                render();
                tinymce.baseURL = "/static/js/core/external/tinymce/js/tinymce";
                tinymce.suffix = '.min';
                tinymce.init(settings);
            });
        } else {
            render();
            tinymce.EditorManager.execCommand('mceRemoveEditor',true, selector);
            tinymce.EditorManager.init(settings);
            tinymce.EditorManager.execCommand('mceAddEditor',true, selector);

        }
    },

	bind: function() {

        // prevent default action
        $(document).on("click", ".htmlField .control-panel", function(e) {
            e.preventDefault();
        });
        $(document).on("click", ".htmlField [contenteditable]", function(e) {
            e.preventDefault();
        });

        // start editing
		$(document).on("click", ".htmlField .edit", function(e){
            e.preventDefault();
            var fieldName = $(this).attr("data-fieldName");
            PHOState.editingField = fieldName;
            PHOControllers.htmlField.startTinyMCE(fieldName);
		});
		// save
        $(document).on("click", ".htmlField .save", function(e){
            e.preventDefault();
            if(!PHOState.components.htmlField.saveInProgress) PHOControllers.htmlField.save();
        });
        // stop editing
        $(document).on("click", ".htmlField .close", function(e){
            e.preventDefault();
            var fieldName = $(this).attr("data-fieldName");
            PHOControllers.htmlField.stopTinyMCE(fieldName);
        });
	},
    init: function(){
        PHOState.components.htmlField = {
            saveInProgress: false,
        }
    }
};
PHOControllers.subcategoriesSelect = {

	bind: function() {

        $(document).on("change", "#subcategoriesSelect select[name='subcategoriesSelect']", function(e) {
            e.preventDefault();
        	var link = $(this).val();
        	window.location.href = link;
        });
	}
};

PHOControllers.likebox = {

	setLike: function(articleId) {
		var ajax = new Ajax({
			url: "/pho-ajax/likes/set-like",
			data: {
				articleId: articleId,
			},
			error: function(message, code) {
				if(code == "login") Modal.show("mLogin");
				else if(code =="alreadyLiked") alert("autor článku může dát jen jeden like");
				else console.warn(message);
			},
			ok: function(){

			}
		});
		ajax.send();
	},
    setMoreLikes: function(articleId, likesCount) {
        var ajax = new Ajax({
            url: "/pho-ajax/likes/set-more-likes",
            data: {
                articleId: articleId,
                likesCount: likesCount,
            },
            error: function(message, code) {
                if(code == "noRights") alert("nemáte dostatečná oprávnění");
                else console.warn(message);
            },
            ok: function(){
				window.location.reload();
            }
        });
        ajax.send();
    },

	bind: function() {

        $(document).on("click", ".likebox", function() {
        	var articleId = $(this).attr("data-id");
        	var val = $(this).find(".count").text();
        	if(val.indexOf("tis") < 0) {
		        var val = val.replace(" ", "");
		        var newVal = numberFormat(parseInt(val) + 1, 0, " ");
		        $(this).find(".count").text(newVal);
	        }
	        if(PHOState.activeUser == null){
		        Modal.show("mLogin");
		        return;
	        }
	        PHOControllers.likebox.setLike(articleId);
        });
        $(document).on("contextmenu", ".likebox", function(e) {
            if(PHOState.activeUser == null || PHOState.activeUser.user_role < PHOData.constants.USER_ROLE_SUPER_ADMIN) return;
        	e.preventDefault();
        	var likesCount = Number(prompt("Kolik liků chcete přidat?", 10));
            var articleId = $(this).attr("data-id");
            PHOControllers.likebox.setMoreLikes(articleId, likesCount);
		});

	}
};
PHOControllers.pdfButton = {

	bind: function() {

        $(document).on("click", ".pdfButton", function(e) {
            e.preventDefault();
            var href = $(this).attr("data-href");
	        window.open(href, "_blank");
        });
	}
};
PHOControllers.printButton = {

	bind: function() {

        $(document).on("click", ".printButton", function(e) {
            e.preventDefault();
	        window.print();
        });
	}
};
PHOControllers.smileySelect = {
	insertText: function(inputId, text){
        var txtarea = $("#" + inputId);
        var caretPos = txtarea.prop('selectionStart');
        var selectionEnd = txtarea.prop('selectionEnd');
        var front = txtarea.val().substring(0, caretPos);
        var back = txtarea.val().substring(selectionEnd, txtarea.val().length);
        txtarea.val(front + text + back);
        caretPos = caretPos + text.length;
        txtarea.prop({
            'selectionStart': caretPos,
            'selectionEnd': caretPos
        });
        txtarea.focus();

	},

	bind: function() {

        $(document).on("click", "#smileySelect img.emoticon", function(e) {
        	var symbols = $(this).attr("data-symbols");
            e.preventDefault();


	        var inputId = $(this).parents(".smileys").attr("data-inputId");

            PHOControllers.smileySelect.insertText(inputId, symbols);

        });
	}
};
PHOControllers.startEditing = {

	bind: function() {

        $(document).on("click", ".startEditing", function(e) {
            e.preventDefault();
            // if(PHOData.article){
             //    PHOState.editing = 1;
             //    render();
            // }
        	// else{
            	var href = $(this).attr("data-href");
            	window.location.href = href;
            // }

        });
	}
};
PHOControllers.startEditingNew = {

	bind: function() {

        $(document).on("click", ".startEditingNew", function(e) {
            e.preventDefault();
            if(PHOState.editing == 0) PHOState.editing = 1;
            else PHOState.editing = 0;
			render();
        });
	}
};
PHOControllers.topovatko = {

	loadArticleTops: function() {
		PHOState.modals.mTopovatko = {
			article: null,
			articleTops: [],
			types: PHOData.topTypes,
            topSections: [],
			defaultSectionId: null,
			message: "",
		};
		var ajax = (new Ajax({
			url: "/pho-ajax/articles/get-article-tops",
			data: {
				articleId: PHOState.activeArticle,
			},
			ok: function(response) {
				PHOState.modals.mTopovatko.article = response.article;
                PHOState.modals.mTopovatko.articleTops = response.articleTops;
                PHOState.modals.mTopovatko.topSections = response.topSections;
                PHOState.modals.mTopovatko.defaultSectionId = response.defaultSectionId;
				Modal.show("mTopovatko");
			},
			error: function() {
				console.log("ERROR");
			}
		})).send();
	},


	bind: function() {

        $(document).on("click", ".topovatko", function(e) {
        	var articleId = $(this).attr("data-article-id");
            e.preventDefault();
	        PHOState.activeArticle = (articleId);

	        PHOControllers.topovatko.loadArticleTops();
        });
	}
};
PHOControllers.topZenaTydne = {

    setUserOfTheWeek: function(userId) {
		if(!confirm("Chcete změnit ženu týdne?")) return false;
		var ajax = (new Ajax({
			url: "/pho-ajax/users/set-woman-of-the-week",
			data: {
				userId: userId,
			},
			ok: function(response) {

			},
			error: function(message) {
				alert(message);
			}
		})).send();
	},


	bind: function() {

        $(document).on("click", ".top-zena-tydne", function() {
        	var userId = $(this).attr("data-user-id");
	        PHOControllers.topZenaTydne.setUserOfTheWeek(userId);
        });
	}
};
PHOControllers.userProfile = {

	setAuthorInspirative: function(authorId) {
		var ajax = new Ajax({
			url: "/pho-ajax/likes/set-author-inspirative",
			data: {
				authorId: authorId,
			},
			error: function(message, code) {
				if(code == "login") Modal.show("mLogin");
				else if(code =="alreadySetAsFollower") alert("autor článku již je vaší inspirací");
				else console.warn(message);
			},
			ok: function(response){
			    PHOData.followedUsers.push(response.userId);
				render();
			}
		});
		ajax.send();
	},
    unsetAuthorInspirative: function(authorId) {
        var ajax = new Ajax({
            url: "/pho-ajax/likes/unset-author-inspirative",
            data: {
                authorId: authorId,
            },
            error: function(message, code) {
                if(code == "login") Modal.show("mLogin");
                else console.warn(message);
            },
            ok: function(response){
                var index = PHOData.followedUsers.indexOf(response.userId);
                if (index > -1) {
                    PHOData.followedUsers.splice(index, 1);
                }
                render();
            }
        });
        ajax.send();
    },

	bind: function() {
		$(document).on("click", "#userProfile button.inspire", function() {
			var authorId = $(this).attr("data-id");
			if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
			}
			PHOControllers.articleAuthor.setAuthorInspirative(authorId);
		});
        $(document).on("click", "#userProfile button.noInspire", function() {
            var authorId = $(this).attr("data-id");
            if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
            }
            PHOControllers.articleAuthor.unsetAuthorInspirative(authorId);
        });
        $(document).on("click", "#userProfile button.sendMessage", function() {
        	if(PHOState.activeUserMessageBlacklist) return;
            var authorId = $(this).attr("data-id");
            if(PHOState.activeUser == null){
                Modal.show("mLogin");
                return;
            };
            PHOState.sendMessage = [];
            PHOState.sendMessage["toName"] = PHOData.user.user_nick ? PHOData.user.user_nick : PHOData.user.user_name + " " + PHOData.user.user_surname;
            PHOState.sendMessage["toId"] = PHOData.user.users_id;
            Modal.show("mSendMessage");
        });

	}
};



PHOControllers.mFbAccountsLinking = {

	registrationOk: function() {
		window.location.reload();
	},

	registrationError: function(message) {
		PHOState.modals.mFbAccountsLinking.errorMessage = message;
		Modal.show("mFbAccountsLinking");
	},

	register: function() {
		PHOState.modals.mFbAccountsLinking.errorMessage = null;
		var personalDataAgreement = 0;
		if($("#mFbRegister input[name='personal-data-agreement']").is(':checked')) personalDataAgreement = 1;

        var tradeConditionsAgreement = 0;
        if($("#mFbRegister input[name='trade-conditions-agreement']").is(':checked')) tradeConditionsAgreement = 1;

        var agreements = {
            personalDataAgreement: personalDataAgreement,
            tradeConditionsAgreement: tradeConditionsAgreement
		};
        (new Ajax({
			url: "/pho-ajax/users/fb-register",
			data: {
				accessToken: $("#mFbAccountsLinking form input[name='fb-access-token']").val(),
				birthday: $("#mFbAccountsLinking input[name='birthday']").val(),
                agreements: agreements
			},
			ok: PHOControllers.mFbAccountsLinking.registrationOk,
			error: PHOControllers.mFbAccountsLinking.registrationError,
		})).send();
	},

	bind: function() {

		// form submit
		$(document).on("submit", "#mFbAccountsLinking form", function(e) {
			e.preventDefault();
			PHOControllers.mFbAccountsLinking.register();
		});
	},

	init: function(reset) {
		if(PHOState.modals.mFbAccountsLinking && !reset) return;
		PHOState.modals.mFbAccountsLinking = {
			errorMessage: null,
			fbUser: null,
			fbAccessToken: null
		};
	}
};
PHOControllers.mFbAskForUserPostsDone = {

	bind: function() {
		$(document).on("submit", "#mFbAskForUserPostsDone form", function(e) {
			e.preventDefault();
			Modal.hide();
		});
	}
};
PHOControllers.mFbAskForUserPosts = {

	submit: function() {

		PHOState.modals.mFbAskForUserPosts.errorMessage = null;
		render("mFbAskForUserPosts");

		var data = {
			scope: "email,user_posts,read_insights"
		};

		FB.login(function(response) {
			FB.api("/me/permissions", function(permissions) {

				// check error
				if(permissions.error) {
					PHOState.modals.mFbAskForUserPosts.errorMessage = "Požadavek selhal.";
					render("mFbAskForUserPosts");
					return;
				}

				// check permissions
				for(i in permissions.data) {
					var permission = permissions.data[i];
					switch(permission) {
						case "user_posts" :
							if(permission.status == "declined") {
								PHOState.modals.mFbAskForUserPosts.errorMessage = "Přístup byl zamítnut.";
								render("mFbAskForUserPosts");
								return;
							}
					}
				}

				if(response.authResponse) {
					(new Ajax({
						url: "/ajax/users/fb-update-access-token",
						data: {
							accessToken: response.authResponse.accessToken
						},
						ok: function() {
							Modal.show("mFbAskForUserPostsDone");
						},
						error: function(message) {
							PHOState.modals.mFbAskForUserPosts.errorMessage = message;
							render("mFbAskForUserPosts");
						}
					})).send();
				} else {
					PHOState.modals.mFbAskForUserPosts.errorMessage = "Nastala neočekávaná chyba.";
					render("mFbAskForUserPosts");
				}
			});
		}, data);
	},

	bind: function() {
		$(document).on("submit", "#mFbAskForUserPosts form", function(e) {
			e.preventDefault();
			PHOControllers.mFbAskForUserPosts.submit();
		});
	},

	init: function(reset) {
		if(PHOState.modals.mFbAskForUserPosts && !reset) return;
		PHOState.modals.mFbAskForUserPosts = {
			product: null,
			errorMessage: null
		};
	}
};
PHOControllers.mFbRegister = {

	registrationOk: function() {
		window.location.reload();
	},

	registrationError: function(message) {
		PHOState.modals.mFbRegister.errorMessage = message;
		Modal.show("mFbRegister");
	},

	register: function() {
		PHOState.modals.mFbRegister.errorMessage = null;
        var personalDataAgreement = 0;
        if($("#mFbRegister input[name='personal-data-agreement']").is(':checked')) personalDataAgreement = 1;

        var tradeConditionsAgreement = 0;
        if($("#mFbRegister input[name='trade-conditions-agreement']").is(':checked')) tradeConditionsAgreement = 1;

        var agreements = {
            personalDataAgreement: personalDataAgreement,
            tradeConditionsAgreement: tradeConditionsAgreement
        };
		(new Ajax({
			url: "/pho-ajax/users/fb-register",
			data: {
				accessToken: $("#mFbRegister form input[name='fb-access-token']").val(),
				// birthday: $("#mFbRegister input[name='birthday']").val(),
				agreements: agreements
			},
			ok: PHOControllers.mFbRegister.registrationOk,
			error: PHOControllers.mFbRegister.registrationError,
		})).send();
	},

	bind: function() {

		// form submit
		$(document).on("submit", "#mFbRegister form", function(e) {
			e.preventDefault();
			PHOControllers.mFbRegister.register();
		});
	},

	init: function(reset) {
		if(PHOState.modals.mFbRegister && !reset) return;
		PHOState.modals.mFbRegister = {
			errorMessage: null,
			fbUser: null,
			fbAccessToken: null
		};
	}
};

PHOControllers.mArticleProductChange = {

    sendMessage: function(userName, userStreet, userCity, productId) {
        (new Ajax({
            url: "/pho-ajax/admin/add-order-gift-product",
            data: {
                userName: userName,
                userStreet: userStreet,
                userCity: userCity,
                productId: productId
            },
            ok: function() {
                Modal.show("mArticleProductChangeDone");
                setTimeout(function() {
                    Modal.hide();
                    window.location.reload();
                }, 5000);
            },
            error: function(message) {
                alert(message);
                window.location.reload();
            }
        })).send();
    },

    bind: function() {
        $(document).on("click", "#mArticleProductChange input[name='send']", function(e) {
            e.preventDefault();
            userName = $("#mArticleProductChange input[name='nameAndSurname']").val();
            userStreet = $("#mArticleProductChange input[name='street']").val();
            userCity = $("#mArticleProductChange input[name='city']").val();
            productId = PHOData.article.product.products_id;
            PHOControllers.mArticleProductChange.sendMessage(userName, userStreet, userCity, productId);
        });

    }
};
PHOControllers.mGalleryImage = {

	previousImage: function() {
		var m = PHOState.modals.mGalleryImage;
		if(m.album === null) return;
		var imageKeys = Object.keys(m.album);
		var index = imageKeys.indexOf(m.imageKey) - 1;
		if(index < 0) index = imageKeys.length - 1;
		PHOState.modals.mGalleryImage.imageKey = imageKeys[index];
		render("mGalleryImage");
	},

	nextImage: function() {
		var m = PHOState.modals.mGalleryImage;
		if(m.album === null) return;
		var imageKeys = Object.keys(m.album);
		var index = imageKeys.indexOf(m.imageKey) + 1;
		if(index >= imageKeys.length) index = 0;
		PHOState.modals.mGalleryImage.imageKey = imageKeys[index];
		render("mGalleryImage");
	},

	bind: function() {

		$(document).on("click", "#mGalleryImage .controls a.previous", function(e) {
			e.preventDefault();
			PHOControllers.mGalleryImage.previousImage();
		});

		$(document).on("click", "#mGalleryImage .controls a.next", function(e) {
			e.preventDefault();
			PHOControllers.mGalleryImage.nextImage();
		});

		$(document).on("keydown", "body", function(e) {
			switch(e.which) {
				case 37 : // previous
					return PHOControllers.mGalleryImage.previousImage();
				case 39 : // next
					return PHOControllers.mGalleryImage.nextImage();
			}
		});
	},

	init: function(reset) {
		if(!reset && PHOState.modals.mGalleryImage !== undefined) return;
		PHOState.modals.mGalleryImage = {
			album: null,
			imageKey: null,
			pathPrefix: null
		};
	}
};
PHOControllers.mSendMessage = {

	sendMessage: function(userId, message) {
		(new Ajax({
			url: "/pho-ajax/emails/send-message",
			data: {
				userId: userId,
				message: message,
			},
			ok: function() {
				Modal.show("mMessageSend");
			},
			error: function(message) {
				alert(message);
				window.location.reload();
			}
		})).send();
	},

	bind: function() {
		$(document).on("click", "#mSendMessage input[name='send']", function(e) {
			e.preventDefault();
			userId = PHOState.sendMessage["toId"];
			message = $("#mSendMessage textarea").val();
			if(!message) {
				alert("vyplňte zprávu");
				return;
			}
			PHOControllers.mSendMessage.sendMessage(userId, message);
		});

	}
};
PHOControllers.mTopovatko = {

	setArticleTops: function() {
        // hotfix chybneho topovani
        if(typeof PHOState.modals.mTopovatko.articleTops["hp-section"] != "undefined" && PHOState.modals.mTopovatko.articleTops["hp-section"].hpSectionId == null){
            PHOState.modals.mTopovatko.articleTops["hp-section"].hpSectionId = PHOState.modals.mTopovatko.defaultSectionId;
        }
        // hotfix chybneho topovani
        if(typeof PHOState.modals.mTopovatko.articleTops["hp-right"] != "undefined" && PHOState.modals.mTopovatko.articleTops["hp-right"].hpSectionId == null){
            PHOState.modals.mTopovatko.articleTops["hp-right"].hpSectionId = PHOState.modals.mTopovatko.defaultSectionId;
        }


		(new Ajax({

			url: "/pho-ajax/articles/set-article-tops",
			data: {
				articleId: PHOState.activeArticle,
				articleTops: PHOState.modals.mTopovatko.articleTops,
			},
            ok: function(response) {
                PHOState.modals.mTopovatko.articleTops = response.articleTops;
                PHOState.modals.mTopovatko.message = "Uloženo";
                render("mTopovatko");
                PHOState.modals.mTopovatko.message = "";
            },
			error: function(message) {
				alert("Neuloženo: "+ message);
			},
		})).send();
	},


	bind: function() {
		$(document).on("change", "#mTopovatko form input[type='checkbox']", function() {
			var checkbox = $(this).is(":checked");
            var type =  $(this).val();
			parent = $(this).closest("div[data-type='"+type+"']");

			if(checkbox) {

				//defaultní datum začátku a konce topování
				date = new Date();
				yearStart = date.getFullYear();
				monthStart = twoDigitsNumber(date.getMonth() + 1);
				dayStart = twoDigitsNumber(date.getDate());

				date.setDate(date.getDate() + 3);
				yearEnd = date.getFullYear();
				monthEnd = twoDigitsNumber(date.getMonth() + 1);
				dayEnd = twoDigitsNumber(date.getDate());

				start = yearStart + "-" + monthStart + "-" + dayStart+" "+"00:00:00";
				end = yearEnd + "-" + monthEnd + "-" + dayEnd+" "+"23:59:00";


				// hpSectionId

				// dany typ nema topSections
				if(typeof PHOState.modals.mTopovatko.topSections[type] == "undefined") var hpSectionId = null;
				// mam topSections
				else{
                    //je neco vybrano
                    var hpSectionId = $("#mTopovatko select[name='hp-section']").val();
                    if(typeof hpSectionId == "undefined"){
                        // pokud neni, beru prvni sekci daneho typu
                        hpSectionId = PHOState.modals.mTopovatko.topSections[type][0].id;
                        // hledam zda v danem typu neni defaultni sekce clanku
                        for(i in PHOState.modals.mTopovatko.topSections[type]){
                            if(PHOState.modals.mTopovatko.topSections[type][Number(i)].id == PHOState.modals.mTopovatko.defaultSectionId) hpSectionId = PHOState.modals.mTopovatko.defaultSectionId;
                        }
                    }





				}

				//nastavení objektu
				PHOState.modals.mTopovatko.articleTops[type] = {};

				//přiřezení hodnot do objektu
				PHOState.modals.mTopovatko.articleTops[type].startDate = start;
                PHOState.modals.mTopovatko.articleTops[type].endDate = end;
                PHOState.modals.mTopovatko.articleTops[type].type = type;
                PHOState.modals.mTopovatko.articleTops[type].hpSectionId = hpSectionId;


				render("mTopovatko");
			} else {

				//odstranění z objektu
				delete(PHOState.modals.mTopovatko.articleTops[type]);
				render("mTopovatko");
			}
		});

        $(document).on("change", "#mTopovatko form select[name='top-section']", function() {
        	type = $(this).attr("data-type");
            PHOState.modals.mTopovatko.articleTops[type].hpSectionId = $(this).val();

        });

        $(document).on("submit", "#mTopovatko form", function(e) {
        	e.preventDefault();
            // vložení do databáze
            PHOControllers.mTopovatko.setArticleTops();


		});

		$(document).on("change", "#mTopovatko form input[name='timeStart']", function() {
			parent = $(this).closest("div.label");
			type = parent.attr("data-type");

			var startTime = $(this).val();
			var startDate = parent.find("input[name='dateStart']").val();

			PHOState.modals.mTopovatko.articleTops[type].startTime = startTime;
			PHOState.modals.mTopovatko.articleTops[type].startDate = startDate;

			//console.log(startTime);
		});

		$(document).on("change", "#mTopovatko form input[name='timeEnd']", function() {
			parent = $(this).closest("div.label");
			type = parent.attr("data-type");

			var endTime = $(this).val();
			var endDate = parent.find("input[name='dateEnd']").val();

			PHOState.modals.mTopovatko.articleTops[type].endTime = endTime;
			PHOState.modals.mTopovatko.articleTops[type].endDate = endDate;

			//console.log(endTime);
		});

		$(document).on("change", "#mTopovatko form input[name='dateStart']", function() {
			parent = $(this).closest("div.label");
			type = parent.attr("data-type");

			var startDate = $(this).val();
			var startTime = parent.find("input[name='timeStart']").val();

			PHOState.modals.mTopovatko.articleTops[type].startDate = startDate;
			PHOState.modals.mTopovatko.articleTops[type].startTime = startTime;

			//console.log(startDate);
		});

		$(document).on("change", "#mTopovatko form input[name='dateEnd']", function() {
			parent = $(this).closest("div.label");
			type = parent.attr("data-type");

			var endDate = $(this).val();
			var endTime = parent.find("input[name='timeEnd']").val();

			PHOState.modals.mTopovatko.articleTops[type].endDate = endDate;
			PHOState.modals.mTopovatko.articleTops[type].endTime = endTime;

			//console.log(endDate);
		});

	},
};
PHOControllers.mWriteUs = {

    mWriteUsOk: function() {
        // PHOState.modals["mWriteUs"] = {
        //     isDone: true,
        // };
        // Modal.show("mWriteUs");
        // PHOControllers.mWriteUs.init(true);
        window.location = "/wom-thank-you";
    },

    sendMessage: function(userName, userEmail, message) {
        (new Ajax({
            url: "/pho-ajax/emails/send-email-wom",
            data: {
                userName: userName,
                userEmail: userEmail,
                message: message,
                recaptchaToken : grecaptcha.getResponse()
            },
            complete: function() {
                console.log("COMPLETE")
            },
            ok: PHOControllers.mWriteUs.mWriteUsOk,

            error: function(message) {
                alert(message);
            }
        })).send();
    },

    bind: function() {
        $(document).on("submit", "#mWriteUs #womForm", function(e) {
            e.preventDefault();
            userName = $("#mWriteUs input.name").val();
            userEmail = $("#mWriteUs input.email").val();
            message = $("#mWriteUs textarea").val();
            if(!message) {
                message = $("#mWriteUs textarea").attr("placeholder");
            }
            PHOControllers.mWriteUs.sendMessage(userName, userEmail, message);
        });

    },

    // init: function(reset) {
    //     if(!reset && PHOState.modals.mWriteUs !== undefined) return;
    //     PHOState.modals.mWriteUs = {
    //         isDone: false,
    //     };
    // }
};
/**
 * Created by tom on 06.09.17.
 */
PHOControllers.mForgottenPassword = {

	forgottenPasswordOk: function() {
		PHOState.modals["mForgottenPassword"] = {
			email: "",
			isDone: true,
			errorMessage: null
		};
		Modal.show("mForgottenPassword");
        PHOControllers.mForgottenPassword.init(true);
	},

	forgottenPasswordError: function (message) {
		PHOState.modals["mForgottenPassword"].errorMessage = message;
		Modal.show("mForgottenPassword");
	},

	send: function() {
		var data = {
			email: $("#mForgottenPassword input[name='email']").val()
		};

		PHOState.modals["mForgottenPassword"].email = data.email;
		PHOState.modals["mForgottenPassword"].errorMessage = null;

		var c = PHOControllers.mForgottenPassword;

		var ajax = new Ajax({url: "/pho-ajax/users/restore-password", data: data, ok: c.forgottenPasswordOk, error: c.forgottenPasswordError});
		ajax.send();
	},

	bind: function() {

		// form submit
		$(document).on("submit", "#mForgottenPassword form", function(e) {
			e.preventDefault();
			PHOControllers.mForgottenPassword.send();
		});

		// login clicked
		$(document).on("click", "#mForgottenPassword .login", function() {
			Modal.show("mLogin");
		});

		// register clicked
		$(document).on("click", "#mForgottenPassword .register", function() {
			Modal.show("mRegister");
		});
	},

	init: function(reset) {
		if(!reset && PHOState.modals.mForgottenPassword !== undefined) return;
		PHOState.modals.mForgottenPassword = {
			isDone: "",
			email: "",
			errorMessage: null
		};
	}
};


/**
 * Created by tom on 08.09.17.
 */
PHOControllers.console = {

	clear: function() {
		PHOData.results = [];
		render();
	},

	switchLayout: function() {
		if(PHOState.consoleLayout == "horizontal") {
			PHOState.consoleLayout = "vertical";
		} else {
			PHOState.consoleLayout = "horizontal";
		}
		render();
	},

	clearInput: function() {
		$("#console textarea[name='input']").val("");
	},

	commandOk: function(response) {
		PHOData.results.push(response.data);
		PHOState.cmdPointer = PHOState.commands.length;
		PHOControllers.console.clearInput();
		render();
	},

	commandError: function(message) {
		console.log(message);
	},

	sendCommand: function (command) {

		var controller = PHOControllers.console;

		if(command == "clear") {
			PHOControllers.console.clearInput();
			return controller.clear();
		}

		var index = PHOState.commands.indexOf(command);
		if(index > -1) PHOState.commands.splice(index, 1);

		PHOState.commands.push(command);

		var data = {command: command};
		(new Ajax({
			url: "/pho-ajax/debugger/console-command",
			data: data,
			ok: controller.commandOk,
			error: controller.commandError
		})).send();
	},

	loadCommand: function () {
		$("#console textarea[name='input']").val(PHOState.commands[PHOState.cmdPointer]);
	},

	run: function() {
		var command = $("textarea[name='input']").val();
		PHOControllers.console.sendCommand(command);
	},

	loadPreviousCommand: function() {
		PHOState.cmdPointer = Math.max(PHOState.cmdPointer - 1, 0);
		PHOControllers.console.loadCommand();
	},

	loadNextCommand: function() {
		PHOState.cmdPointer = Math.min(PHOState.cmdPointer + 1, PHOState.commands.length - 1);
		PHOControllers.console.loadCommand();
	},

	bind: function() {
		$(document).on("keydown", "body", function(e) {
			var controller = PHOControllers.console;
			var isVertical = $("#console").hasClass("vertical");

			switch(e.which) {
				case 13 : // enter
					if(isVertical && !e.shiftKey) return;
					e.stopPropagation();
					e.preventDefault();
					controller.run();
					break;
				case 38 : // up
					if(isVertical) return;
					e.stopPropagation();
					e.preventDefault();
					controller.loadPreviousCommand();
					break;
				case 40 : // down
					if(isVertical) return;
					e.stopPropagation();
					e.preventDefault();
					controller.loadNextCommand();
					break;
			}
		});

		$(document).on("click", "#console .input .tools button[name='clear']", function() {
			PHOControllers.console.clear();
		});

		$(document).on("click", "#console .input .tools button[name='switch-layout']", function() {
			PHOControllers.console.switchLayout();
		});

		$(document).on("click", "#console .input .tools button[name='run']", function() {
			PHOControllers.console.run();
		});

		$(document).on("click", "#console .input .tools button[name='previous-command']", function() {
			PHOControllers.console.loadPreviousCommand();
		});

		$(document).on("click", "#console .input .tools button[name='next-command']", function() {
			PHOControllers.console.loadNextCommand();
		});
	},

	init: function() {
		$("#console textarea[name='input']").focus();
	}
};

PHOControllers.debuggerLogin = {

	userLoginOk: function() {
		location.href = "/debugger";
	},

	// user login error
	userLoginError: function(message) {
		PHOState.errorMessage = message;
		render();
	},

	login: function() {

		var data = {
			name: $("#debuggerLogin input[name='name']").val(),
			password: $("#debuggerLogin input[name='password']").val(),
			autologin: 1
		};

		PHOState.errorMessage = null;
		PHOState.name = data.name;
		PHOState.password = data.password;

		var c = PHOControllers.debuggerLogin;

		(new Ajax({
			url: "/pho-ajax/debugger/users/login",
			data: data,
			ok: c.userLoginOk,
			error: c.userLoginError
		})).send();
	},

	bind: function() {

		// form submit
		$(document).on("submit", "#debuggerLogin form", function(e) {
			e.preventDefault();
			PHOControllers.debuggerLogin.login();
		});
	},

	init: function() {
		PHOState.name = "";
		PHOState.password = "";
		PHOState.errorMessage = null;
	}
};


PHOControllers.articlePage = {

    // hide: function() {
    //     document.cookie = "seznamAdvertPopup=1; path=/";
    //     document.getElementById("popup").style.display = "none";
    // },
    //
    // oneshow: function() {
    //     document.cookie = "seznamAdvertPopup=1; path=/";
    // },

    bind: function() {

        // $(document).on("click", "#articlePage #container #popup button[name='close']", function(e) {
        //     e.preventDefault();
        //     PHOControllers.articlePage.hide();
        // });

        // $(window).scroll(function () {
        //     // // var element = $('#articlePage #popup');
        //     // //advert
        //     // var seznam = 1;
        //     // var mobile = 1;
        //     // var width = $(window).width();
        //     // // var cookie = getCookie("seznamAdvertPopup");
        //     //
        //     // banner_advert_str = 'S'+seznam+'M'+mobile;
        //     // window_advert_str = 'S'+advert_seznam_io+'M'+(width<advert_mobile_resolution?1:0);
        //     //
        //     // if ((cookie == null) && (banner_advert_str===window_advert_str) && (element.length) === 0 && ($(this).scrollTop() > $("#articlePage #article").offset().top + $("#articlePage #article").height() - window.innerHeight)) {
        //     //     $('#articlePage #container').append("<div class='advert popup' position='SZN_MOB_POP_UP' pagetype='"+ PHOData.pageType +"' seznam='1' mobile='1' id='popup' " + "></div>");
        //     //     zenyAdverts.loadAdvertContent($('#articlePage #popup'), PHOData.pageType, "SZN_MOB_POP_UP", width);
        //     //     PHOControllers.articlePage.oneshow();
        //     // }
        //
        // });

        $(document).ready(function(){
            getPopUp(700,"comments",76035);
        });

    }
};



PHOControllers.category = {

	bind: function() {

		$(document).on("change", "#category select[name='order']", function() {
			window.location.href = window.location.pathname + "?o=" + $(this).val();
		});

		$(document).on("change", "#category select[name='filter']", function() {
			window.location.href = window.location.pathname + "?f=" + $(this).val();
		});
	}
};
PHOControllers.editArticle = {

    submit: function() {

        // PHOState.components.editArticle.content = $("#editReview form[name='review'] textarea[name='content']").val();

        // attachments
        // for(i in m.attachments) {
        //
        //     var attachment = m.attachments[i];
        //
        //     if(!attachment.upload || attachment.upload.state != PHOData.constants.TMP_FILE_STATE_UPLOADED) {
        //         m.errorMessage = "Příloha se ještě nahrává.";
        //         render("editReview");
        //         return;
        //     }
        //
        //     data.attachments.push(attachment.upload.id);
        // }

        var data = PHOState.components.editArticle;
        var ajax = new Ajax({url: "/pho-ajax/admin/edit-article",
            data: data,
            ok: function(response) {
                location.href = "/"+response;
                render();
            },
            error: function(message){
                console.log(message);
            }
        });
        ajax.send();

    },

        bind: function () {

        //SUBMIT
        $(document).on("submit", ".editArticle form[name='article']", function(e) {
            e.preventDefault();
            PHOControllers.editArticle.submit();
        });

    }
};



PHOControllers.home = {

	bind: function() {

		$(document).on("click", "#home .we-are-women button[name='join']", function(e) {
			e.preventDefault();
            Modal.show("mRegister");
		});

		/*$(document).ready(function() {
			Modal.show("mMarketBanner");
		});*/

	}
};
/**
 * Created by tom on 06.09.17.
 */
PHOControllers.pokusnaStranka = {

	bind: function() {

        $(document).ready(function() {
            // do not load adverts if article is PR
            if(typeof PHOData.article != "undefined" && PHOData.article.isPRArticle == 1 && PHO.getCookie("SEZNAM") == "") return;
            window.zenyAdverts.loadAdvertisements();
            window.zenyAdverts.advertisementListeners();
            window.zenyAdverts.advertisementStickyListen();

        });
	}
};
PHOControllers.ssoLoginConfirmation = {

	ttAutologin: function(state) {
		console.log("AJAX");
		(new Ajax({
			url: "/pho-ajax/sso/set-autologin-state",
			data: {
				state: state
			},
			ok: function() {

			},
			error: function(message) {

			}
		})).send();
	},

	bind: function() {

		$(document).on("click", "#ssoLoginConfirmation form input[name='login']", function(e) {
			e.preventDefault();
			$("#ssoLoginConfirmation form").submit();
		});

		$(document).on("change", "#ssoLoginConfirmation form input[name='remember'], #ssoLoginConfirmation form input[name='terms-agreement'], #ssoLoginConfirmation form input[name='data-agreement']", function() {
			var state = 0;
			var remeber = $("#ssoLoginConfirmation form input[name='remember']").is(":checked");
			if(remeber) {
				state = 1;
			}
			PHOControllers.ssoLoginConfirmation.ttAutologin(state);
		});

	}
};
PHOControllers.styles = {

	bind: function() {

		$(document).on("click", "#styles button[name='displayModal']", function() {
			Modal.show("mSample");
		});
	}
};
PHOControllers.testovani= {

	bind: function() {


	}
};
/**
 * Created by tom on 07.09.17.
 */
PHOControllers.passwordRecovery = {

	redirectToHome: function() {
		location.href = "/";
	},

	passwordRecoveryOk: function() {
		PHOState.isDone = true;
		render("passwordRecovery");
		setTimeout(function() {
			PHOControllers.passwordRecovery.redirectToHome();
		}, 5000);
	},

	passwordRecoveryError: function(message, code) {
		PHOState.errorMessage = message;
		render("passwordRecovery");
		console.log(message, code);
	},

	recovery: function() {

		PHOState.errorMessage = null;

		var passwd1 = $("#passwordRecovery input[name='password1']").val();
		var passwd2 = $("#passwordRecovery input[name='password2']").val();

		PHOState.password1 = passwd1;
		PHOState.password2 = passwd2;

		// validate form
		if(passwd1 != passwd2) {
			PHOState.errorMessage = "hesla se neshodují, zkuste to ještě jednou";
			render("passwordRecovery");
			return;
		}

		var data = {
			password: passwd1
		};

		var c = PHOControllers.passwordRecovery;

		var ajax = new Ajax({url: "/pho-ajax/users/change-password", data: data, ok: c.passwordRecoveryOk, error: c.passwordRecoveryError});
		ajax.send();
	},

	bind: function() {

		// form submit
		$(document).on("submit", "#passwordRecovery form", function(e) {
			e.preventDefault();
			PHOControllers.passwordRecovery.recovery();
		});

		// confirmation button clicked
		$(document).on("click", "#passwordRecovery .confirmation .styled-button", function(e) {
			e.preventDefault();
			PHOControllers.passwordRecovery.redirectToHome();
		});
	}
};

PHOControllers.wom = {

	bind: function() {

		$(document).on("click", "#wom #wom-our-work a", function(e) {
			e.preventDefault();
			$("#next").slideDown(400, function() {
				PHOState.wom.showMoreCount += 1;
				render();
			});
		});

		$(document).on("click", "#wom .button button[name='write']", function(e) {
			e.preventDefault();
			Modal.show("mWriteUs");
		});

	}
};

PHOControllers.printArticle = {

	init: function() {
		window.print();
	}
};

