﻿// JScript File
var currentSize;
var currentMode = "mybuddies";
var myBuddies = new Array();
var completedText = "";

function BuddyObject()
{
    this.RequestMember = "";
    this.PM_ID = -1;
}

function pageLoaded()
{
    //Add search handler to new search textbox
    if($get("searchBuddy"))
        Sys.UI.DomEvent.addHandler($get("searchBuddy"), "keyup", startSearch);
    
    var mode = getQueryString("mode");
    
    if(mode == "incoming" || mode == "pending" || mode == "ignored")
    {
        $get("myBuddies").style.display = "none";    
        currentMode = mode;    
    }  
    else
    { 
        var mode = getQueryString("mode");
        if(mode != "invite")
        {        
            $get("myBuddies").style.display = "block";
            showIndicator("off");
            var targetSize = window.location.hash;
            if(targetSize.length > 2)
            {
                targetSize = targetSize.substring(1);
                getTargetList(targetSize);
            }
            else
                getTargetList("small");
        }
    }
}

function getTargetList(size)
{
    var smallList = $get("smallList");
    var mediumList = $get("mediumList");
    var largetList = $get("largeList");
    var targetList = $get(size + "List");
    window.location.hash = size;
    
    if(!targetList || targetList.innerHTML.trim().length < 3)
    {
        showIndicator("on");
        currentSize = size;    
        StartRequest(currentSize);   
    }
    else
    {
        smallList.style.display = "none";
        mediumList.style.display = "none";
        largetList.style.display = "none";
        
        targetList.style.display = "block";
    }
    
    if(size != "small")
    {
        
        $get("buddylistSearch").style.visibility = "hidden";
        $get("searchBuddy").disabled = true;
        $get("searchBuddy").style.backgroundColor = "lightgrey";
    }
    else
    {
       
       $get("buddylistSearch").style.visibility = "visible";
       $get("searchBuddy").disabled = false;
       $get("searchBuddy").style.backgroundColor = "white";
    }
}

function StartRequest(size)
{
    //Define a XMLTTP to target Page
    var request = new Sys.Net.WebRequest();
    request.set_httpVerb("GET");
    request.set_url("MyBuddyListItems.aspx?mode=" + size +"&date="+ new Date());
    request.add_completed(onReqCompleted);
    
    var executor = new Sys.Net.XMLHttpExecutor();
    request.set_executor(executor); 
    executor.executeRequest();   
}

function onReqCompleted(exec)
{
    //Get Result from request
    var newDiv = document.createElement("DIV");
    var targetDiv = $get(currentSize + "List");
    var smallList = $get("smallList");
    var mediumList = $get("mediumList");
    var largeList = $get("largeList");
    var content = exec.get_responseData();
    newDiv.innerHTML = content; 
    
    //Define a new DIV to contain target content
    //Find the target element       
    var items = newDiv.getElementsByTagName("DIV");    
    var idx, targetElement;
    for(idx=0; idx<items.length; idx++)
    {
        if(items[idx].id == "buddiesMedium")
        {
            targetElement = items[idx];
            break;
        }
    }
    targetDiv.innerHTML = targetElement.innerHTML;
    
    smallList.style.display = "none"; 
    mediumList.style.display = "none"; 
    largeList.style.display = "none"; 
    targetDiv.style.display = "block";
    
    showIndicator("off");     
}

function showIndicator(action)
{
    if(action == "on")
    {
        $get("loadMsg").style.display = "inline";
    }
    else
    {
        $get("loadMsg").style.display = "none";
    }
}

