﻿/// <reference path="jquery-1.2.6-vsdoc.js" />
function follow(userid) {
    var lnk = $("#lnkFollow" + userid);

    if (lnk.attr("lnktype") == "unfollow")
        return unfollow(userid);
    lnk.hide();
    var url = "/user/follow";
    $.ajax({
        type: "POST",
        dataType: "json",
        url: url,
        data: { userid: userid },
        success: function(result) {
            if (result.success == true) {
                lnk.addClass("hilite").fadeOut(1000, function() {
                    lnk.fadeIn(1000, function() { lnk.removeClass("hilite") });
                    lnk.html("un-follow");
                    lnk.attr("lnktype", "unfollow");
                });

            }
            else {
                lnk.fadeIn(1000, function() { lnk.removeClass("hilite") });
                alert(result.errorMessage);
            }
        },
        error: function(error) {
            alert(result.errorMessage);
        }
    });
}
function unfollow(userid) {
    var lnk = $("#lnkFollow" + userid);

    if (lnk.attr("lnktype") == "follow")
        return follow(userid);
    lnk.hide();
    var url = "/user/unfollow";
    $.ajax({
        type: "POST",
        dataType: "json",
        url: url,
        data: { userid: userid },
        success: function(result) {
            if (result.success == true) {
                lnk.addClass("hilite").fadeOut(1000, function() {
                    lnk.fadeIn(1000, function() { lnk.removeClass("hilite") });
                    lnk.html("follow");
                    lnk.attr("lnktype", "follow");
                });

            }
            else {
                lnk.fadeIn(1000, function() { lnk.removeClass("hilite") });
                alert(result.errorMessage);
            }
        },
        error: function(error) {
            alert(result.errorMessage);
        }
    });
}

var btn = {
    init: function() {
        if (!document.getElementById || !document.createElement || !document.appendChild) return false;
        as = btn.getElementsByClassName('btn(.*)');
        for (i = 0; i < as.length; i++) {
            if (as[i].tagName.toLowerCase() == "input" && (as[i].type.toLowerCase() == "submit" || as[i].type.toLowerCase() == "button")) {
                var a1 = document.createElement("a");
                if (as[i].type.toLowerCase() == "submit") {
                    //add submit functionality
                    btn.addEvent(a1, 'click', function() {
                        var form = btn.findForm(this);
                        form.submit();
                    });
                }
                a1.appendChild(document.createTextNode(as[i].value));
                a1.className = as[i].className;
                a1.id = as[i].id;
                a1.style.width = as[i].style.width;
                a1.onclick = as[i].onclick;
                as[i] = as[i].parentNode.replaceChild(a1, as[i]);
                as[i] = a1;

            }
            else if (as[i].tagName == "A") {
                var tt = as[i].childNodes;
            }
            else { return false };
            var i1 = document.createElement('i');
            var i2 = document.createElement('i');
            var s1 = document.createElement('span');
            var s2 = document.createElement('span');
            s1.appendChild(i1);
            s1.appendChild(s2);
            while (as[i].firstChild) {
                s1.appendChild(as[i].firstChild);
            }
            as[i].appendChild(s1);
            as[i] = as[i].insertBefore(i2, s1);
        }
        // The following lines submits the form if the button id is "submit_btn"
        btn.addEvent(document.getElementById('submit_btn'), 'click', function() {
            var form = btn.findForm(this);
            form.submit();
        });
        // The following lines resets the form if the button id is "reset_btn"
        btn.addEvent(document.getElementById('reset_btn'), 'click', function() {
            var form = btn.findForm(this);
            form.reset();
        });
    },
    findForm: function(f) {
        while (f.tagName != "FORM") {
            f = f.parentNode;
        }
        return f;
    },
    addEvent: function(obj, type, fn) {
        if (obj == null) return false;
        if (obj.addEventListener) {
            obj.addEventListener(type, fn, false);
        }
        else if (obj.attachEvent) {
            obj["e" + type + fn] = fn;
            obj[type + fn] = function() { obj["e" + type + fn](window.event); }
            obj.attachEvent("on" + type, obj[type + fn]);
        }
    },
    getElementsByClassName: function(className, tag, elm) {
        var testClass = new RegExp("(^|\s)" + className + "(\s|$)");
        var tag = tag || "*";
        var elm = elm || document;
        var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
        var returnElements = [];
        var current;
        var length = elements.length;
        for (var i = 0; i < length; i++) {
            current = elements[i];
            if (testClass.test(current.className)) {
                returnElements.push(current);
            }
        }
        return returnElements;
    }
}

