var visiMode = 1;
var EXECUTION_PERIOD = 300;
var REQUEST_LAG = 1000;

function visiModeUpdeted(aVisiMode) {
    visiMode = aVisiMode;
    document.linksForm.mode.value = visiMode;
    if (visiMode == 1) {
        $("#createLinkToUrl").show();
        $("#createLinkToUrls").hide();
        $('#linkMode1').hide();

        $('#singleLink').show();
        $('#linkMode2').show();
        $('#linkMode3').show();
        document.getElementById('label').className = 'label1';
        document.getElementById('reslabel').className = 'label3';
    } else if (visiMode == 3) {
        $("#createLinkToUrls").show();
        $("#createLinkToUrl").hide();
        $('#linkMode3').hide();
        $('#linkMode1').show();
        $('#linkMode2').show();
        document.getElementById('label').className = 'label2';
        document.getElementById('reslabel').className = 'label3';
    }
}

function showOptions() {
    $('#options').show();
    $('#hideOptions').show();
    $('#showOptions').hide();
}

function hideOptions() {
    $('#options').hide();
    $('#hideOptions').hide();
    $('#showOptions').show();
}

var needToCheckLink = false;
var needToCheckLinkTime = new Date().getTime() + 24 * 3600 * 1000;
var generate = false;

function doCheckSingleLink(generate, showResult, callback) {
    if (document.linksForm.password.value != document.linksForm.passwordConfirm.value) {
        if (showResult) {
            document.getElementById("singleLinkCheckResult").innerHTML = "Not equals password and confirm password!";
            $("#result").show();
        }

        return;
    }

    var params;
    if (document.linksForm.linkId != null && document.linksForm.linkId.value > 0) {
        params = {
            mode: 1,
            linkId: document.linksForm.linkId.value,
            targetURL: document.linksForm.singleLink.value,
            link: document.getElementById('singleLinkResult').value,
            generate: generate
        };
    } else {
        params = {
            mode: 1,
            targetURL: document.linksForm.singleLink.value,
            link: document.getElementById('singleLinkResult').value,
            generate: generate
        };
    }

    $.getJSON("/links/check", params,
            function(data) {
                $("#checkingLinkDiv").hide();

                if (document.getElementById('singleLinkCheckResult'))
                    document.getElementById('singleLinkCheckResult').innerHTML = '';

                if (data.length > 0) {
                    var response = data[0];
                    checkError(response, 'singleLinkCheckResult', false);
                    document.linksForm.singleLink.value = response.targetURL;
                    if (response.linkGenerated == 'true') {
                        document.getElementById('singleLinkResult').value = response.link;
                    }
                }

                if (showResult) {
                    $("#result").show();
                }

                if (callback != null) {
                    callback();
                }
            });
}

function doCheckMultipleToSingleLinks(generate, showResult, callback) {
    var params;
    if (document.linksForm.linkId != null && document.linksForm.linkId.value > 0) {
        params = {mode:3,targetURL:document.linksForm.multiLinks.value,linkId:document.linksForm.linkId.value, link:document.getElementById('singleLinkResult').value,generate:generate};
    } else {
        params = {mode:3,targetURL:document.linksForm.multiLinks.value,link:document.getElementById('singleLinkResult').value,generate:generate};
    }
    $.getJSON('/links/check', params,
            function(data) {
                $('#checkingLinkDiv').hide();
                check_multi_single_links_done(data);
                if (showResult) {
                    $('#result').show();
                }
                if (callback != null) {
                    callback();
                }
            });
    $('#checkingLinkDiv').hide();
}

function generateLinks() {
    checkLinksNow(true, true);
}

function queueCheckLink() {
    clearErrors();
    document.getElementById("borderElement").className = 'border1checking';
    $("#checkingLinkDiv").show();
    needToCheckLink = true;
    needToCheckLinkTime = new Date().getTime();

}

function checkLinksNow(generate, showResult, callback) {
    if (visiMode == 1) doCheckSingleLink(generate, showResult, callback);
    else if (visiMode == 3) doCheckMultipleToSingleLinks(generate, showResult, callback);
}

function doCheckLinks() {
    if (needToCheckLink && new Date().getTime() - needToCheckLinkTime > REQUEST_LAG) {
        needToCheckLink = false;
        checkLinksNow(false, false, undefined);
    }
    setTimeout('doCheckLinks()', EXECUTION_PERIOD);
}

function check_multi_links_done(data) {
    var i;
    if (document.getElementById('multiLinksCheckResult')) document.getElementById('multiLinksCheckResult').innerHTML = '';
    document.linksForm.multiLinks.value = '';
    document.getElementById('multiLinksResultPath').value = '';
    document.getElementById('multiLinksResultSiteURLs').value = '';
    if (data.length > 0) {
        for (i = 0; i < data.length; i++) {
            var response = data[i];
            checkError(response, 'multiLinksCheckResult', true);
            document.linksForm.multiLinks.value += response.targetURL + '\n';
            document.getElementById('multiLinksResultPath').value += response.link + '\n';
            document.getElementById('multiLinksResultSiteURLs').value += '<%=ServerFacade.getMainSiteUrlPath()%>\n';
        }
        //          $('#result').show();
    }
}

