﻿BlogEngine = {
    $: function (id) {
        return document.getElementById(id);
    },
    webRoot: '',
    i18n: {
        hasRated: '',
        savingTheComment: '',
        comments: '',
        commentWasSaved: '',
        commentWaitingModeration: '',
        cancel: '',
        filter: '',
        apmlDescription: ''
    },
    setFlag: function (iso) {
        if (iso.length > 0) BlogEngine.comments.flagImage.src = BlogEngine.webRoot + "pics/flags/" + iso + ".png";
        else BlogEngine.comments.flagImage.src = BlogEngine.webRoot + "pics/pixel.gif";
    },
    showCommentPreview: function () {
        this.$('preview').className = 'selected';
        this.$('compose').className = '';
        this.$('commentCompose').style.display = 'none';
        this.$('commentPreview').style.display = 'block';
        this.$('commentPreview').innerHTML = '<img src="' + BlogEngine.webRoot + 'pics/ajax-loader.gif" alt="Loading" />';
        var argument = this.$('commentPreview').innerHTML;
        this.addComment(true);
    },
    composeComment: function () {
        this.$('preview').className = '';
        this.$('compose').className = 'selected';
        this.$('commentPreview').style.display = 'none';
        this.$('commentCompose').style.display = 'block';
    },
    endShowPreview: function (arg, context) {
        BlogEngine.$('commentPreview').innerHTML = arg;
    },
    addComment: function (preview) {
        var isPreview = preview == true;
        if (!isPreview) {
            this.$("btnSaveAjax").disabled = true;
            this.$("ajaxLoader").style.display = "inline";
            this.$("status").className = "";
            this.$("status").innerHTML = BlogEngine.i18n.savingTheComment;
        }
        var author = BlogEngine.comments.nameBox.value;
        var email = BlogEngine.comments.emailBox.value;
        var website = BlogEngine.comments.websiteBox.value;
        var country = BlogEngine.comments.countryDropDown ? BlogEngine.comments.countryDropDown.value : "";
        var content = BlogEngine.comments.contentBox.value;
        var notify = BlogEngine.$("cbNotify").checked;
        var captcha = BlogEngine.comments.captchaField.value;
        var replyToId = BlogEngine.comments.replyToId ? BlogEngine.comments.replyToId.value : "";
        var callback = isPreview ? BlogEngine.endShowPreview : BlogEngine.appendComment;
        var argument = author + "-|-" + email + "-|-" + website + "-|-" + country + "-|-" + content + "-|-" + notify + "-|-" + isPreview + "-|-" + captcha + "-|-" + replyToId;
        WebForm_DoCallback('CommentView1', argument, callback, 'comment', null, false);
        if (!isPreview && typeof(OnComment) != "undefined") OnComment(author, email, website, country, content);
    },
    cancelReply: function () {
        this.replyToComment('');
    },
    replyToComment: function (id) {
        BlogEngine.comments.replyToId.value = id;
        var commentForm = BlogEngine.$('comment-form');
        if (!id || id == '' || id == null || id == '00000000-0000-0000-0000-000000000000') {
            var base = BlogEngine.$("commentlist");
            base.appendChild(commentForm);
            BlogEngine.$('cancelReply').style.display = 'none';
        } else {
            BlogEngine.$('cancelReply').style.display = '';
            var parentComment = BlogEngine.$('id_' + id);
            var replies = BlogEngine.$('replies_' + id);
            if (replies == null) {
                replies = document.createElement('div');
                replies.className = 'comment-replies';
                replies.setAttribute('id') = 'replies_' + id;
                parentComment.appendChild(replies);
            }
            replies.style.display = '';
            replies.appendChild(commentForm);
        }
        BlogEngine.comments.nameBox.focus();
    },
    appendComment: function (args, context) {
        if (context == "comment") {
            var commentList = BlogEngine.$("commentlist");
            if (commentList.innerHTML.length < 10) commentList.innerHTML = "<h1 id='comment'>" + BlogEngine.i18n.comments + "</h1>"
            var id = BlogEngine.comments.replyToId ? BlogEngine.comments.replyToId.value : '';
            if (id != '') {
                var replies = BlogEngine.$('replies_' + id);
                replies.innerHTML += args;
            } else {
                commentList.innerHTML += args;
                commentList.style.display = 'block';
            }
            BlogEngine.comments.contentBox.value = "";
            BlogEngine.comments.contentBox = BlogEngine.$(BlogEngine.comments.contentBox.id);
            BlogEngine.$("ajaxLoader").style.display = "none";
            BlogEngine.$("status").className = "success";
            if (!BlogEngine.comments.moderation) BlogEngine.$("status").innerHTML = BlogEngine.i18n.commentWasSaved;
            else BlogEngine.$("status").innerHTML = BlogEngine.i18n.commentWaitingModeration;
            BlogEngine.composeComment();
            var commentForm = BlogEngine.$('comment-form');
            commentList.appendChild(commentForm);
            if (BlogEngine.comments.replyToId) BlogEngine.comments.replyToId.value = '';
            if (BlogEngine.$('cancelReply')) BlogEngine.$('cancelReply').style.display = 'none';
        }
        BlogEngine.$("btnSaveAjax").disabled = false;
    },
    checkAuthorName: function (sender, args) {
        args.IsValid = true;
        if (BlogEngine.comments.checkName) {
            var author = BlogEngine.comments.postAuthor;
            var visitor = BlogEngine.comments.nameBox.value;
            args.IsValid = !this.equal(author, visitor);
        }
    },
    addBbCode: function (v) {
        try {
            var contentBox = BlogEngine.comments.contentBox;
            if (contentBox.selectionStart) {
                var pretxt = contentBox.value.substring(0, contentBox.selectionStart);
                var therest = contentBox.value.substr(contentBox.selectionEnd);
                var sel = contentBox.value.substring(contentBox.selectionStart, contentBox.selectionEnd);
                contentBox.value = pretxt + "[" + v + "]" + sel + "[/" + v + "]" + therest;
                contentBox.focus();
            } else if (document.selection && document.selection.createRange) {
                var str = document.selection.createRange().text;
                contentBox.focus();
                var sel = document.selection.createRange();
                sel.text = "[" + v + "]" + str + "[/" + v + "]";
            }
        } catch(ex) {}
        return;
    },
    search: function (root) {
        var input = this.$("searchfield");
        var check = this.$("searchcomments");
        var search = "search.aspx?q=" + encodeURIComponent(input.value);
        if (check != null && check.checked) search += "&comment=true";
        top.location.href = root + search;
        return false;
    },
    searchClear: function (defaultText) {
        var input = this.$("searchfield");
        if (input.value == defaultText) input.value = "";
        else if (input.value == "") input.value = defaultText;
    },
    rate: function (id, rating) {
        this.createCallback("rating.axd?id=" + id + "&rating=" + rating, BlogEngine.ratingCallback);
    },
    ratingCallback: function (response) {
        var rating = response.substring(0, 1);
        var status = response.substring(1);
        if (status == "OK") {
            if (typeof OnRating != "undefined") OnRating(rating);
            alert("Your rating has been registered. Thank you!");
        } else if (status == "HASRATED") {
            alert("You've already rated this post");
        } else {
            alert("An error occured while registering your rating. Please try again");
        }
    },
    createCallback: function (url, callback) {
        var http = BlogEngine.getHttpObject();
        http.open("GET", url, true);
        http.onreadystatechange = function () {
            if (http.readyState == 4) {
                if (http.responseText.length > 0 && callback != null) callback(http.responseText);
            }
        };
        http.send(null);
    },
    getHttpObject: function () {
        if (typeof XMLHttpRequest != 'undefined') return new XMLHttpRequest();
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {}
        }
        return false;
    },
    updateCalendar: function (args, context) {
        var cal = BlogEngine.$('calendarContainer');
        cal.innerHTML = args;
        BlogEngine.Calendar.months[context] = args;
    },
    toggleMonth: function (year) {
        var monthList = BlogEngine.$("monthList");
        var years = monthList.getElementsByTagName("ul");
        for (i = 0; i < years.length; i++) {
            if (years[i].id == year) {
                var state = years[i].className == "open" ? "" : "open";
                years[i].className = state;
                break;
            }
        }
    },
    equal: function (first, second) {
        var f = first.toLowerCase().replace(new RegExp(' ', 'gi'), '');
        var s = second.toLowerCase().replace(new RegExp(' ', 'gi'), '');
        return f == s;
    },
    xfnRelationships: ['friend', 'acquaintance', 'contact', 'met', 'co-worker', 'colleague', 'co-resident', 'neighbor', 'child', 'parent', 'sibling', 'spouse', 'kin', 'muse', 'crush', 'date', 'sweetheart', 'me'],
    hightLightXfn: function () {
        var content = BlogEngine.$('content');
        if (content == null) return;
        var links = content.getElementsByTagName('a');
        for (i = 0; i < links.length; i++) {
            var link = links[i];
            var rel = link.getAttribute('rel');
            if (rel && rel != "nofollow,noindex") {
                for (j = 0; j < BlogEngine.xfnRelationships.length; j++) {
                    if (rel.indexOf(BlogEngine.xfnRelationships[j]) > -1) {
                        link.title = 'XFN relationship: ' + rel;
                        break;
                    }
                }
            }
        }
    },
    showRating: function (container, id, raters, rating) {
        var div = document.createElement('div');
        div.className = 'rating';
        var p = document.createElement('p');
        div.appendChild(p);
        if (raters == 0) {
            p.innerHTML = 'Be the first to rate this post';
        } else {
            p.innerHTML = 'Currently rated ' + new Number(rating).toFixed(1) + ' by ' + raters + ' people';
        }
        var ul = document.createElement('ul');
        ul.className = 'star-rating small-star';
        div.appendChild(ul);
        var li = document.createElement('li');
        li.className = 'current-rating';
        li.style.width = Math.round(rating * 20) + '%';
        li.innerHTML = 'Currently ' + rating + '/5 Stars.';
        ul.appendChild(li);
        for (var i = 1; i <= 5; i++) {
            var l = document.createElement('li');
            var a = document.createElement('a');
            a.innerHTML = i;
            a.href = 'rate/' + i;
            a.className = this.englishNumber(i);
            a.title = "Rate this " + i.toString() + " star" + (i == 1 ? "" : "s") + " out of 5";
            a.onclick = function () {
                BlogEngine.rate(id, this.innerHTML);
                return false;
            };
            l.appendChild(a);
            ul.appendChild(l);
        }
        container.innerHTML = '';
        container.appendChild(div);
        container.style.visibility = 'visible';
    },
    applyRatings: function () {
        var divs = document.getElementsByTagName('div');
        for (var i = 0; i < divs.length; i++) {
            if (divs[i].className == 'ratingcontainer') {
                var args = divs[i].innerHTML.split('|');
                BlogEngine.showRating(divs[i], args[0], args[1], args[2]);
            }
        }
    },
    englishNumber: function (number) {
        if (number == 1) return 'one-star';
        if (number == 2) return 'two-stars';
        if (number == 3) return 'three-stars';
        if (number == 4) return 'four-stars';
        return 'five-stars';
    },
    addLoadEvent: function (func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function () {
                oldonload();
                func();
            }
        }
    },
    filterByAPML: function () {
        var width = document.documentElement.clientWidth + document.documentElement.scrollLeft;
        var height = document.documentElement.clientHeight + document.documentElement.scrollTop;
        document.body.style.position = 'static';
        var layer = document.createElement('div');
        layer.style.zIndex = 2;
        layer.id = 'layer';
        layer.style.position = 'absolute';
        layer.style.top = '0px';
        layer.style.left = '0px';
        layer.style.height = document.documentElement.scrollHeight + 'px';
        layer.style.width = width + 'px';
        layer.style.backgroundColor = 'black';
        layer.style.opacity = '.6';
        layer.style.filter += ("progid:DXImageTransform.Microsoft.Alpha(opacity=60)");
        document.body.appendChild(layer);
        var div = document.createElement('div');
        div.style.zIndex = 3;
        div.id = 'apmlfilter';
        div.style.position = (navigator.userAgent.indexOf('MSIE 6') > -1) ? 'absolute' : 'fixed';
        div.style.top = '200px';
        div.style.left = (width / 2) - (400 / 2) + 'px';
        div.style.height = '50px';
        div.style.width = '400px';
        div.style.backgroundColor = 'white';
        div.style.border = '2px solid silver';
        div.style.padding = '20px';
        document.body.appendChild(div);
        var p = document.createElement('p');
        p.innerHTML = BlogEngine.i18n.apmlDescription;
        p.style.margin = '0px';
        div.appendChild(p);
        var form = document.createElement('form');
        form.method = 'get';
        form.style.display = 'inline';
        form.action = BlogEngine.webRoot;
        div.appendChild(form);
        var textbox = document.createElement('input');
        textbox.type = 'text';
        textbox.value = BlogEngine.getCookieValue('url') || 'http://';
        textbox.style.width = '320px';
        textbox.id = 'txtapml';
        textbox.name = 'apml';
        textbox.style.background = 'url(' + BlogEngine.webRoot + 'pics/apml.png) no-repeat 2px center';
        textbox.style.paddingLeft = '16px';
        form.appendChild(textbox);
        textbox.focus();
        var button = document.createElement('input');
        button.type = 'submit';
        button.value = BlogEngine.i18n.filter;
        button.onclick = function () {
            location.href = BlogEngine.webRoot + '?apml=' + encodeURIComponent(BlogEngine.$('txtapml').value)
        };
        form.appendChild(button);
        var br = document.createElement('br');
        div.appendChild(br);
        var a = document.createElement('a');
        a.innerHTML = BlogEngine.i18n.cancel;
        a.href = 'javascript:void(0)';
        a.onclick = function () {
            document.body.removeChild(this.$('layer'));
            document.body.removeChild(this.$('apmlfilter'));
            document.body.style.position = '';
        };
        div.appendChild(a);
    },
    getCookieValue: function (name) {
        var cookie = new String(document.cookie);
        if (cookie != null && cookie.indexOf('comment=') > -1) {
            var start = cookie.indexOf(name + '=') + name.length + 1;
            var end = cookie.indexOf('&', start);
            if (end > start && start > -1) return cookie.substring(start, end);
        }
        return null;
    },
    comments: {
        flagImage: null,
        contentBox: null,
        moderation: null,
        checkName: null,
        postAuthor: null,
        nameBox: null,
        emailBox: null,
        websiteBox: null,
        countryDropDown: null,
        captchaField: null,
        controlId: null,
        replyToId: null
    }
};
BlogEngine.addLoadEvent(BlogEngine.hightLightXfn);
BlogEngine.addLoadEvent(BlogEngine.applyRatings);
if (typeof($) == 'undefined') window.$ = BlogEngine.$;
if (typeof(registerCommentBox) != 'undefined') BlogEngine.addLoadEvent(registerCommentBox);
if (typeof(registerVariables) != 'undefined') BlogEngine.addLoadEvent(registerVariables);
if (typeof(setupBlogEngineCalendar) != 'undefined') BlogEngine.addLoadEvent(setupBlogEngineCalendar);