function deletemessage(url, msgid) {
    if (confirm("Are you sure you want to delete this message?")) {
        $("#msgview-" + msgid).addClass("hilite").fadeOut(1000);
        $.ajax({
            type: "POST",
            dataType: "json",
            url: url,
            data: { messageId: msgid },
            success: function(result) {
                if (result.success) {
                    $("#msgview-" + msgid).addClass("hilite").fadeOut(1000);
                    if (result.refresh) {
                        window.location.reload();
                    }
                } else {
                    $("#msgview-" + msgid).removeClass("hilite").fadeIn(1000);
                    alert(result.errorMessage);
                }
            },
            error: function(result, status) {
                $("#msgview-" + msgid).removeClass("hilite").fadeIn(1000);
                alert(result.errorMessage);
            }
        });
    }
}

function onmessage(id) {
    var con = "#msgview-" + id;
    var icons = "#msgview-" + id + " .messageicons";
    $(con).addClass("msghover");
    $(icons).show();
}

function outofmessage(id) {
    var con = "#msgview-" + id;
    var icons = "#msgview-" + id + " .messageicons";
    $(con).removeClass("msghover");
    $(icons).hide();
}

function showPrivateReply(msgid, recipient, isFollower, isBlocked) {
    if (isFollower == "false") {
        alert(recipient + " is not following you.  You can only send private messages to your followers.");
        return;
    }
    if (isBlocked == "true") {
        alert("This user has been blocked by the administrator");
        return;
    }
    $("#recipients").val(recipient);
    $("#message").focus();
    parentid = msgid;
}
function deletePrivateMessage(msgid) {
    if (confirm("Are you sure you want to delete this message?")) {
        $.ajax({
            type: "POST",
            dataType: "json",
            url: "/privatemessages/delete",
            data: { messageId: msgid },
            success: function(result) {
                if (result.success) {
                    $("#msgview-" + msgid).addClass("hilite").fadeOut(1000);
                } else {
                    alert(result.errorMessage);
                }
            },
            error: function(result, status) {
                alert(result.errorMessage);
            }
        });
    }
}

function search() {
    window.location.href = "/search/" + $("#txtsearch").val();
}

function detectFlash() {
    return DetectFlashVer(9, 0, 0);
    //pluginFound = detectPlugin('Shockwave', 'Flash');
    //return pluginFound;
}

function detectPlugin() {
    // allow for multiple checks in a single pass
    var daPlugins = detectPlugin.arguments;
    // consider pluginFound to be false until proven true
    var pluginFound = false;
    // if plugins array is there and not fake
    if (navigator.plugins && navigator.plugins.length > 0) {
        var pluginsArrayLength = navigator.plugins.length;
        // for each plugin...
        for (pluginsArrayCounter = 0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++) {
            // loop through all desired names and check each against the current plugin name
            var numFound = 0;
            for (namesCounter = 0; namesCounter < daPlugins.length; namesCounter++) {
                // if desired plugin name is found in either plugin name or description
                if ((navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) ||
					(navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0)) {
                    // this name was found
                    numFound++;
                }
            }
            // now that we have checked all the required names against this one plugin,
            // if the number we found matches the total number provided then we were successful
            if (numFound == daPlugins.length) {
                pluginFound = true;
                // if we've found the plugin, we can stop looking through at the rest of the plugins
                break;
            }
        }
    }
    return pluginFound;
} // detectPlugin

