var submitForm = function(formName) {
    var $form = $("#" + formName);
    $form.submit();
}

var common = new function() {
    var self = this;

    $(function() {
        self.contextPath = $("#contextPath").val() || "";

        self.url = function(url) {
            return this.contextPath + url;
        };
    });
};

function openPopup(url, windowName, width, height) {
    var left = Math.floor((screen.availWidth - width) * 0.5),
        top = Math.floor((screen.availHeight - height) * 0.5);

    left = Math.max(left, 0);
    top = Math.max(top, 0);

    attrs = "resizable=yes,scrollbars=yes,status=no,menubar=no,location=no,directories=no,toolbar=no,personalbar=no,dependent=yes";

    return window.open(url, windowName, "width=" + width + ",height=" + height + ",top=" + top + ",left=" + left + "," + attrs);
}

function updateContentHeight() {
    var leftmenu = $("#leftmenu").css("height", "auto");
    var content = $("#content").css("height", "auto");
    var max = Math.max(leftmenu.height(), content.height());

    leftmenu.height((max - 10) + "px");
    content.height(max + "px");
}

function consoleLog(msg) {
    if (window.console && window.console.log) {
        window.console.log(msg);
    }
}

function showMoreEventInfo(eventId) {
    $.ajax({
        url: common.url("/event/more-info"),
        data: {eventId: eventId},
        type: "POST",
        dataType: "json",
        success: function(json) {
            if (json.response != "OK") {
                return;
            }

            if (json.resume) {
                $("#resume_" + eventId).html(json.resume);
                
                var cont = $("#resume_" + eventId);
                $("span.old,br", cont).remove();
                cont.show();
            }
            $("#more_info_" + eventId).hide();
            $("#less_info_" + eventId).show();

            updateContentHeight();
        }
    });
}
function showLessEventInfo(eventId) {
    $("#resume_" + eventId).hide().children().remove();
    $("#less_info_" + eventId).hide();
    $("#more_info_" + eventId).show();

    updateContentHeight();
}

function initEventList() {
    addLanguageChangeListener(function(currentLangEng) {
        changeAttributeLang("search_btn", "value", currentLangEng);
    });

    window.deny = function(index) {
        $("div[id^=denyContainer_]").hide();
        $("#denyContainer_" + index).show();
        updateContentHeight();
    };

    window.removePersonalEvent = function(eventId) {
        $.ajax({
            url: common.url("/event/card/do"), 
            data: {
                eventId: eventId,
                action: "remove"
            },
            dataType: "json", 
            type: "POST", 
            success: function(json) {
                if (json.response == "OK") {
                    $("#event" + eventId).remove();
                    
                    updateContentHeight();
                }
            }
        })
    },

    window.doPersonalEvent = function(add, eventId) {
        $.ajax({
            url: common.url("/event/card/do"),
            data: {
                action: (add ? "add" : "remove"),
                eventId: eventId
            },
            dataType: "json",
            type: "POST",
            success: function(json) {
                if (json.response == "OK") {
                    var addButton = $("#addEvent_" + eventId);
                    var removeButton = $("#removeEvent_" + eventId);

                    if (add) {
                        addButton.hide();
                        removeButton.show();
                    } else {
                        removeButton.hide();
                        addButton.show();
                    }
                }
            }
        });
    };
	
    $(function() {
        $("#resultSize").change(function() {
            $(this).parents("form").submit();
        });
        
        $("#nod").html($("#numberOfDisplayed").val());
        $("#noa").html($("#numberOfAllEvents").val());
    });
}

function changeEventAdmin(eventId, select) {
    function showError() {
        alert($("#changeEventsAdmineError").val());
    }

    $.ajax({
        url: common.url("/event/admin/change-event-admin"),
        data: {
            eventId: eventId,
            adminId: $(select).val()
        },
        dataType: "json",
        type: "POST",
        success: function(json) {
            if (json.response == "ERROR") {
                showError();
            }
        },
        error: showError
    });
}

function initPlaceholder(selector) {
    var input = $(selector),
        placeholderText = input.attr("data-placeholder");

    input.bind("focus blur", handler);

    function handler(e) {
        var value = $.trim(input.val());

        if (e.type == "focus") {
            input.removeClass("placeholder");

            if (value.toLowerCase() == placeholderText.toLowerCase()) {
                input.val("");
            }

        } else {
            if (value.length == 0 || value.toLowerCase() == placeholderText.toLowerCase()) {
                input.val(placeholderText);
                input.addClass("placeholder");
            }
        }
    }
}
function clearPlaceholder(selector, force) {
    var input = $(selector),
        value = $.trim(input.val()),
        placeholderText = input.attr("data-placeholder");

    if (force || value.toLowerCase() == placeholderText.toLowerCase()) {
        input.val("");
    }
}