function startSearch(evt)
{
    var tableDiv = $get("buddyTable");
    var rows = tableDiv.getElementsByTagName("tr");
    var _count = 0;
    
    $get("emptyRow").style.display = "none";
     
    if(evt.charCode != Sys.UI.Key.enter)
    {
        var idx;        
        for(idx=0; idx<rows.length; idx++)
        {
            var enterValue = evt.target.value.toLowerCase();
            
            //If input value is empty, display all rows
            if(enterValue == "")
            {
                if(Sys.Browser.agent == Sys.Browser.InternetExplorer)
                    rows[idx].style.display = "block";
                else
                    rows[idx].style.display = "table-row";
            }
            else
            {                
                var siteLabels = rows[idx].getElementsByTagName("LABEL");
                                
                //Check rowId to verify member id name              
                var rowId = rows[idx].id;
                if(rowId.indexOf("_row") != -1)            
                {
                    var siteName = siteLabels[0].innerHTML.toLowerCase();
                    var prefix = rowId.toLowerCase().substring(0, rowId.indexOf("_row"));
                    var bItems = siteLabels[0].parentNode.parentNode.getElementsByTagName("B");
                    
                    
                    //Check both member name and sitename from input
                    if(prefix.indexOf(enterValue) == -1 && siteName.indexOf(enterValue) == -1)
                    {
                        rows[idx].style.display = "none";
                        
                        var prefix = rowId.substring(0, rowId.indexOf("_row")).toLowerCase();
                        var chbx = $get(prefix + "_buddyCheckBox");
                        chbx.checked = false;
                        bItems[0].style.backgroundColor = "Transparent";                   
                    }
                    else
                    {
                        _count++;
                        if(Sys.Browser.agent == Sys.Browser.InternetExplorer)
                            rows[idx].style.display = "block";
                        else
                            rows[idx].style.display = "table-row";                        
                    }   
                }
            }            
        }                
    }
    if(_count < 1)
    { 
        if(Sys.Browser.agent == Sys.Browser.InternetExplorer) 
            $get("emptyRow").style.display = "block";
        else
            $get("emptyRow").style.display = "table-row";
    }    
    if($get("searchBuddy").value == "")
        $get("emptyRow").style.display = "none";
}
var IsCheck = false;
function selectAllBuddy()
{
    var tableDiv = $get("buddyTable");
    var rows = tableDiv.getElementsByTagName("tr");
    if(rows.length>0)
    {
        var idx;
        for(idx=0; idx<rows.length; idx++)
        {
            var bItems = rows[idx].getElementsByTagName("B");
            var rowId = rows[idx].id;
            if(rowId.indexOf("_row") != -1 && rows[idx].style.display != "none") 
            {
                var prefix = rowId.substring(0, rowId.indexOf("_row")).toLowerCase();
                var chbx = $get(prefix + "_buddyCheckBox");
                if(IsCheck == false)
                {
                    chbx.checked = true;   
                    bItems[0].style.backgroundColor = "Yellow";
                    AddToBuddyList(bItems[0].innerHTML, bItems[0].id);             
                }
                else
                {
                    chbx.checked = false;    
                    bItems[0].style.backgroundColor = "Transparent";
                    RemoveFromBuddyList(bItems[0].innerHTML, bItems[0].id);
                }
            }
        }    
        IsCheck = chbx.checked;
    }    
}

function pickBuddy(memberId, e)
{
    e = e || window.event;
    
    var targetElement;
    if(e.target)
        targetElement = e.target;
    else if(e.srcElement)
        targetElement = e.srcElement;
    
    if(targetElement)
    {
        var chkID = targetElement.id;
        var idTags = targetElement.parentNode.parentNode.getElementsByTagName("b");
        var siteTags = targetElement.parentNode.parentNode.getElementsByTagName("Label");
        var idElement = idTags[0];
        var siteElememnt = siteTags[0];
        
        //var buddyId = chkID.substring(0, chkID.indexOf("_"));        
        var buddyId = memberId;
        
        if(targetElement.checked == true)
        {    
            var _buddy = new BuddyObject();
            _buddy.RequestMember = buddyId;
            _buddy.PM_ID = parseInt(idTags[0].id); 
            
            //Add buddyId to selected list
            if(myBuddies.length == 0)
            {                
                Array.add(myBuddies, _buddy);    
            }    
            else if(Array.indexOf(myBuddies, buddyId) == -1)
                Array.add(myBuddies, _buddy);
                
            idElement.style.backgroundColor = "yellow"; 
        }
        else
        {
            //Remove buddyId from selected list
            if(Array.indexOf(myBuddies, buddyId) != -1)
                Array.removeAt(myBuddies, buddyId);
            
            idElement.style.backgroundColor = "Transparent";
        }
    }
        
}