function closeFeedbackBox() {
    $.fn.fancybox.close();
}

$(document).ready(function() {
    btn.init();
    $("a.feedbacklink").fancybox({
        'hideOnContentClick': true,
        'overlayShow': true,
        'frameWidth': 370,
        'frameHeight': 530
    });
    $("a.imglink").fancybox({
        'hideOnContentClick': true,
        'overlayShow': true,
        'zoomSpeedOut': 0
    });
    $("a.vidlink").fancybox({
        'hideOnContentClick': true,
        'overlayShow': true,
        'zoomSpeedIn': 0,
        'zoomSpeedOut': 0,
        'frameWidth': 425,
        'frameHeight': 344
    });
    $("a.replylink").fancybox({
        'hideOnContentClick': false,
        'overlayShow': true,
        'zoomSpeedIn': 0,
        'zoomSpeedOut': 0,
        'overlayOpacity': 0.8
    });

    $('a.usernamelink,a.gravatarlink').cluetip({
            showTitle: true,
            sticky: false,
            closePosition: 'title',
            arrows: true,
            cluetipClass: 'jtip',
            mouseOutClose: true
    });

    $('a.messagelink,a.twitteruser').cluetip({
        showTitle: true,
        width: 425,
        sticky: false,
        closePosition: 'title',
        arrows: true,
        cluetipClass: 'jtip',
        mouseOutClose: true
    });
});




// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion() {
    var version;
    var axo;
    var e;

    // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

    try {
        // version will be set for 7.X or greater players
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
        version = axo.GetVariable("$version");
    } catch (e) {
    }

    if (!version) {
        try {
            // version will be set for 6.X players only
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

            // installed player is some revision of 6.0
            // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
            // so we have to be careful. 

            // default to the first public version
            version = "WIN 6,0,21,0";

            // throws if AllowScripAccess does not exist (introduced in 6.0r47)		
            axo.AllowScriptAccess = "always";

            // safe to call for 6.0r47 or greater
            version = axo.GetVariable("$version");

        } catch (e) {
        }
    }

    if (!version) {
        try {
            // version will be set for 4.X or 5.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = axo.GetVariable("$version");
        } catch (e) {
        }
    }

    if (!version) {
        try {
            // version will be set for 3.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
            version = "WIN 3,0,18,0";
        } catch (e) {
        }
    }

    if (!version) {
        try {
            // version will be set for 2.X player
            axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            version = "WIN 2,0,0,11";
        } catch (e) {
            version = -1;
        }
    }

    return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer() {
    // NS/Opera version >= 3 check for Flash plugin in plugin array
    var flashVer = -1;

    if (navigator.plugins != null && navigator.plugins.length > 0) {
        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
            var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
            var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
            var descArray = flashDescription.split(" ");
            var tempArrayMajor = descArray[2].split(".");
            var versionMajor = tempArrayMajor[0];
            var versionMinor = tempArrayMajor[1];
            var versionRevision = descArray[3];
            if (versionRevision == "") {
                versionRevision = descArray[4];
            }
            if (versionRevision[0] == "d") {
                versionRevision = versionRevision.substring(1);
            } else if (versionRevision[0] == "r") {
                versionRevision = versionRevision.substring(1);
                if (versionRevision.indexOf("d") > 0) {
                    versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
                }
            }
            var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
            //alert("flashVer=" + flashVer);
        }
    }
    // MSN/WebTV 2.6 supports Flash 4
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
    // WebTV 2.5 supports Flash 3
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
    // older WebTV supports Flash 2
    else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
    else if (isIE && isWin && !isOpera) {
        flashVer = ControlVersion();
    }
    return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) {
    versionStr = GetSwfVer();
    if (versionStr == -1) {
        return false;
    } else if (versionStr != 0) {
        if (isIE && isWin && !isOpera) {
            // Given "WIN 2,0,0,11"
            tempArray = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
            tempString = tempArray[1]; 		// "2,0,0,11"
            versionArray = tempString.split(","); // ['2', '0', '0', '11']
        } else {
            versionArray = versionStr.split(".");
        }
        var versionMajor = versionArray[0];
        var versionMinor = versionArray[1];
        var versionRevision = versionArray[2];

        // is the major.revision >= requested major.revision AND the minor version >= requested minor
        if (versionMajor > parseFloat(reqMajorVer)) {
            return true;
        } else if (versionMajor == parseFloat(reqMajorVer)) {
            if (versionMinor > parseFloat(reqMinorVer))
                return true;
            else if (versionMinor == parseFloat(reqMinorVer)) {
                if (versionRevision >= parseFloat(reqRevision))
                    return true;
            }
        }
        return false;
    }
}