function initEventRegister() {
    function fieldToLowerCase(fieldId) {
        var $field = $("#" + fieldId);
        $field.val($field.val().toLowerCase());
    }

    function initLimit(id) {
        var field = $("#" + id);

        if (!field.length) {
            return;
        }

        var maxSpan = $("#" + id + "_max"),
            currentSpan = $("#" + id + "_current"),
            maxlength = parseInt($("#" + id + "_maxlength").val(), 10),
            charsLeft = maxlength - field.val().length;

        maxSpan.text(maxlength);
        currentSpan.text(charsLeft);

        function checkLength() {
            var value = field.val();
            var charsLeft = maxlength - value.length;
            
            currentSpan.text((charsLeft > 0 ? charsLeft : 0));

            if (charsLeft < 0) {
                field.val(value.substring(0, maxlength));
                
                var errorMsg = $("#limit_reached_error").val().replace("$limit", maxlength);
                alert(errorMsg);
            }
        }

        field.bind("keyup change", checkLength);
        field.bind("cut paste", function() {
            setTimeout(checkLength, 1);
        });
    }

    function initLimits() {
        var ids = ["otherPlace", "headline", "resume", "infoPage", "participants", "eventProducer"];
        
        for (var i = 0, len = ids.length; i < len; ++i) {
            initLimit(ids[i]);
        }
    }

    var disableAddNewParticipant = false,
        disableParticipatsLimitError = false;
    
    function initParticipantsLimit() {
        if ($("#participants").length) {
            // old participants textarea is active
            return;
        }

        var maxSpan = $("#participants_max"),
            currentSpan = $("#participants_current"),
            maxlength = parseInt($("#participants_maxlength").val(), 10),
            table = $("#participants_tbl");

        maxSpan.text(maxlength);

        function checkLength() {
            var charsLeft = maxlength,
                input, inputId;

            if (this != window) {
                input = $(this);
                inputId = input.attr("id");
            }

            $("input:text", table).each(function() {
                var field = $(this),
                    fieldId = field.attr("id");

                if (!input || fieldId != inputId) {
                    charsLeft -= field.val().length;
                }
            });

            var charsForInput = charsLeft;
            if (input) {
                charsLeft -= input.val().length;
            }

            currentSpan.text((charsLeft > 0 ? charsLeft : 0));

            if (charsLeft < 0) {
                if (input) {
                    input.val(input.val().substring(0, Math.max(charsForInput, 0)));
                }

                if (!disableParticipatsLimitError) {
                    disableParticipatsLimitError = true;
                    var errorMsg = $("#limit_reached_error").val().replace("$limit", maxlength);
                    alert(errorMsg);
                }
            }
            disableAddNewParticipant = (charsLeft <= 0);
            disableParticipatsLimitError = (charsLeft < 0);
        }

        checkLength();

        var inputs = $("input:text", table);
        inputs.unbind();
        inputs
            .bind("keyup change", checkLength)
            .bind("cut pase", function() {
                var self = this;

                setTimeout(function() {
                    checkLength.call(self);
                }, 1);
            });
    }

    window.showLessInfo = function(elem) {
        var link = $(elem);
        link.hide();
        link.next().show();

        link.parent().next().hide();
        updateContentHeight();
    };
    window.showMoreInfo = function(elem) {
        var link = $(elem);
        link.hide();
        link.prev().show();
        
        link.parent().next().show();
        updateContentHeight();
    };

    $(function() {
        $("#eventPlace").change(function() {
            var $otherPlace = $("#otherPlaceConteiner");

            if ( $("#eventPlace :selected").text().toLowerCase().indexOf("annan") >= 0 ) {
                $otherPlace.show();
            } else {
                $otherPlace.hide();

                $("#otherPlace").val("").trigger("change");
            }
            updateContentHeight();
        });

        $("#eventPlace, #secondEventPlace").trigger('change');

        initLimits();

        $("#headlineToLowerCase").click(function() {
            fieldToLowerCase("headline");
        });

        $("#resumeToLowerCase").click(function() {
            fieldToLowerCase("resume");
        });

        $("#add_new_particip").click(function() {
            if (disableAddNewParticipant) {
                return false;
            }

            var body = $("#participants_tbl > tbody"),
                lastRow = $("tr:last", body);

            // check if there is a row with empty inputs, if so used it
            var emptyInput;
            $("tr[id$=_row]", body).each(function() {
                var row = $(this),
                    // prefix_index_field
                    index = row.attr("id").split("_")[1];

                 var nameInput = $("#particip_" + index + "_name"),
                     name = $.trim(nameInput.val());

                 if (name.length) {
                     return true;
                 }

                 var title = $("#particip_" + index + "_title").val();
                 title = $.trim(title);

                 if (title.length) {
                     return true;
                 }

                 var org = $("#particip_" + index + "_org").val();
                 org = $.trim(org);

                 if (org.length) {
                     return true;
                 }

                 emptyInput = nameInput;
                 return false;
            });

            if (emptyInput) {
                emptyInput.focus();
                return false;
            }


            var clone = lastRow.prev().clone();

            clone.find("input").val("");

            clone.find("[id^=particip_]").andSelf().each(function() {
                var elem = $(this),
                    parts = elem.attr("id").split("_"),
                    name = elem.attr("name");

                var index = parseInt(parts[1], 10);

                var id = parts[0] + "_" + (index + 1) + "_" + parts[2];

                elem.attr("id", id);

                if (name && name.length) {
                    elem.attr("name", id);
                }
            });

            lastRow.before(clone);
            updateContentHeight();
            initParticipantsLimit();

            clone.find("input[id$=_name]").focus();

            return false;
        });

        initParticipantsLimit();


        initPlaceholder("#broadcastAddress");

        $("#internetStreaming").click(function() {
            var checked = $(this).is(":checked"),
                conts = $("#broadcastAddress_cont,#broadcastAddress_help");

            if (checked) {
                conts.show();
            } else {
                conts.hide();
            }
        });

        $("#eventreg").submit(function() {
            var checked = $("#internetStreaming").is(":checked");
            clearPlaceholder("#broadcastAddress", !checked);
        });
    });
}