function AddToBuddyList(aBuddy, id)
{
    var _buddy = new BuddyObject();
    _buddy.RequestMember = aBuddy;
    _buddy.PM_ID = parseInt(id);
    
    if(Array.indexOf(myBuddies, _buddy) == -1)
        Array.add(myBuddies, _buddy);
}

function RemoveFromBuddyList(aBuddy, id)
{
    var _buddy = new BuddyObject();
    _buddy.RequestMember = aBuddy;
    _buddy.PM_ID = parseInt(id);
    
    if(Array.indexOf(myBuddies, _buddy) != -1)
        Array.removeAt(myBuddies, buddyId);
}

function InviteBuddy()
{
    var requestMemberId = getRequestMember();
    var typeControls = document.getElementsByName("rbBuddyType");
    var buddyType = 1;
    if(requestMemberId && requestMemberId != "")
    {
        if(typeControls[1].value == "2") buddyType = 2;
        //GasBuddy_ASPX.BuddyService.InviteBuddy(requestMemberId, buddyType,onSucceeded, onFailed);
        GasBuddy.BuddyService.InviteBuddy(requestMemberId, buddyType,onSucceeded, onFailed);
    }    
}

function onSucceeded(result)
{
    if(result == "1")
    {
        $get("messgPanel").innerHTML = ("Your invitation has been sent to that member. The request will appear in the Pending Buddy Requests section.");
        $get("messgPanel").style.display = "block";
        
    }
    else if(result == "0")
        alert("Sorry, you can not invite yourself as buddy");
    else
        showError("Sorry, That name does not match a registered GasBuddy Member. Please try again.");
    
    setRequestField("");
}

function showMessg(text)
{
    $get("messgPanel").innerHTML = text;
    $get("messgPanel").style.display = "block";
}

function showError(text)
{
    $get("errorPanel").innerHTML = text;
    $get("errorPanel").style.display = "block";
    $get("messgPanel").style,display = "none";
}

function hidePanels()
{
    $get("messgPanel").innerHTML = "";
    $get("errorPanel").innerHTML = "";
    $get("messgPanel").style.display = "none";
    $get("errorPanel").style.display = "none";
}

//////////////////////////////////////////////////////////////////////////////
// Buddy List Management
//////////////////////////////////////////////////////////////////////////////
function acceptBuddy()
{
    hidePanels()
    if(myBuddies.length>0)
    {
        var _buddy = GetBuddyObject(myBuddies[0]);        
        //GasBuddy_ASPX.BuddyService.AcceptBuddy(myBuddies, onAccepted, onFailed);
        GasBuddy.BuddyService.AcceptBuddy(myBuddies, onAccepted, onFailed);
        
        completedText = "The selected buddies have been accepted.";
    }
    else
        showError("Please select a buddy.");
}

function removeBuddy()
{
    hidePanels()
    if(myBuddies.length>0)
    {
         var buddies = new Array();
        for(var i=0;i<myBuddies.length;i++)
        {
            var _buddy = GetBuddyObject(myBuddies[i]);  
            buddies.push(_buddy);
        }
        //GasBuddy_ASPX.BuddyService.DeleteBuddy(buddies, onAccepted, onFailed);      
        GasBuddy.BuddyService.DeleteBuddy(buddies, onAccepted, onFailed);      
        
        completedText = "The selected buddies have been removed.";  
    }
    else
        showError("Please select a buddy.");
}