function AC_AddExtension(src, ext) {
    if (src.indexOf('?') != -1)
        return src.replace(/\?/, ext + '?');
    else
        return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) {
    var str = '';
    if (isIE && isWin && !isOpera) {
        str += '<object ';
        for (var i in objAttrs)
            str += i + '="' + objAttrs[i] + '" ';
        for (var i in params)
            str += '><param name="' + i + '" value="' + params[i] + '" /> ';
        str += '></object>';
    } else {
        str += '<embed ';
        for (var i in embedAttrs)
            str += i + '="' + embedAttrs[i] + '" ';
        str += '> </embed>';
    }

    document.write(str);
}

function AC_FL_RunContent() {
    var ret =
    AC_GetArgs
    (arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType) {
    var ret = new Object();
    ret.embedAttrs = new Object();
    ret.params = new Object();
    ret.objAttrs = new Object();
    for (var i = 0; i < args.length; i = i + 2) {
        var currArg = args[i].toLowerCase();

        switch (currArg) {
            case "classid":
                break;
            case "pluginspage":
                ret.embedAttrs[args[i]] = args[i + 1];
                break;
            case "src":
            case "movie":
                args[i + 1] = AC_AddExtension(args[i + 1], ext);
                ret.embedAttrs["src"] = args[i + 1];
                ret.params[srcParamName] = args[i + 1];
                break;
            case "onafterupdate":
            case "onbeforeupdate":
            case "onblur":
            case "oncellchange":
            case "onclick":
            case "ondblClick":
            case "ondrag":
            case "ondragend":
            case "ondragenter":
            case "ondragleave":
            case "ondragover":
            case "ondrop":
            case "onfinish":
            case "onfocus":
            case "onhelp":
            case "onmousedown":
            case "onmouseup":
            case "onmouseover":
            case "onmousemove":
            case "onmouseout":
            case "onkeypress":
            case "onkeydown":
            case "onkeyup":
            case "onload":
            case "onlosecapture":
            case "onpropertychange":
            case "onreadystatechange":
            case "onrowsdelete":
            case "onrowenter":
            case "onrowexit":
            case "onrowsinserted":
            case "onstart":
            case "onscroll":
            case "onbeforeeditfocus":
            case "onactivate":
            case "onbeforedeactivate":
            case "ondeactivate":
            case "type":
            case "codebase":
                ret.objAttrs[args[i]] = args[i + 1];
                break;
            case "id":
            case "width":
            case "height":
            case "align":
            case "vspace":
            case "hspace":
            case "class":
            case "title":
            case "accesskey":
            case "name":
            case "tabindex":
                ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i + 1];
                break;
            default:
                ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i + 1];
        }
    }
    ret.objAttrs["classid"] = classid;
    if (mimeType) ret.embedAttrs["type"] = mimeType;
    return ret;
}


jQuery.query = function() {
    var r = {};
    var q = location.search;
    q = q.replace(/^\?/, ''); // remove the leading ?	
    q = q.replace(/\&$/, ''); // remove the trailing & 
    jQuery.each(q.split('&'), function() {
        var key = this.split('=')[0];
        var val = this.split('=')[1];
        // convert floats 
        if (/^[0-9.]+$/.test(val))
            val = parseFloat(val);
        // ingnore empty values 
        if (val)
            r[key] = val;
    });
    return r;
}; 