var previewEventReq = null;
function previewEvent() {
    if (previewEventReq != null) {
        return;
    }

    var params = {};

    var form = $("#eventreg");

    $(":input", form).not(":submit,:button").each(function() {
        var e = $(this),
            name = e.attr("name"),
            value = e.val();

        if (!name || !name.length) {
            return true;

        } else if (e.is(":checkbox") && !e.attr("checked")) {
            return true;
            
        }

        params[name] = value;

        return true;
    });

    previewEventReq = $.ajax({
        url: common.url("/event/create-save"),
        data: params,
        type: "POST",
        dataType: "json",
        success: function(json) {
            if (json.response == "OK") {
                $("#eventId").val(json.eventId);
                $("#editEvent").val("true");

                var previewUrl = common.url("/event/preview/" + json.eventId);
                openPopup(previewUrl, "preview", 1000, 700);

                return;
            }

            alert("Error");
            consoleLog("Error: " + (json.responseDescription || ""));
        },
        error: function(req, text) {
            alert("Error");
            consoleLog("Error: " + text);
        },
        complete: function() {
            previewEventReq = null;
        }
    })
}

function initSelect(selector, containerClass) {
    var params = {
        ddMaxHeight: "250px"
    };

    if (containerClass) {
        params.containerClass = containerClass;
    }

    $(selector).sSelect(params);
}

function initAdmin() {
    var selectsInit = false;

    function initSelects() {
        if (selectsInit) {
            return;
        }

        selectsInit = true;
        initSelect("#sortBy,#adminId,#adminResultSize");
    }
    function setExpanded(expanded) {
        $("#box_expanded").val(expanded);
    }

    window.showLessInfo = function(elem) {
        var link = $(elem);
        link.hide();
        link.next().show();

        link.parent().next().hide();
        setExpanded("false");
        updateContentHeight();
    };
    window.showMoreInfo = function(elem) {
        var link = $(elem);
        link.hide();
        link.prev().show();

        link.parent().next().show();

        initSelects();
        setExpanded("true");
        updateContentHeight();
    };

    if ($("#box_expanded").val() == "true") {
        initSelects();
    }
}

function initDenyButton() {
    $("#deny").click(function(){
        $("#denyContainer" ).show();
        updateContentHeight();
    });
}