function ignoreBuddy(doIgnore)
{
    hidePanels()
    if(myBuddies.length>0)
    {        
        var buddies = new Array();
        for(var i=0;i<myBuddies.length;i++)
        {
            var _buddy = GetBuddyObject(myBuddies[i]);  
            buddies.push(_buddy);
        }
        if(doIgnore == false)
        {
            //GasBuddy_ASPX.BuddyService.ignoreBuddy(buddies, false, onAccepted, onFailed);        
            GasBuddy.BuddyService.ignoreBuddy(buddies, false, onAccepted, onFailed);      
              
            completedText = "The selected buddies have been unignored.";
        }
        else
        {
            //GasBuddy_ASPX.BuddyService.ignoreBuddy(buddies, true, onAccepted, onFailed);
            GasBuddy.BuddyService.ignoreBuddy(buddies, true, onAccepted, onFailed);
            
            completedText = "The selected buddies have been ignored.";
        }
    }
    else
        showError("Please select a buddy.");
}

function withdrawRequest()
{
    hidePanels()
    if(myBuddies.length>0)
    {        
        var buddies = new Array();
        for(var i=0;i<myBuddies.length;i++)
        {
            var _buddy = GetBuddyObject(myBuddies[i]);  
            buddies.push(_buddy);
        }
        //GasBuddy_ASPX.BuddyService.withdrawRequest(buddies, onAccepted, onFailed);   
        GasBuddy.BuddyService.withdrawRequest(buddies, onAccepted, onFailed);   
        
        completedText = "The selected buddies have been withdrawn.";    
    }
    else
        showError("Please select a buddy.");
}


function onFailed(error)
{
    alert(error.get_message());
    setRequestField("");
}

function onAccepted(result)
{    
    hidePanels();
            
    switch(currentMode)
    {
        case "incoming":
            updateInList();
            break;
        case "pending":
            updatePeList();
            break;
        case "ignored":
            updateIgList();
            break;
        case "mybuddies":
            updateMyList();
            break;
    }
    
    if(result == true)
    {
        myBuddies = new Array();           
        showMessg(completedText);
    }
    else
        showError("Request rejected");    
}

function GetBuddyObject(myBuddy)
{
     //var _buddy = new GasBuddy_ASPX.BuddyService_buddyObject();
     var _buddy = new GasBuddy.BuddyService_buddyObject();
     _buddy.RequestMember = myBuddy.RequestMember;
     _buddy.PM_ID = myBuddy.PM_ID;
     return _buddy;
}
// Global error handling 
function EndRequestHandler(sender, args)
{
    if(args.get_error() != undefined)
    {
        var errorMessage = args.get_error().message;
        alert("Oops......a problem occured. Please refresh your page and try again."); 
        args.set_errorHandled(true);       
    }
}

var buddyItem;
function SelectBuddyType(e)
{
    var e = e || window.event;
    
    var targetControl;
    if(e.target)
        targetControl = e.target;
    else if(e.srcElement)
        targetControl = e.srcElement;
        
    var control_id = targetControl.id;
    var value = targetControl.value;
    var part = control_id.substring(control_id.indexOf("_")+1);
    var pm_id = part.substring( 0, part.indexOf("_") );
    buddyItem = part.substring( part.indexOf("_")+1 );
 
    $get("messgPanel").innerHTML = "Saving your setting. Please wait....";
    $get("messgPanel").style.display = "block"; 
        
    //GasBuddy_ASPX.BuddyService.SeBuddyType(buddyItem, value, onSetTypeCompleted);  
    GasBuddy.BuddyService.SeBuddyType(buddyItem, value, onSetTypeCompleted);  
}

function onSetTypeCompleted(result)
{
    if(result == true)
    {
        $get("messgPanel").innerHTML = "The type of your buddy '" + buddyItem + "' has been changed.";
        $get("messgPanel").style.display = "block";        
    }
    else
        alert("Oops, a problem occured.");
}

function showEdit(e)
{
    e = e || window.event;
    var target;
    if(e.target)
        target = e.target;
    else if(e.srcElement)
        target = e.srcElement;
        
    if(target)
    {
        var bounds = Sys.UI.DomElement.getBounds(target);
        target.style.display = "none";
        var textbox = $get("profile_text_edit");
        textbox.style.display = "block";
        textbox.style.left = bounds.x + "px";
        textbox.style.top = bounds.y + "px";
                
    }
}