function check_multi_single_links_done(data) {
    var i;
    document.getElementById('multiLinksCheckResult').innerHTML = '';
    //    document.linksForm.multiLinks.value = '';
    //        document.getElementById('multiLinksResult').value = '';
    var error = false;
    if (data.length > 0) {
        for (i = 0; i < data.length; i++) {
            var response = data[i];
            if (response.linkGenerated == 'true') {
                document.getElementById('singleLinkResult').value = response.link;
            }
            if (!error) {
                if (response.errorTargetUrl == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Target URL - ' + response.targetURL + "<br>";
                }
                if (response.errorLink == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Link ' + response.link + "<br>";
                }
                if (response.duplicateLink == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Duplicate Link ' + response.link + "<br>";
                }
                if (response.emptyLink == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Empty link ' + "<br>";
                }
                if (response.emptyURL == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Empty URL ' + "<br>";
                }
                if (response.shortLink == 'true') {
                    error = true;
                    document.getElementById('multiLinksCheckResult').innerHTML += '<img src="/images/spacer.gif" class="err" />  Error: Link is shorter than 3 characters' + "<br>";
                }
            }
            if (response.targetURL != null) {
                //                document.linksForm.multiLinks.value += response.targetURL+'\n';
            }

        }

        //          $('#result').show();
    }
    if (error) {
        if (document.linksForm.error) document.linksForm.error.value = '1';
        if (document.getElementById("borderElement")) document.getElementById("borderElement").className = 'border1error';
    } else {
        if (document.getElementById("borderElement")) document.getElementById("borderElement").className = 'border1';
    }
}

function clearErrors() {
    if (document.getElementById('singleLinkCheckResult')) document.getElementById('singleLinkCheckResult').innerHTML = '';
    if (document.getElementById('multiLinksCheckResult')) document.getElementById('multiLinksCheckResult').innerHTML = '';
    if (document.getElementById("borderElement")) document.getElementById("borderElement").className = 'border1';
    $("#createLinkError").val("");
}

function checkError(response, errorElemId, appendLink) {
    var error = false;
    if (response.errorTargetUrl == 'true') {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Target URL - ' + response.targetURL + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Target URL';
        }
    }
    if (response.errorLink == 'true') {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Link ' + response.link + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Link ';
        }
    }
    if (response.duplicateLink == 'true') {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Duplicate Link ' + response.link + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Duplicate Link ';
        }
    }
    if (response.emptyLink == 'true') {
        error = true;
        document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Empty Link ';
    }
    if (response.emptyURL == 'true') {
        error = true;
        document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Empty URL ';
    }
    if (response.shortLink == 'true') {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Link is shorter than 3 characters ' + response.link + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Link is shorter than 3 characters ';
        }
    }

    $("#borderElement").removeClass("border1");
    $("#borderElement").removeClass("border1checking");
    $("#borderElement").removeClass("border1error");
    if (error) {
        $("#borderElement").addClass("border1error");
        document.linksForm.error.value = '1';
    } else {
        $("#borderElement").addClass("border1");
    }
}

function checkError1(result, errorElemId, appendLink) {
    var error = false;

    for (var i = 0; i < result.urls.length; i++) {
        if (result.urls[i].resultCode == "incorrectUrl") {
            error = true;
            if (appendLink) {
                document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect URL - ' + result.urls[i].url + "<br>";
            } else {
                document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Incorrect URL';
            }
            break;
        }

        if (result.urls[i].resultCode == "emptyUrl") {
            error = true;
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Empty URL ';
            break;
        }

        if (result.urls[i].resultCode == "bigUrl") {
            error = true;
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Big URL ';
            break;
        }

    }

    if (result.resultCode == "emptyUrl") {
        error = true;
        document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Empty URL ';
    }

    if (result.resultCode == "notEqualsPassword") {
        error = true;
        document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Not equals password and confirm ';
    }

    if (result.resultCode == "duplicateFromPath") {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Duplicate Link ' + result.fromPath + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Duplicate Link ';
        }
    }

    if (result.resultCode == "emptyFromPath") {
        error = true;
        document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Empty Link ';
    }

    if (result.resultCode == "incorrectFromPath") {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Link ' + result.link + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Incorrect Link ';
        }
    }

    if (result.resultCode == "smallFromPath") {
        error = true;
        if (appendLink) {
            document.getElementById(errorElemId).innerHTML += '<img src="/images/spacer.gif" class="err" /> Error: Link is shorter than 3 characters ' + result.link + "<br>";
        } else {
            document.getElementById(errorElemId).innerHTML = '<img src="/images/spacer.gif" class="err" /> Error: Link is shorter than 3 characters ';
        }
    }

    showErrorBorder(error);
}

function showErrorBorder(value) {
    $("#createLinkFromPathBorder").removeClass("border1");
    $("#createLinkFromPathBorder").removeClass("border1checking");
    $("#createLinkFromPathBorder").removeClass("border1error");
    if (value) {
        $("#createLinkFromPathBorder").addClass("border1error");
    } else {
        $("#createLinkFromPathBorder").addClass("border1");
    }
}

setTimeout("doCheckLinks()", 300);
