﻿var url = WebRequestUrl();

/// Function: Gets the web request url
function WebRequestUrl() {
    var loc = document.location.href;
    loc = loc.substring(0, loc.lastIndexOf('/'));
    loc = loc.substring(0, loc.lastIndexOf('/'));

    return loc + "/WebRequest.aspx";
}

/// Function: Creates a HTTPRequestObject for use in AJAX functions (cross-browser compatible) 
function GetHTTPRequestObject() {
    var request = false;
    try {
        request = new XMLHttpRequest();
    } catch (trymicrosoft) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (othermicrosoft) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                request = false;
            }
        }
    }
    return request;
}

/// Function: Toggles item description to show full description or summary
/// Parameters:
/// cur <object> - The dom element representing the clickable link
function toggleDescription(cur) {

    var show = (cur.innerHTML == 'more');

    var summary = cur.parentNode.getElementsByTagName('div')[0];
    var description = cur.parentNode.getElementsByTagName('div')[1];

    summary.style.display = show ? 'none' : 'block';
    description.style.display = show ? 'block' : 'none';
    cur.innerHTML = show ? 'less' : 'more';
}

/// Function: Makes the AJAX call to remove favorite item and updates ui
function RemoveFavorite(ResourceID) {
    var request = GetHTTPRequestObject();
    var querystring = "?request=RemoveFavorite&&ResourceId=" + ResourceID ;

    if (request) {
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                UpdateFavoriteUI(false, ResourceID);
            }
        }
        request.open("POST", url + querystring, true);
        request.send("");
    }
}

/// Function: Makes the AJAX call to select favorite and updates ui
function SelectFavorite(ResourceID) {

    var request = GetHTTPRequestObject();
    var querystring = "?request=FavoriteItem&&ResourceId=" + ResourceID;

    if (request) {
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                UpdateFavoriteUI(true, ResourceID);
            }
        }
        request.open("POST", url + querystring, true);
        request.send("");
    }
}

/// Function: Makes the AJAX call to update item rating and updates ui
function UpdateRating(rating, ResourceID, SiteID) {
    var request = GetHTTPRequestObject();
    var querystring = "?request=UpdateRating&&ResourceId=" + ResourceID + "&&Rating=" + rating + "&&SiteId=" + SiteID;

    if (request) {
        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                UpdateRatingUI(rating, ResourceID);
            }
        }
        request.open("POST", url + querystring, true);
        request.send("");
    }
}

/// Function: Updates ui for item rating
function UpdateRatingUI(rating, ResourceID) {

    var dspRating = document.getElementById('itemRating' + ResourceID).getElementsByTagName('ul')[0];
    var dspClass;
    switch (rating) {
        case 1: dspClass = "rating onestar"; break;
        case 2: dspClass = "rating twostar"; break;
        case 3: dspClass = "rating threestar"; break;
        case 4: dspClass = "rating fourstar"; break;
        case 5: dspClass = "rating fivestar"; break;
        default: dspClass = "rating nostar";
    }

    dspRating.className = dspClass;

    if (rating != 0) {
        var links = dspRating.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
            links[i].onclick = "";
        }
    }
}

/// Function: Updates UI for item favorite
function UpdateFavoriteUI(itemFaved, ResourceID) {

    var divFavOptions = document.getElementById('itemFav' + ResourceID);
    
    if(divFavOptions!=null)
    {
        divFavOptions = divFavOptions.getElementsByTagName('div');
        var divAddFav = divFavOptions[1];
        var divRemoveFav = divFavOptions[0];

        if (itemFaved) {
            divRemoveFav.style.display = 'block';
            divAddFav.style.display = 'none';
        }
        else {
            divRemoveFav.style.display = 'none';
            divAddFav.style.display = 'block';
        }
    }
}

/// Function: Updates resource usage for specified resource
function UpdateResourceUsage(ResourceID, SiteID) {
    var request = GetHTTPRequestObject();
    var querystring = "?request=ResourceUsed&&ResourceId=" + ResourceID + "&&SiteId=" + SiteID; ;

    if (request) {
        request.open("POST", url + querystring, true);
        request.send("");
    }
}

var disablePreview = false;
var currentPreview = null;
var currentSelectedItem = null;

/// Function: Toggles image preview display
function TogglePreview(eleId, imgUrl) {
    var eleItem = document.getElementById(eleId);
    var selected = eleItem.className.indexOf('Selected') > 0;
    SetImagePreviewDisplay(eleId, imgUrl, !selected);
}

function SetImagePreviewDisplay(eleId, imgUrl, selected) {
    if (eleId) {
        var eleItem = document.getElementById(eleId);
        var elePreview = document.getElementById(eleId + 'Preview');

        if (!selected) {

            SetSelectedResourceItem(eleItem, false);

            if (elePreview)
                elePreview.style.display = 'none';

            currentPreview = null;
            currentSelectedItem = null;
        } else {
            if (!disablePreview) {
                // Create preview image if it does not exist
                if (!elePreview) {
                    elePreview = CreatePreviewImage(eleItem, imgUrl);
                }

                // Hide any previously selected items
                if (currentPreview)
                    currentPreview.style.display = 'none';
                if (currentSelectedItem)
                    SetSelectedResourceItem(currentSelectedItem, false);

                // Show
                elePreview.style.display = 'inline';
                SetSelectedResourceItem(eleItem, true);

                // Update placeholders for current items
                currentPreview = elePreview;
                currentSelectedItem = eleItem;
            }
        }
    }
}

function CreatePreviewImage(eleItem, imgUrl) {
    var elePreview = document.createElement('div');
    elePreview.id = eleItem.id + 'Preview';
    elePreview.className = 'PreviewWrapper';
    elePreview.innerHTML = "<span class='PreviewImage'><img src='" + imgUrl + "' /></span>";
    eleItem.insertBefore(elePreview, eleItem.childNodes[2]);
    return elePreview;
}

function SetSelectedResourceItem(eleItem, selected) {
    if (selected) {
        eleItem.className = eleItem.className + ' Selected';
    }
    else {
        eleItem.className = eleItem.className.replace(/ Selected/i, "");
    }
}