function hideButton(element) {
    if(element.value=="") {
        //document.getElementById('btn_whiteboard').style.display='none';
        element.value = original_text;
        is_changed = false;
        document.getElementById('txt_message').style.color = "gray";
    }
}
function showButton(element) {
    //document.getElementById('btn_whiteboard').style.display='inline';
    document.getElementById('txt_message').style.color = "black";
    if(is_changed==false) element.value = "";
}
function textChange() {
    is_changed = true;            
}
function add_message() {
    var txt_message = document.getElementById("txt_message");            
    var content = txt_message.value;
    if(content=="") hideButton(txt_message);
    else {
        GB_Community.WhiteBoardControl.AddNewMessage(username, content, onAddMessageCompleted);
        document.getElementById("loading_message").style.display = "inline";
    }            
}
function onAddMessageCompleted(result) {
    var txt_message = document.getElementById("txt_message");                
    var message = result.value;  
    var content; 
    var _id = -1;
    
    if(result.value) {
        _id = result.value.ID;
        content = result.value.Message;
    }
    
    if(content) {
        var src = document.getElementById("user_profile_pic").src;
        //***********************Trent added on 7/19/2010 When a member with no profile pic posts on the white board it shows an error image. This will show the generic profile image.
        if (src=='http://66.70.86.94//FetchImage.ashx?key=uotMkoQ5z4i636QieVdcLQ%3d%3d&id=2wP4G%2bLoHSs%3d'){
        src='/images/default_avatar_small.gif';
        }
        var htmlContent = render_message_item(_id, content, src, visitor, 'a moment ago');
        
        var _html = document.getElementById("message_list").innerHTML;
        document.getElementById("message_list").innerHTML = htmlContent + _html;
        document.getElementById("loading_message").style.display = "none";
        
        txt_message.value = "";
        hideButton(txt_message);
        hideEmptyPanel();
     }
     else window.location = "/Mem_log_in.aspx?redirect=" + base_path;
}
var current_id = "";
function delete_message(id) {
    if(confirm("Are you sure to delete this message?")) {
        document.getElementById("wItem_"+id).innerHTML = "<p style='padding:10px;color:gray'>Removing this message...</p>";
        
        if(username.toLowerCase()==visitor.toLowerCase()) 
            GB_Community.WhiteBoardControl.DeleteMyMessage(id.toString(), onDeleteWhiteboardCompleted);
        else 
            GB_Community.WhiteBoardControl.DeleteOthersMessage(id.toString(), username, onDeleteWhiteboardCompleted);
        
        current_id = id;
        setTimeout(hide_message, 500);
    }        
}
function render_message_item(_id, content, src, member_id, dt) {
    var htmlContent = "<div class='whiteboard_item' id='wItem_" + _id + "' onmouseover='show_opt_buttons(\""+ _id +"\")'";
    htmlContent += " onmouseout='hide_opt_buttons(\"" + _id + "\")'>";
    htmlContent += '<img src="' + src + '" />';
    htmlContent += '<div class="whiteboard_content">';
    htmlContent += 'by <b><a id="visitor_'+ _id +'" href="/Profile.aspx?member=' + member_id + '">' + member_id + '</a></b>  ';
    htmlContent += '<span>' + dt + '</span><br/>';
    htmlContent += '<p>' + content + '</p></div>';
    htmlContent += '<div id="opt_'+ _id +'" class="opt">';
    htmlContent += '<a href="javascript:void(0)" onclick="delete_message('+ _id +')">delete</a>';
    htmlContent += '<a href="javascript:void(0)" onclick=\'block_person(\"' + member_id + '\",'+ _id + ')\' title="block this person">block</a>';        
    htmlContent += "</div></div>";
    return htmlContent;
}
function onDeleteWhiteboardCompleted(result)
{
    
}
function hide_message() {
    document.getElementById("wItem_"+current_id).style.display = "none";
}
function show_opt_buttons(id) {
    var _user = document.getElementById("visitor_"+id).innerHTML;
    
    if(username.toLowerCase()==visitor.toLowerCase() || visitor.toLowerCase()==_user.toLowerCase())
        document.getElementById("opt_" + id).style.display='block';
}
function hide_opt_buttons(id) {
    document.getElementById("opt_" + id).style.display='none';
}
function hideEmptyPanel()
{
    var emptyPanel = document.getElementById(emptyPanelId);
    if(emptyPanel) emptyPanel.style.display = "none";
}
function refresh_messages(page_id, element)
{    
    GB_Community.WhiteBoardControl.LoadMessages(page_id.toString(), username, onLoadMessagesCompleted);
    
    reload_whiteboard();    
    element.style.color = "white";
    element.style.backgroundColor = "gray";
    element.style.textDecoration = "none";
}
function onLoadMessagesCompleted(result)
{
    if(result.value)
    {
        var messages = result.value;
        render_whiteboard(messages);      
    }
}
function whiteboard_setting()
{   
    document.getElementById("setting_panel").style.display="block";
}
function submit_whiteboard_setting()
{
    var rd1 = document.getElementById("whiteboardsetting_yes");
    var choice = "";
    if(rd1.checked) choice = 1;
    else choice = 2;
    
    GB_Community.WhiteBoardControl.ChangeMySetting(choice, onSettingCompleted);
}
function onSettingCompleted(result)
{
    if(result.value)
        document.getElementById("setting_panel").style.display = "none";
    else
        document.getElementById("setting_panel").style.display = "block"; 
}
function block_person(visitor, id)
{
    if(confirm("Are you sure to block " + visitor + " from writing to your whiteboard?"))
    {        
        document.getElementById("message_list").innerHTML = "<div class='whiteboard_item'>Reloading messages ...</div>";
        add_to_block_list(visitor);
        GB_Community.WhiteBoardControl.BlockMember(visitor, onBlockCompleted);
    }
}
function reload_whiteboard()
{
    document.getElementById("message_list").innerHTML = "<div class='whiteboard_item'>Reloading messages ...</div>";
    window.location.hash = "whiteboard";    
    
    var footer = document.getElementById("whiteboard_footer");
    var items = footer.getElementsByTagName("a");
    for(var i=0;i<items.length;i++) {
        items[i].style.color = "";
        items[i].style.backgroundColor = "";
        items[i].style.textDecoration = "underline";
    } 
}
function render_whiteboard(messages)
{
    if(messages.length>0)
    {
        var list = "";
        for(var i=0;i<messages.length;i++)
        {
            var message = messages[i];            
            var item = render_message_item(message.ID, message.Message, message.ImagePath, message.Visitor, message.CreatedAt);
            list += item;
        }
        document.getElementById("message_list").innerHTML = list;  
    }
    else document.getElementById("message_list").innerHTML = "<div class='whiteboard_item'>No message has been left yet</div>";
}
function add_to_block_list(visitor)
{
    var item = "<span onclick='unblock_person(\"" + visitor + "\", this)'>";
    item += visitor;
    item += " <a href='javascript:void(0)'><img src='/images/btn_close.jpg'/></a></span>"; 
    document.getElementById("blocked_members").innerHTML = document.getElementById("blocked_members").innerHTML + item;                        
}
function onBlockCompleted(result)
{    
    if(result.value)
    {
        var messages = result.value;
        reload_whiteboard();
        render_whiteboard(messages);
    }
}
function unblock_person(visitor, element)
{
    if(confirm("Are you sure to unblock " + visitor + "?"))
    {
        element.style.display = "none";
        document.getElementById("message_list").innerHTML = "<div class='whiteboard_item'>Reloading messages ...</div>";
        
        GB_Community.WhiteBoardControl.UnblockMember(visitor, onBlockCompleted);
    }
}