function initMyEvent() {
    window.deleteComment = function(commentId) {
        $.ajax({
            url: common.url("/event/comment/delete"),
            data: {commentId: commentId},
            dataType: "json",
            type: "POST",
            success: function(json) {
                if (json.response == "OK") {
                    $("#comment_" + commentId).remove();
                    updateContentHeight();
                }
            }
        });
    };

    $(function() {
        initDenyButton();

        function showAddComment(show) {
            var newButton = $("#new_comment"),
                form = $("#add_comment_form"), 
                textarea = $("textarea", form);

            if (show) {
                form.show();
                newButton.hide();

                $(":submit", form).focus();
                textarea.focus();
            } else {
                form.hide();
                newButton.show();

                textarea.val("");
            }

            updateContentHeight();
        }

        $("#new_comment").click(function() {
            showAddComment(true);

            return false;
        });
        $("#add_comment_cancel").click(function() {
            showAddComment(false);

            return false;
        });

        $("#add_comment_form").submit(function(e) {
            var value = $("textarea", this).val();

            if ($.trim(value).length == 0) {
                e.preventDefault();
            }
        });

        function markEventForFreeEdit(span, mark) {
            $.ajax({
                url: common.url("/event/admin/mark-free-edit"),
                data: {
                    eventId: $("input", span).attr("name"),
                    mark: mark
                },
                dataType: "json",
                type: "POST",
                success: function(json) {
                    if (json.response != "OK") {
                        return;
                    }

                    var markBtn = $("#mark_free_edit"),
                        unmarkBtn = $("#unmark_free_edit");
                    if (mark) {
                        markBtn.hide();
                        unmarkBtn.show();
                    } else {
                        unmarkBtn.hide();
                        markBtn.show();
                    }
                },
                error: function() {
                    alert("error");
                }
            });
        }
        $("#mark_free_edit").click(function() {
            markEventForFreeEdit(this, true);
            return false;
        });
        $("#unmark_free_edit").click(function() {
            markEventForFreeEdit(this, false);
            return false;
        });
    });
}

function initCompareEvent() {
    $(function() {
        initDenyButton();
    });
}

function confirmCopyPublished() {
    var text = $("#confirm_copy_text").val(),
        yes = confirm(text);

    return yes;
}

var initFormEngine = function() {
    $(function() {
        $("#formEngineForm").append("<input type=\"hidden\" value=\"" +$("#metaId").val() + "\" name=\"pageMetaId\"/>");
        $("#formEngineForm").append("<input type=\"hidden\" value=\"" +$("#surveyPageId").val() + "\" name=\"surveyPageId\"/>");
        $("#formEngineForm").append("<input type=\"hidden\" value=\"" +$("#journalistPageId").val() + "\" name=\"journalistPageId\"/>");

        if ($("#metaId").val() == $("#surveyPageId").val()) {
            $("#formEngineText > div > a").each(function() {
                if ($(this).attr('href') == "javascript:history.back();") {
                     $(this).attr('href', "javascript:window.location=\"" + common.contextPath +
                        "/event/user\"");
                }
            });
        }
    });
}

var editConfirmRequest = null;
function editConfirm(formId, eventId) {
    if (editConfirmRequest != null) {
        editConfirmRequest.abort();
    }

    var confirmText = $("#edit_confirm_txt").val();

    if (!confirm(confirmText)) {
        return;
    }

    editConfirmRequest = $.ajax({
        url: common.url("/event/unqueue/json"),
        data: {eventId: eventId},
        dataType: "json",
        type: "POST",
        success: function(json) {
            $("#" + formId).submit();
        },
        error: function() {
            alert("error");
        },
        complete: function() {
            editConfirmRequest = null;
        }
    });
}

function editPublishedAlert(formId) {
    var alertText = $.trim($("#edit_alert_published_txt").val());

    if (alertText.length) {
        alert(alertText);
    }

    $("#" + formId).submit();
}

var languageChangeListeners = [];
function addLanguageChangeListener(listener) {
    languageChangeListeners.push(listener);
}

function changeAttributeLang(id, attr, switchToEnglish) {
    var suffix = (switchToEnglish ? "_en" : "_sv");
    var text = $("#" + id + suffix).text();
    
    if (switchToEnglish) {
        if (text && !text.length) {
            text = $("#" + id + "_sv").text();
        }
    }

    $("#" + id).attr(attr, text);
}

function submitParentForm(element) {
    $(element).parents('form').submit();
}

$(function() {
    $("#change_language_en,#change_language_sv").click(function() {
        var curLangEng = $("#cur_lang_en"),
            switchToSwedish = (curLangEng.val() == "true"),
            suffix = (switchToSwedish ? "_sv" : "_en");

        function change() {
            $(".textint").each(function() {
                var elem = $(this),
                    id = elem.attr("id"), 
                    html = $("#" + id + suffix).html();

                if (!switchToSwedish) {
                    if (html != null && !html.length) {
                        html = $("#" + id + "_sv").html();
                    }
                }

                elem.html(html);
            });

            for (var i=0, len=languageChangeListeners.length; i < len; ++i) {
                languageChangeListeners[i](!switchToSwedish);
            }

            if (switchToSwedish) {
                $("#change_language_sv").hide();
                $("#change_language_en").show();
            } else {
                $("#change_language_en").hide();
                $("#change_language_sv").show();
            }
            curLangEng.val(!switchToSwedish);

            updateContentHeight();
        }
        
        $.ajax({
            url: common.url("/event/change-language"), 
            data: {eng: !switchToSwedish}, 
            dataType: "json", 
            type: "POST", 
            success: change
        });
    });
})

