﻿function SetReply(comment, replyName, replyEmail, commentTextBox, authorEmail, authorName) {
    commentTextBox.value = "<i>Reply To: <b>" + authorName + "</b>";
    replyName.value = authorName;
    replyEmail.value = authorEmail;
};
function GetControlRef(parentControl, tagName, controlId) {
    var items = parentControl.getElementsByTagName(tagName);
    for (var i = 0; i < items.length; i++) {
        if (items[i].id.indexOf(controlId) != -1) {
            return items[i];
        }
    }
    return null;
};
String.prototype.clean = function () {
    return (this.toString().replace(/[^a-zA-Z 0-9'.@\n\r]+/g, '').replace(/^\s+|\s+$/g, ''));
};

function Get(elementId) {
    return document.getElementById(elementId);
};

function GetByTagName(parentControl, tagName, controlType) {
    var objs = new Array();
    var cnt = 0;
    var temp = parentControl.getElementsByTagName(tagName);
    for (var i = 0; i < temp.length; i++) {
        if (temp[i].type == controlType) {
            objs[cnt] = temp[i];
            cnt++;
        }
    }
    return objs;
};

String.prototype.trim = function () {
    return (this.toString().replace(/^\s+|\s+$/g, ''));
};  

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        window.onload = function () {
            oldonload();
            func();
        }
    }
};
String.format = function () {
    var s = arguments[0];
    for (var i = 0; i < arguments.length - 1; i++) {
        var reg = new RegExp("\\{" + i + "\\}", "gm");
        s = s.replace(reg, arguments[i + 1]);
    }
    return s;
};
function ConvertToDate(dateString, onlyDate) {
    if (dateString != null) {
        if (onlyDate == true) {
            return dateFormat(eval(dateString.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")), "mmm dd, yyyy");
        }
        return dateFormat(eval(dateString.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")), "mmm dd, yyyy hh:mm TT");
    }
    else {
        return "";
    }
};
function ValidateEmail(email) {
    var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    return expr.test(email);
};
var isShift = false;

function keyUP(keyCode) {
    if (keyCode == 16)isShift = false;
};
function isNumeric(keyCode) {
    if (keyCode == 16)isShift = true;
    return ((keyCode >= 48 && keyCode <= 57 || keyCode == 8 || keyCode == 9 || (keyCode >= 96 && keyCode <= 105)) && isShift == false);
};

String.prototype.HtmlEncode = function () {
    return $('<div/>').text(this.toString()).html();
};
String.prototype.HtmlDecode = function () {
    return $('<div/>').html(this.toString()).text();
};

var loader = "<img src = '/images/loading3.gif' alt = 'Loading...' style = 'height:35px;width:35px' />";
var serviceUrl = "/Services/Common.asmx/";
function AjaxCall(method, params, successMethod, extraParams) {
    if (extraParams != null) {
        try {
            if (extraParams.Pager != null) {
                extraParams.Pager[0].disabled = true;
                extraParams.Pager[0].className = "";
            }
        } catch (e) { }
        try {
            if (extraParams.Container != null) {
                if (extraParams.Loader == null) {
                    extraParams.Container.html(loader);
                } else {
                    extraParams.Container.html(extraParams.Loader)
                }
            }
        } catch (e) { }
    }
    var ajaxUrl = method.indexOf("/") == -1 ? serviceUrl + method : method;
    $.ajax({
        type: "POST",
        url: ajaxUrl,
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            if (typeof successMethod != "undefined") {
                successMethod(response, extraParams);
            }
        },
        error: function (response) {
            alert(response.responseText);
        },
        failure: function (response) {
            alert(response.responseText);
        }
    });
};
function ValidateControl(control) {
    var isValid = true;
    $("input[type=text], input[type=password], textarea", control).each(function () {
        if ($(this)[0].nextSibling != null && $(this)[0].nextSibling.className == "error") {
            if (jQuery.trim($(this).val()) == "") {
                if (isValid) {
                    isValid = false;
                }
                $(this)[0].nextSibling.style.visibility = "visible";
            } else {
                $(this)[0].nextSibling.style.visibility = "hidden";
            }
        }
    });
    return isValid;
};

function Load() {
    $("input[id*=txtSearch]").live("keyup", function (event) {
        if (event.keyCode == 13) Search();
    });
    $("#txtSubscriberEmail").live("keyup", function (event) {
        if (event.keyCode == 13) SubscribeVisitor();
    });
    $("input[id*=txtSearch]").Watermark();
    $("input[type=image], input[type=submit]").live("click", function () {
        $("#IsPostBack").val("true");
        $("#PostbackControl").val($(this)[0].name);
    });
    $(document).ready(function () {
        ApplyValidation(".form input[type=image], .form .submit");
    });
};
function Load2() {
    $("input[type=text], textarea").live("blur", function (event) {
        $(this).val($(this).val().clean());
    });
};

function ApplyValidation(selector) {
    $(selector).each(function () {
        var attr = "";
        if ($(this)[0].getAttributeNode("onclick") != null) {
            attr = $(this)[0].getAttributeNode("onclick").value;
        }
        $(this)[0].setAttribute("onclick", "");
        $(this).click(function () {
            if (attr == null) {
                return ValidateControl($(this).parents(".form"));
            }
            if (ValidateControl($(this).parents(".form"))) {
                var funcs = attr.split(';');
                for (var i in funcs) {
                    if (funcs[i].indexOf("return") != -1) {
                        var val;
                        eval("val = " + funcs[i].replace("return", ""));
                        if (!val) {
                            return val;
                        }
                    } else {
                        eval(funcs[i]);
                    }
                }
                return true;
            }
            return false;
        });

    });
};
///WATERMARK
(function () {
    $.fn.Watermark = function () {
        $(this).live('focusout', function () {
            if (this.value == "") {this.value = this.title;}
        });
        $(this).live('focusin', function () {
            if (this.value == this.title) { this.value = ""; }
        });
    }
})(jQuery);

///CAROUSEL
function Carousel(id, interval) {
    var autoscrolling = true;
    $('#' + id).infiniteCarousel().mouseover(function () {
        autoscrolling = false;
    }).mouseout(function () {
        autoscrolling = true;
    });
    setInterval(function () {
        if (autoscrolling) {
            $('#' + id).trigger('next');
        }
    }, interval);
}; 
(function () {
    $.fn.infiniteCarousel = function () {
        function repeat(str, n) {
            return new Array(n + 1).join(str);
        }

        return this.each(function () {
            var $wrapper = $('> div', this).css('overflow', 'hidden'),
                $slider = $wrapper.find('> ul').width(9999),
                $items = $slider.find('> li'),
                $single = $items.filter(':first');

            singleWidth = $single.outerWidth(),
                visible = Math.ceil($wrapper.innerWidth() / singleWidth),
                currentPage = 1,
                pages = Math.ceil($items.length / visible);
            if ($items.length % visible != 0) {
                $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
                $items = $slider.find('> li');
            }
            $items.filter(':first').before($items.slice(-visible).clone().addClass('cloned'));
            $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
            $items = $slider.find('> li');
            $wrapper.scrollLeft(singleWidth * visible);
            function gotoPage(page) {
                var dir = page < currentPage ? -1 : 1,
                    n = Math.abs(currentPage - page),
                    left = singleWidth * dir * visible * n;

                $wrapper.filter(':not(:animated)').animate({
                    scrollLeft: '+=' + left
                }, 500, function () {
                    if (page > pages) {
                        $wrapper.scrollLeft(singleWidth * visible);
                        page = 1;
                    } else if (page == 0) {
                        page = pages;
                        $wrapper.scrollLeft(singleWidth * visible * pages);
                    }

                    currentPage = page;
                });
            }
            $wrapper.after('<a href="#" style = "display:none" class="arrow back">&lt;</a><a href="#"  style = "display:none" class="arrow forward">&gt;</a>');
            $('a.back', this).click(function () {
                gotoPage(currentPage - 1);
                return false;
            });
            $('a.forward', this).click(function () {
                gotoPage(currentPage + 1);
                return false;
            });
            $(this).bind('goto', function (event, page) {
                gotoPage(page);
            });
            $(this).bind('next', function () {
                gotoPage(currentPage + 1);
            });
        });
    };
})(jQuery);

////HOVER MENU
var left = -9;
var top = 34;
var IsMouseOverPopUp;
function BindHoverMenu(target, menu) {
    $("#" + target).live("mouseover", function () {
        IsMouseOverPopUp = false;
        var p = GetCordinates($(this).get(0));
        $("#dvMenu").css("left", (parseInt(p.x) + parseInt(left)) + "px");
        $("#dvMenu").css("top", (parseInt(p.y) + 34) + "px");
        $("#dvMenu").css("display", "block");
        $("#dvMenu").html($("#" + menu).html());
        $(this).mouseout(function () {
            HideHoverMenu();
        });
    });
    $("#dvMenu, #" + target).live("mouseover", function () {
        IsMouseOverPopUp = true;
    });
    $("#dvMenu, #" + target).live("mouseout", function () {
        IsMouseOverPopUp = false;
        HideHoverMenu();
    });
};
function GetCordinates(obj) {
    var p = {};
    p.x = obj.offsetLeft;
    p.y = obj.offsetTop;
    while (obj.offsetParent) {
        p.x = p.x + obj.offsetParent.offsetLeft;
        p.y = p.y + obj.offsetParent.offsetTop;
        if (obj == document.getElementsByTagName("body")[0]) {
            break;
        }
        else {
            obj = obj.offsetParent;
        }
    }
    return p;
};
function HideHoverMenu() {
    setTimeout(function () {
        if (!IsMouseOverPopUp) {
            $("#dvMenu").css("display", "none");
        }
    }, 500);
};

////ARTICLES
function GetRelatedArticles(theme) {
    $("#dvRelatedArticles div").html(loader);
    AjaxCall("GetRelatedArticles", "{articleId:" + article.ArticleId + "}", function (r) {
        $("#dvRelatedArticles div").html("<ul></ul>");
        for (var i in r.d) {
            $("#dvRelatedArticles ul").append(String.format("<li><a href = '/{3}/Articles/{0}.aspx'>{1}</a><br />{2}</li>", r.d[i].Slug, r.d[i].Title, r.d[i].Description, theme));
        }
        Carousel("dvRelatedArticles", 3000);
    });
};

////COMMENTS
function GetComments(pageIndex, theme) {
    $("#dvMoreComments").html(loader);
    AjaxCall("GetComments", "{slug: '" + article.Slug + "', approved:" + approved + ", pageIndex:" + pageIndex + "}", function (response) {
        $("#lblNoComments").css("display", "none");
        if (response.d.HasRows) {
            $.template("CommentTemplate", CommentTemplate);
            //$("#CommentTemplate").tmpl(response.d.Data).appendTo("#dvComments");
            $.tmpl("CommentTemplate", response.d.Data).appendTo("#dvComments");
        } else {
            $("#lblNoComments").css("display", "block");
        }
        if ($("#dvComments .comment").length < response.d.Parameters.RecordCount) {
            var a = "<a href = 'javascript:;' onclick = 'GetComments(" + (pageIndex + 1) + ", \"" + theme + "\")'><img alt = 'More comments' title = 'More comments' src = '/images/" + theme + "/more.png'/></a>";
            $("#dvMoreComments").html(a);
        } else {
            $("#dvMoreComments").html("");
        }
    });
};
function GetAllComments() {
    $("#dvMoreComments").html(loader);
    AjaxCall("GetAllComments", "{slug: '" + article.Slug + "', approved:" + false + "}", function (response) {
        $("#dvMoreComments").html("");
        $("#dvComments").html("");
        $("#lblNoComments").css("display", "none");
        if (response.d.length > 0) {
            $.template("CommentTemplate", CommentTemplate);
            $.tmpl("CommentTemplate", response.d).appendTo("#dvComments");
        } else {
            $("#lblNoComments").css("display", "block");
        }
    });
};
function ProcessComments(control, action) {
    var commentIds = "";
    switch (control.tagName) {
        case "A":
            commentIds = control.parentNode.getElementsByTagName("input")[0].value;
            processComments('{commentIds: "\'' + commentIds + '\'"}', action, "Do you want to delete this comment?");
            break;
        case "INPUT":
            var count = 0;
            $("#dvComments input[type=checkbox]:checked").each(function () {
                commentIds += "'" + $(this).parent().parent().children("td:eq(1)").children("input").val() + "',";
                count++;
            });
            processComments('{commentIds: "' + commentIds.substr(0, commentIds.length - 1) + '"}', action, String.format("Do you want to delete {0} comments?", count));
            break;
    }
};
function processComments(data, action, message) {
    var method;
    switch (action) {
        case "approve":
            method = "ApproveComments";
            break;
        case "delete":
            if (!confirm(message)) { return; }
            method = "DeleteComments";
            break;
    }
    $("#dvComments").html("");
    AjaxCall(method, data, function () { GetAllComments(); });
};
function VerifySelectedComments() {
    $("#btnApproveComments")[0].disabled = $("#dvComments input[type=checkbox]:checked").length == 0;
    $("#btnDeleteComments")[0].disabled = $("#dvComments input[type=checkbox]:checked").length == 0;
};
function AddComment() {
    var comment = {};
    comment.Author = {};
    var isReply = $("#txtName").length == 0;
//    if (!ValidateControl("dvAddComment")) {
//        return false;
//    }
    if (!isReply) {
        $("#txtEmail")[0].nextSibling.innerHTML = "Required";
        if (!ValidateEmail(jQuery.trim($("#txtEmail").val()))) {
            $("#txtEmail")[0].nextSibling.innerHTML = "Invalid email address.";
            $("#txtEmail")[0].nextSibling.style.visibility = "visible";
           // $("#InvalidEmail").css("visibility", "visible");
            return false;
        }
        $("#txtEmail")[0].nextSibling.style.visibility = "hidden";
        comment.Author.AuthorName = jQuery.trim($("#txtName").val());
        comment.Author.AuthorEmail = jQuery.trim($("#txtEmail").val());
    }
    else {
        if ($("#comments input[type=radio]:checked").length == 0) {
            alert("Please select a comment to reply.");
            return false;
        }
        comment.Author.AuthorName = $("#lblName").html();
        comment.Author.AuthorEmail = $("#lblEmail").html();
        comment.CommentId = $("#comments input[type=radio]:checked").parent().parent().children("td:eq(1)").children("input").val();
    }
    comment.CommentBody = jQuery.trim($("#txtBody").val().HtmlEncode());
    comment.IPAddress = IPAddress;
    var cExpression = typeof (CaptchaExpression) == "undefined" ? "" : CaptchaExpression;
    AjaxCall("AddComment", "{comment: " + JSON.stringify(comment) + ",article:" + JSON.stringify(article) + ", securityCode: '" + jQuery.trim($("#txtSecurityCode").val() + "',captchaExpression: '" + cExpression + "',isReply: " + isReply + "}"), function (response) {
        if (response.d == false) {
            $("#txtSecurityCode")[0].nextSibling.style.visibility = "visible";
        } else {
            if (!isReply) {
                $("#dvAddComment").css("display", "none");
                $(".greenbox").css("display", "block");
            } else {
                GetAllComments();
                $("#dvAddComment input[type=text], textarea").each(function () {
                    $(this).val("");
                });
            }
        }
    });
    return false;
};

//// NEWSLETTER
function SubscribeVisitor() {
    if (ValidateEmail(jQuery.trim($("#txtSubscriberEmail").val()))) {
        DisplaySubscriberMessage(loader, "");
        var newsletterSubscriber = {};
        newsletterSubscriber.VisitorName = $("#txtSubscriberEmail").val().split('@')[0];
        newsletterSubscriber.VisitorEmail = $("#txtSubscriberEmail").val();
        AjaxCall("SubscribeVisitor", "{newsletterSubscriber: " + JSON.stringify(newsletterSubscriber) + "}", OnSubscribeSuccess);
    } else {
        $("#dvSubscriberMessage")[0].className = "error";
        $("#dvSubscriberMessage").html("Invalid email address.");
        $("#dvSubscriberMessage").css("display", "block");
    }
    return false;
};
function OnSubscribeSuccess(r) {
    if (r.d == true) {
        DisplaySubscriberMessage("Thank you! You are now subscribed.", "title");
    } else {
        DisplaySubscriberMessage("You are already subscribed.", "error");
    }
};
function DisplaySubscriberMessage(message, className) {
    $("#dvSubscriberMessage")[0].className = className;
    $("#dvSubscriberMessage").html(message);
    $("#dvSubscriberMessage").css("display", "block");
    $("#btnGo").css("display", "none");
    $("#txtSubscriberEmail").css("display", "none");
};

////SEARCH
function Search() {
    var txtSearch = $("input[id*=Search]");
    if (txtSearch.val() != "" && txtSearch.val() != txtSearch[0].title) {
        window.location = encodeURI(String.format(SearchUrl + "?q={0}", $("input[id*=txtSearch]").val()));
    }
    return false;
};
function CategorizedSearch() {
    var txtSearch = $("#txtSearch1");
    if (txtSearch.val() == "" || txtSearch.val() == txtSearch[0].title) {
        return false;
    }
    return true;
};

////CONTACT
function SendContactEmail() {
    var email = {};
    email.Author = {};
    $("#txtEmail")[0].nextSibling.innerHTML = "Required";
    if (!ValidateEmail(jQuery.trim($("#txtEmail").val()))) {
        $("#txtEmail")[0].nextSibling.innerHTML = "Invalid email address.";
        $("#txtEmail")[0].nextSibling.style.visibility = "visible";
        $("#InvalidEmail").css("visibility", "visible");
        return false;
    }
    $("#txtEmail")[0].nextSibling.style.visibility = "hidden";
    email.Author.AuthorName = jQuery.trim($("#txtName").val());
    email.Author.AuthorEmail = jQuery.trim($("#txtEmail").val());

    email.Subject = jQuery.trim($("#txtSubject").val());
    email.Body = $("#txtBody").val().replace(/\n\r?/g, '<br />'); 
    email.IPAddress = IPAddress;
    AjaxCall("SendContactEmail", "{email: " + JSON.stringify(email) + ", securityCode: '" + jQuery.trim($("#txtSecurityCode").val() + "',captchaExpression: '" + CaptchaExpression + "'}"), function (response) {
        if (response.d == false) {
            $("#txtSecurityCode")[0].nextSibling.style.visibility = "visible";
        } else {
            $("#dvSendEmail").css("display", "none");
            $(".greenbox").css("display", "block");
        }
    });
    return false;
};

///CATEGORIES
function GetCategories() {
    $("#txtCategories").tokenInput('/Handlers/Common.ashx?action=categories', {
        classes: {
            tokenList: "token-input-list-facebook",
            token: "token-input-token-facebook",
            tokenDelete: "token-input-delete-token-facebook",
            selectedToken: "token-input-selected-token-facebook",
            highlightedToken: "token-input-highlighted-token-facebook",
            dropdown: "token-input-dropdown-facebook",
            dropdownItem: "token-input-dropdown-item-facebook",
            dropdownItem2: "token-input-dropdown-item2-facebook",
            selectedDropdownItem: "token-input-selected-dropdown-item-facebook",
            inputToken: "token-input-input-token-facebook"
        }
    });
};
function GrabUrls(text) {
    var urlRegex = /(https?:\/\/[^\s]+)/g;
    return text.replace(urlRegex, '<a href="$1" target = "_blank">$1</a>');
    //return text.replace(urlRegex, function (url) {
    //    return '<a href="' + url + '" target = "_blank">' + url + '</a>';
    //});
};

