var $SearchHandlerPath = '';
var $ProjectHandlerPath = '';
var $PlaylistHandlerPath = '';
var $BrowseHandlerPath = '';
var $LicensesHandlerPath = '';
var $CDNGeneralMusicLocation = '';
var $CDNFilesRootPath = '';
var $SearchPathForPostBack = '';
var $ManageBuddiesPath = '';
var $PlaylistPathForRedirect = '';
var $ProjectsPath ='';
var $CurrencySymbol = '';
var $CookieTimeOut = '5';
var $CurrentUserRole = '4';
var $CommonHandlerPath = '';
var $DownloadPageLocation = '';
var $BrowsedResultsLocation = '';
var $DisabledButtonsToolTipMessage = '';
var $RetrievingDataErrorMessage = '';

function setSearchHandlerPath(fPath) {
    $SearchHandlerPath = fPath;
}

function setProjectHandlerPath(fPath) {
    $ProjectHandlerPath = fPath;
}

function setPlaylistHandlerPath(fPath) {
    $PlaylistHandlerPath = fPath;
}

function setBrowseHandlerPath(fPath) {
    $BrowseHandlerPath = fPath;
}

function setLicensesHandlerPath(fPath) {
    $LicensesHandlerPath = fPath;
}

function setCookieTimeOut(timeOut) {
    $CookieTimeOut = timeOut;
}

function setGeneralMusicLocation(generalMusicLocation) {
    $CDNGeneralMusicLocation = generalMusicLocation;
}

function setCDNFilesRootPath(filesRootPath) {
    $CDNFilesRootPath = filesRootPath;
}

function setCurrentUserRole(currentUserRole) {
    $CurrentUserRole = currentUserRole;
}

function setSearchPathForPostBack(searchPath) {
    $SearchPathForPostBack = searchPath;
}

function setManageBuddiesPath(manageBuddies) {
    $ManageBuddiesPath = manageBuddies;
}

function setProjectsPath(projects) {
    $ProjectsPath = projects;
}

function setPlaylistPathForRedirect(playlistPath) {
    $PlaylistPathForRedirect = playlistPath;
}

function setCurrencySymbol(currencySymbol) {
    $CurrencySymbol = currencySymbol;
}

function setCommonHandlerPath(commonHandlerPath) {
    $CommonHandlerPath = commonHandlerPath;
}

function setDownloadPageLocation(downloadPageLocation) {
    $DownloadPageLocation = downloadPageLocation;
}

function setBrowsedResultsLocation(browsedResultsLocation) {
    $BrowsedResultsLocation = browsedResultsLocation;
}


function setDisabledButtonsToolTipMessage(toolTipMesage) {
    $DisabledButtonsToolTipMessage = toolTipMesage;
}

function setRetrievingDataErrorMessage(errMsg) {
    $RetrievingDataErrorMessage = errMsg;
}

﻿//Code to disable controls based on the role of the user logged in
var $UserRolePolicy = new Array();
$UserRolePolicy['1'] = [];
$UserRolePolicy['2'] = [];
$UserRolePolicy['3'] = ['add', 'dwnload', 'draggable'];
$UserRolePolicy['4'] = ['add', 'dwnload', 'draggable'];

var $sender = null;
var $event = null;

//var jQuery = jQuery.noConflict();
jQuery(document).ready(function() {
    try {
            setControlSecurity();
    }catch (err){ }
});


function setControlSecurity() {
    jQuery($UserRolePolicy[$CurrentUserRole]).each(function() {
        if (this == 'draggable') {
            jQuery(".result .result_item a.main").draggable('destroy');
            jQuery(".cdv_moreinfo .sub_result a.main").draggable('destroy');
            jQuery(".results_grd .cd_view").draggable('destroy');
            jQuery(".browse_item a.main").draggable('destroy');
            jQuery(".browse_list_item a.main").draggable('destroy');
            jQuery(".playlist_item a.main").draggable('destroy');
            jQuery(".tracklist_box .track .title").draggable('destroy');

        }
        else {
            jQuery('.' + this).each(function() {
                var tmpObj = jQuery(this);
                tmpObj.attr("disabled", "disabled");
                tmpObj.addClass("disabled");
                var titleValue = jQuery(this).attr("title");
                if ((titleValue != '') && (titleValue.indexOf($DisabledButtonsToolTipMessage) < 0)) {
                    titleValue += ' ' + $DisabledButtonsToolTipMessage;
                    tmpObj.attr("title", titleValue);
                }

                //tmpObj.die("click");
                tmpObj.unbind('click').click(function(event) {
                    // this will unbind all the events assigned for click before
                    event.stopPropagation();
                    return false;
                });
            });
        }
    });
}

// JavaScript Document
jQuery(document).ready(function() {
    if ((/browse.aspx/.test(window.location.href) == false) && (/browsed-results.aspx/.test(window.location.href) == false)) {
        setCookieParameter("browse_cookie", "SelectedCategoryId", 0);
        setCookieParameter("browse_cookie", "SelectedCatalogNameId", 0);
    }
    if (navigator.userAgent.indexOf("MSIE 6") != -1) {
        // Big frame fix
        jQuery('.fix-z-index').bgiframe();

        // Results tracks
        jQuery("#resultsBox .result_item").live("mouseover", function() {
            jQuery("#resultsBox .result_item a.main").removeClass("active");
            jQuery("#resultsBox .result_item div.actions").hide();
            jQuery("a.main", this).addClass("active");
            jQuery("div.actions", this).show();
        });

        // Result track versions
        jQuery(".tracklist_box .track").live("mouseover", function() {
            jQuery(".tracklist_box .track").removeClass("active");
            jQuery(this).addClass("active");
        });

        // Themed play list
        jQuery(".playlist_item a.main").live('mouseover', function() {
            jQuery(".playlist_item a.main").removeClass("active");
            jQuery(this).addClass("active");
        });

        jQuery(".browse_list_item a.main").live('mouseover', function() {
            jQuery(".browse_list_item .actions").hide();
            jQuery(".browse_list_item a.main").removeClass("active");
            jQuery(this).addClass("active");
            jQuery(this).parent().find(".actions").show();
            jQuery(".browse_item a.main").removeClass("active");
        });


        jQuery(".browse_item a.main").live('mouseover', function() {
            jQuery(".browse_item a.main").removeClass("active");
            jQuery(this).addClass("active");
        });

        jQuery(".project_itm a.prj1").live('mouseover', function() {
            jQuery(".project_itm a.prj2").removeClass("active");
            jQuery(".projects .prj_list .track_item a.main").removeClass("active");
            jQuery(".projects .prj_list .track_item .actions").hide();
            jQuery(".project_itm .actions").hide();
            jQuery(".project_itm a.prj1").removeClass("active");
            jQuery(this).addClass("active");
            jQuery(this).parent().parent().find(".actions").show();
        });


        jQuery(".project_itm a.prj2").live('mouseover', function() {
            jQuery(".projects .prj_list .track_item a.main").removeClass("active");
            jQuery(".projects .prj_list .track_item .actions").hide();
            jQuery(".project_itm .actions").hide();
            jQuery(".project_itm a.prj2").removeClass("active");
            jQuery(this).addClass("active");
            jQuery(this).parent().parent().find(".actions").show();
        });
        jQuery(".projects .prj_list .track_item a.main").live('mouseover', function() {
            jQuery(".projects .prj_list .track_item .actions").hide();
            jQuery(".projects .prj_list .track_item a.main").removeClass("active");
            jQuery(this).addClass("active");

            var obj = jQuery(this).parent().parent().find(".actions");
            obj.show();
        });
    }
});

function popup(url, winname, w, h, feat) {
    if (!(isNaN(w) || isNaN(h))) {
        var x = parseInt((screen.width - w) / 2);
        var y = parseInt((screen.height - h) / 2);
        if (x < 0) x = 0;
        if (y < 0) y = 0;

        if (feat != null && feat != "") {
            feat = "," + feat;
        }
        else {
            feat = "";
        }
        feat = "left=" + x + ",top=" + y + ",width=" + w + ",height=" + h + feat;
    }
    window.open(url, winname, feat);
}


function helpMe() {
    popup(dotdotpath + "help", "", 900, 700, "");
}


// cookies
function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

// Added by ENDAVA

function getCookieParameter(cookieName, paramName) {
    var values = new Array();
    var param = new Array();
    var cookieStr = readCookie(cookieName);
    if ((cookieStr == null) || (cookieStr == '')) return '';
    values = cookieStr.split('&');

    index = 0
    while (index < values.length) {
        param = values[index].split('=');
        if (param[0] == paramName) return param[1]
        index++
    }
}

function setCookieParameter(cookieName, paramName, paramValue) {
    var values = new Array();
    var param = new Array();
    var cookieStr = readCookie(cookieName);
    var result = "";
    if (cookieStr != null) {
        values = cookieStr.split('&');
        index = 0
        while (index < values.length) {
            param = values[index].split('=');
            if (param[0] == paramName) values[index] = paramName + "=" + paramValue;
            if (index == values.length - 1) result = result + values[index];
            else result = result + values[index] + '&';
            index++;
        }
    }
    else {
        cookieStr = paramName + "=" + paramValue;
    }
    createCookie(cookieName, result, $CookieTimeOut);
    return result;
}

String.format = String.prototype.format = function() {
    var i = 0;
    var string = (typeof (this) == "function" && !(i++)) ? arguments[0] : this;

    for (; i < arguments.length; i++)
        string = string.replace(/\{\d+?\}/, arguments[i]);

    return string;
}


function formatString(str) {
    for (i = 1; i < arguments.length; i++) {
        var aux = i - 1;
        str = str.replace('{' + aux + '}', arguments[i]);
    }
    return str;

}

function AddUserDownload(workAudioId, workAudioFormatId) {
    jQuery.ajax({
        type: "Get",
        url: $CommonHandlerPath,
        data: { Method: 'AddUserDownload', WorkAudioId: workAudioId, WorkAudioFormatId: workAudioFormatId },
        success: function(data) {
        }
    });
}

function convertDate(date) {
    var splitResult = date.split('/');
    var returnedString = "";

    if (splitResult[0].length == 1) {
        returnedString = "0";
    }
    returnedString += splitResult[0] + "/";

    if (splitResult[1].length == 1) {
        returnedString += "0";
    }
    returnedString += splitResult[1] + "/";
    returnedString += splitResult[2];

    return returnedString;
}


function convertTime(time) {
    var splitResult = time.split(':');
    var returnedString = "";

    if (splitResult[0].length == 1) {
        returnedString = "0";
    }
    returnedString += splitResult[0] + ":";

    if (splitResult[1].length == 1) {
        returnedString += "0";
    }
    returnedString += splitResult[1];

    return returnedString;
}

function blockHtmlElement(selector) {
    jQuery(selector).block({
        message: '<div><div class="loading"></div><strong>' + loadingAjaxMessageText + '</strong></div>',
        css: { border: 'none',
            padding: '15px',
            backgroundColor: 'transparent',
            opacity: .8,
            color: '#fff'
        }
    });
}

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
}

// End added by ENDAVA


﻿// path to the AJAX calls server

// the DIV that will host the AJAX response
var $responseDivForAttributes = '';
var $responseDivForSearchCounters = '';

var $waitForAttributes = false;

// the selected category Id
var $currCategoryId;

var $cachedSearchCountResult='';

// 
var $currPanel;

var lastAdvSrchTotal = -1;
var lastAdvSrchRecomended = -1;
var lastAdvSrchVirtual = -1;
var recomendedTracks = -1;
var cachedRecomendedTracks = -1;
var lastAdditionalFilterType = '';  /*lyric, composer, duration*/

function setKeywordsFieldLabel(label) {
    try {
        lyricsDefault = label;
    }
    catch (err) {
    }
}

function setComposerFieldLabel(label) {
    try {
        composerDefault = label;
    }
    catch (err) {
    }
}

// handle the data received from the AJAX call
function handleReceivedAdvSearchAttributes(data) {
    try {
        $waitForAttributes = false;
        adv_searchWaitForAttributes = false;
        jQuery($responseDivForAttributes).unblock();
        jQuery($responseDivForAttributes).html(data);
        //advSearchOnAttributesReceivedFromWS();
    }
    catch (err) {
    }
}

// this method verifies if the returned totals are greater than 0 and if
// the totals are greater than 0 will add the attrib to list, else will display
// the error message.
function handlePossibleReceivedSearchCounters(data, attrId, attribName, attribIndex) {
    try {
        var dataObj = jQuery(data);
        var html = dataObj.find("#html").html();
        if ((jQuery(".selection_list").length != 0) /*.html() != "") /* && (jQuery('.selection_list').find('input[type=checkbox]:checked').length != 0)*/) {
                lastAdvSrchTotal = dataObj.find("#total").html();
                lastAdvSrchRecomended = dataObj.find("#recomended").html();
                lastAdvSrchVirtual = dataObj.find("#virtual").html();
        }

        if ((lastAdvSrchTotal == 0) && (lastAdvSrchRecomended == 0) && (lastAdvSrchVirtual == 0)) {
            lastAdvSrchTotal = -1;
            lastAdvSrchRecomended = -1;
            lastAdvSrchVirtual = -1;
            if (lastAdditionalFilterType === 'lyric') {
                if (jQuery("#adv_search #lyrics").val() != '') {
                    if (lyricsLastSuccess != '' && lyricsLastSuccess != undefined && jQuery("#adv_search #lyrics").val() != lyricsDefault) {
                        jQuery("#adv_search #lyrics").val(lyricsLastSuccess);
                        lyricsLastTried = '';
                    }
                    else {
                        jQuery("#adv_search #lyrics").val(lyricsDefault);
                    }
                }           
                            
            }
            if (lastAdditionalFilterType === 'composer') {
                if (jQuery("#adv_search #composer").val() != '') {
                if (composerLastSuccess != '' && composerLastSuccess != undefined && jQuery("#adv_search #composer").val() != composerDefault) {
                        jQuery("#adv_search #composer").val(composerLastSuccess);
                        composerLastTried = '';
                    }
                    else {
                        jQuery("#adv_search #composer").val(composerDefault);
                    }
                }
                
            }
            if (lastAdditionalFilterType === 'duration') {
                jQuery("#adv_search #tracklength").find("option[index='0']").attr("selected", "selected");
            }

            if ((jQuery("#adv_search #composer").val() != composerDefault && jQuery("#adv_search #composer").val() != '') || (jQuery("#adv_search #lyrics").val() != lyricsDefault && jQuery("#adv_search #lyrics").val() != '') || jQuery(".selection_list").html() != "") {
                showError(errorLightboxMessageTitleTmpl.format(jQuery("title").html()), noResultsForAttributesErrMsg);
            }
            
            if (jQuery("#adv_search #composer").val() == composerDefault && jQuery("#adv_search #lyrics").val() == lyricsDefault && jQuery(".selection_list").html() == "") {
                jQuery($responseDivForSearchCounters).html(html); 
           }
        }
        else {
        
        if (jQuery("#adv_search #composer").val() != composerDefault) {
            composerLastSuccess = jQuery("#adv_search #composer").val();
        }
        if (jQuery("#adv_search #lyrics").val() != lyricsDefault) {
            lyricsLastSuccess = jQuery("#adv_search #lyrics").val();
        }
            
            cachedRecomendedTracks = dataObj.find("#recomended").html();
            $cachedSearchCountResult = html;
            addAttribute(attrId, attribName, attribIndex);
        }
    }
    catch (err) {
    }
}

function handleReceivedSearchCounters(data) {
    try {
        var dataObj = jQuery(data);
        var html = dataObj.find("#html").html();
        if ((jQuery(".selection_list").html() != "")/* && (jQuery('.selection_list').find('input[type=checkbox]:checked').length != 0)*/) {
            lastAdvSrchTotal = dataObj.find("#total").html();
            lastAdvSrchRecomended = dataObj.find("#recomended").html();
            lastAdvSrchVirtual = dataObj.find("#virtual").html();
        }
        recomendedTracks = dataObj.find("#recomended").html();
        jQuery($responseDivForSearchCounters).html(html);
    }
    catch (err) {
    }
}

// do the actual AJAX call to the server
function advSearchGetAttribsFromServerAsync(responseDivName, ajaxCallParams) {
    try {
        if ($waitForAttributes == false) {

            $responseDivForAttributes = responseDivName;

            if ($SearchHandlerPath !== "") {
                blockHtmlElement($responseDivForAttributes);
                $waitForAttributes = true;
                adv_searchWaitForAttributes = true;
                // make the AJAX call
                jQuery.get($SearchHandlerPath, ajaxCallParams, function(data) {
                    handleReceivedAdvSearchAttributes(data)
                });
            }
        }
    }
    catch (err) {
    }
}

// retrieve the search counters from the server
function advSearchGetSearchCountersFromServerAsync(responseDivName, ajaxCallParams) {
    try {
        $responseDivForSearchCounters = responseDivName;
        if ($SearchHandlerPath !== "") {
            jQuery.get($SearchHandlerPath, ajaxCallParams, function(data) {
                handleReceivedSearchCounters(data)
            });
        }
    }
    catch (err) {
    }
}

function advSearchTryAddingAttributeAndUpdateSearchCounters_Async(responseDivName, ajaxCallParams, attrId, attribName, attribIndex) {
    try {
        $responseDivForSearchCounters = responseDivName;
        if ($SearchHandlerPath !== "") {
            jQuery.get($SearchHandlerPath, ajaxCallParams, function(data) {
                handlePossibleReceivedSearchCounters(data, attrId, attribName, attribIndex);
            });
        }
    }
    catch (err) {
    }
}

// This method will set the current panel and call the GetAttribute async
function advSearchGetAttributesFromServer(panel, catId, parentId) {
    $currPanel = panel;
    advSearchGetAttribsFromServerAsync("#selectlist_" + panel, { command: 'GetAttribute', categoryId: catId, pId: parentId });
};

function advSearchGetSearchCounters() {
      if (jQuery("#adv_search").is(":visible")) {
            advSearchGetSearchCountersFromServerAsync("#advanced_search_counter", { command: 'GetSearchCounters', attributeList: getAllAttributesID(), lyric: getLyric(), composer: getComposer(), edit: getEdit() });
      }
}

// this function will make an ajax request to find if adding this attrib will return 0 total
function advSearchTryAddingAttributeAndUpdateSearchCounters(attrId, attribName, attribIndex) {
    var attrsList = getAllAttributesID();
    if (attrsList.indexOf(attrId) === -1) {
        if (attrsList == '') {
            attrsList = attrId;
        }
        else {
            attrsList += ',' + attrId;
        }
        advSearchTryAddingAttributeAndUpdateSearchCounters_Async("#advanced_search_counter", { command: 'GetSearchCounters', attributeList: attrsList, lyric: getLyric(), composer: getComposer(), edit: getEdit() }, attrId, attribName, attribIndex);
    }
}

function TryAddAttributeAndUpdateSearchCounters() {
    advSearchTryAddingAttributeAndUpdateSearchCounters_Async("#advanced_search_counter", { command: 'GetSearchCounters', attributeList: getAllAttributesID(), lyric: getLyric(), composer: getComposer(), edit: getEdit() });
}

// this method will execute after the attributes arrived from the server and were
// added to the appropriate DIV
//function advSearchOnAttributesReceivedFromWS() {
//    //advSearchAssignClickEventHandlers($currPanel);
//}



var advancedSearchAttributeDelimiter = '>';
var currentCategoryId = "";
var currentCategoryName = "";
var currentAttributeFromFirstColumnId = "";
var currentAttributeFromFirstColumnName = "";
var currentAttributeFromSecondColumnId = "";
var currentAttributeFromSecondColumnName = "";
var lyricsCategoryId = "-1";
var composerCategoryId = "-2";
var quickSearchCategoryId = "-3";

//specifies the delimeter between the attributes (for a child attribute)
//default is used '>'
function setAdvancedSearchAttributeDelimiter(delimeter) {
    advancedSearchAttributeDelimiter = delimeter;
}

//sets the current category in the global variables
function setCurrentCategory(id, name) {
    currentCategoryId = id;
    currentCategoryName = name;
    currentAttributeFromFirstColumnId = "";
    currentAttributeFromFirstColumnName = "";
    currentAttributeFromSecondColumnId = "";
    currentAttributeFromSecondColumnName = "";
}

//clear the current filter variables
function clearCurrentFilterVariables() {
    currentCategoryId = "";
    currentCategoryName = "";
    currentAttributeFromFirstColumnId = "";
    currentAttributeFromFirstColumnName = "";
    currentAttributeFromSecondColumnId = "";
    currentAttributeFromSecondColumnName = "";
}

//sets the current attribute in the global variables; 
//index specifies the attribute's column index 
function setCurrentAttribute(id, name, index) {
    if (index == 0) {
        currentAttributeFromFirstColumnId = id;
        currentAttributeFromFirstColumnName = name;
        currentAttributeFromSecondColumnId = "";
        currentAttributeFromSecondColumnName = "";
    }
    else if (index == 1) {
        currentAttributeFromSecondColumnId = id;
        currentAttributeFromSecondColumnName = name;
    }
}

//adds an attribute to the selection
function addAttribute(id, name, index) {
    var sName = "";
    if (index == 0) {
        sName = name;
    }
    else if (index == 1) {
        sName = currentAttributeFromFirstColumnName + advancedSearchAttributeDelimiter + name;

    }
    else if (index == 2) {
        sName = currentAttributeFromFirstColumnName + advancedSearchAttributeDelimiter + currentAttributeFromSecondColumnName + advancedSearchAttributeDelimiter + name;
    }


    //add attribute to cookies
    if ((id !== '' && id !== null && typeof (id) !== 'undefined') && (name !== '' && name !== null && typeof (name) !== 'undefined') && (index !== '' && index !== null && typeof (index) !== 'undefined')) {
        addAttributeToCategory(currentCategoryId, currentCategoryName, id, sName);
    }
    populateSelectionHTML(0);
}

// this function will add some lyrics text to the filters list
function addLyricsToFilters(searchString) {
    if (searchString == '' ||
        searchString == lyricsDefault) {
        removeAttributeFromCategory(lyricsCategoryId, lyricsCategoryId);
    }
    else {
        var catName = 'Lyrics';
        try {
            catName = lyricsDefault;
        }
        catch (err) {
        }
        addAttributeToCategory(lyricsCategoryId, catName, lyricsCategoryId, searchString);
    }

}

// this function will add some composer text to the filters list
function addComposerToFilters(searchString) {
    if (searchString == '' ||
        composerDefault == '') {
        removeAttributeFromCategory(composerCategoryId, composerCategoryId);
    }
    else {
        var catName = 'Composer';
        try {
            catName = composerDefault;
        }
        catch (err) {
        }
        addAttributeToCategory(composerCategoryId, catName, composerCategoryId, searchString);
    }
}

function addQuickSearchToFilters(quickSearch) {
    //    if (quickSearch != '') {
    addAttributeToCategory(quickSearchCategoryId, 'Quick search', quickSearchCategoryId, quickSearch);
    //    }
}

function CountArray(array) {
    for (var attrValue in array) {

        if (array[attrValue].status == 1) {
            return true;
        }
    }
    return false;
}

// this method populates the "your selection" part of the advanced search;
// the selected search criterias are being read from cookies 
function populateSelectionHTML(doAjaxCall) {
    var categories = getCategories();
    var strlHtml = "";   
    var cookieContainLyrics = false;
    var cookieContainComposer = false;
    if(doAjaxCall !== undefined && doAjaxCall == 1)
    {
      advSearchGetSearchCounters();
    }
    if(doAjaxCall === 0 && $cachedSearchCountResult !== '')
    {
     recomendedTracks = cachedRecomendedTracks;
     jQuery($responseDivForSearchCounters).html($cachedSearchCountResult); 
    }

    for (var categValue in categories) {
        if (parseInt(categValue) > 0 && CountArray(categories[categValue].listAttributes)) {
            strlHtml += '<div class="category">';
            strlHtml += '<label>';
            strlHtml += '<b>' + categories[categValue].name + '</b>';
            strlHtml += '</label>';
            strlHtml += ' <input type="hidden" ' + 'value="' + categories[categValue].id + '" />';
            strlHtml += '<br />';

            for (var attrValue in categories[categValue].listAttributes) {

                if (categories[categValue].listAttributes[attrValue].status == 1) {
                    strlHtml += '<div class="attribute">';
                    //strlHtml += '<div class="checkBox"></div>';
                    strlHtml += '<a title="remove selection" class="left" href="javascript:void(0);"><img class="checkBox" alt="remove" src="' + $CDNFilesRootPath + 'images/content/remove_btn.gif"> </a>';
                    strlHtml += ' <label>';
                    strlHtml += categories[categValue].listAttributes[attrValue].name;
                    strlHtml += '</label>';
                    strlHtml += ' <input type="hidden" ' + 'value="' + categories[categValue].listAttributes[attrValue].id + '" />';
                    strlHtml += '<br />';
                    strlHtml += '</div>';
                }
               
            }

            if (strlHtml.length > 0) {
                strlHtml += '</div>';
            }
            
        }
        else {
            if (categValue == lyricsCategoryId) {
                setLyricsFromCookies(categories[categValue].listAttributes[categValue].name);
                cookieContainLyrics = true;
            }
            if (categValue == composerCategoryId) {
                setComposerFromCookies(categories[categValue].listAttributes[categValue].name);
                cookieContainComposer = true;
            }
        }
    }

    if (!cookieContainLyrics) {
        jQuery("#adv_search #lyrics").val(lyricsDefault);
    }

    if (!cookieContainComposer) {
        jQuery("#adv_search #composer").val(composerDefault);
    }

    //add html to content div
        jQuery('.selection_list').html(strlHtml);

//    // add on check changed events
//    jQuery('.category .attribute input[type=checkbox]').each(function() {

//        jQuery(this).unbind('click').click(function() {
//            var id = jQuery(this).parent().find("input[type=hidden]").val();
//            var categId = jQuery(this).parent().parent().find("input[type=hidden]").val();

//            if (jQuery(this).is(':checked')) {
//                setStatus(categId, id, 1);
//            }
//            else {
//                setStatus(categId, id, 0);
//            }
//            // repopulate the search counters
//            advSearchGetSearchCounters();
//        });
//    });
};

function setLyricsFromCookies(lyrics) {
    if (lyrics == '') {
        jQuery("#adv_search #lyrics").val(lyricsDefault);
    }
    else {
        jQuery("#adv_search #lyrics").val(lyrics);
    }
}

function setComposerFromCookies(composer) {
    if (composer == '') {
        jQuery("#adv_search #composer").val(composerDefault);
    }
    else {
        jQuery("#adv_search #composer").val(composer);
    }
}

function prePostBackProcessing() {
    try {
        // set the attributes list to the hidden input
        var tmpObjAttributeList = jQuery("#attributeList");
        var tmpObjLyrics = jQuery("#adv_search #lyrics");
        var tmpObjComposer = jQuery("#adv_search #composer");
        tmpObjAttributeList.val(getAllAttributesID());
        if (tmpObjAttributeList.val() == '' & tmpObjLyrics.val() == lyricsDefault & tmpObjComposer.val() == composerDefault & jQuery(".tracklength_filter #tracklength").val() == 0)
            return false;

        if (tmpObjLyrics.val() == lyricsDefault) {
            tmpObjLyrics.val("");
        }

        if (tmpObjComposer.val() == composerDefault) {
            tmpObjComposer.val("");
        }
        return true;
    }
    catch (err) {
    }
}

function getLyric() {
    var objVal = jQuery("#adv_search input#lyrics").val();
    if (objVal !== lyricsDefault) {
        return objVal;
    }
    else {
        return null;
    }
}

function getComposer() {
    var objVal = jQuery("#adv_search input#composer").val();
    if (objVal !== composerDefault) {
        return objVal;
    }
    else {
        return null;
    }
}

function getEdit() {
    var objVal = jQuery("#adv_search select#tracklength").val();
    var objValDefault = jQuery("#adv_search #tracklength").find("option[index='0']").val();
    if (objVal !== objValDefault) {
        return objVal;
    }
    else {
        return null;
    }
}




// the name of the cookie: cookieName = CategoryCookie
var cookieName = 'CategoryCookie'
/*  this function reads from a cookie named 'CategoryCookie'
*  the value which is a string represented XML file.
*  here is an example xml: <?xml version="1.0" encoding="UTF-8"?><root><c id="1" n="Categorie 1"><a id="1" n="ASDASDA" ac="1" /><a id="2" n="ASDASDA" ac="1" /><a id="3" n="ASDASDA" ac="1" /><a id="4" n="ASDASDA" ac="0" /><a id="5" n="ASDASDA" ac="0" /><a id="6" n="ASDASDA" ac="1" /><a id="7" n="ASDASDA" ac="1" /><a id="8" n="ASDASDA" ac="0" /><a id="9" n="ASDASDA" ac="0" /></c></root>
*      it contains 1 category and 9 attributes.
*  this function returns a associative array cattegory
*  it consits of an array of Category objects as value and for the key the Category.Id    
*/
//function readCategoriesFromCookie() {
//    var categories = new Array();
//    var xmlDoc;

//    //createCookie(cookieName, result.responseText, $CookieTimeOut);
//    var realString = readCookie(cookieName);
//    if (realString == null) {
//        var xmlBlank = '<?xml version="1.0" encoding="UTF-8"?>';
//        xmlBlank += '<root>';
//        xmlBlank += '</root>';
//        createCookie(cookieName, xmlBlank, $CookieTimeOut);
//        realString = readCookie(cookieName);
//    }
//    if (navigator.appName == "Microsoft Internet Explorer") {
//        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//        xmlDoc.async = 'false';
//        realString = realString.replace('_', '');
//        xmlDoc.loadXML(realString);
//        //xmlDoc = realString;
//    }
//    if (navigator.appName != "Microsoft Internet Explorer") {
//        xmlDoc = realString;
//    }

//    jQuery(xmlDoc).find('c').each(function(c) {
//        var attrList = new Array();
//        jQuery(this, xmlDoc).find('a').each(function(a) {
//            //add to attr list
//            attrList[jQuery(this).attr('id')] = new Attribute(jQuery(this).attr('id'), unescape(jQuery(this).attr('n')), jQuery(this).attr('ac'));
//        });
//        //alert('attrList: ' + attrList);
//        //add to categories
//        categories[jQuery(this).attr('id')] = new Category(jQuery(this).attr('id'), unescape(jQuery(this).attr('n')), attrList);
//        //alert('categories: ' + categories);
//    });

//    return categories;
//}

function readCategoriesFromCookie() {
    var categories = new Array();    
    var xmlDoc;
    
    var realString = readCookie(cookieName);
    
     if (realString == null) {
            var xmlBlank = '';
            createCookie(cookieName, xmlBlank, $CookieTimeOut);
            realString = readCookie(cookieName);
            
        }
        
    if(realString !== '' && realString !== null){
    try{
    realString = JSON.parse(realString);
       for (var i = 0; i < realString.Categories.length; i++) {
            var attrList = new Array();
            for (var j = 0; j < realString.Categories[i].Attributes.length; j++) {
            attrList[realString.Categories[i].Attributes[j].Id] = new Attribute(realString.Categories[i].Attributes[j].Id, decodeURIComponent(realString.Categories[i].Attributes[j].Value), realString.Categories[i].Attributes[j].Active);
            }
            
            categories[realString.Categories[i].Id] = new  Category(realString.Categories[i].Id, decodeURIComponent(realString.Categories[i].Name), attrList);
       
       }    
   }
   catch(err){}
   }
    return categories;
}

/*
writes to 'CategoryCookie' cookie the categories parameter of type associative array.
It represents an array of Category for value and for key the Category.Id
{"Categories":
		[{"Id":1,"Name":"unu","Attributes":[{"Id":1,"Value":"atribute unu","Active":1}]},		 		 
		{"Id":1,"Name":"doi","Attributes":[{"Id":1,"Value":"atribute doi","Active":1},{"Id":1,"Value":"atribute trei","Active":1}]}
		]}
*/
function writeCategoriesToCookie(categories) {
    var xml = '{"Categories":[';
    for (var categValue in categories) {
        if (categories[categValue] != null) {
            xml += '{"Id":' + categories[categValue].id + ',"Name":"' + encodeURIComponent(categories[categValue].name) + '","Attributes":[';

            for (var attrValue in categories[categValue].listAttributes) {
                if (categories[categValue].listAttributes[attrValue] == null) continue;
                xml += '{"Id":' + categories[categValue].listAttributes[attrValue].id + ',"Value":"' + encodeURIComponent(categories[categValue].listAttributes[attrValue].name) + '","Active":' + categories[categValue].listAttributes[attrValue].status + '},';
            }
            xml = xml.substring(0, xml.length -1);
            xml += ']}';
        }
        if (categories[categValue] != null){
        xml += ',';
        }
    }
    if(xml.substring(xml.length -1, xml.length) == ','){
        xml = xml.substring(0, xml.length -1);
    }
    xml += ']}';
    
    createCookie(cookieName, xml, $CookieTimeOut);
}

//function writeCategoriesToCookie(categories) {
//    var xml = '<?xml version="1.0" encoding="UTF-8"?>';
//    xml += '<root>';
//    for (var categValue in categories) {
//        if (categories[categValue] != null) {
//            xml += '<c id="' + categories[categValue].id + '" n="' + escape(categories[categValue].name) + '">';

//            for (var attrValue in categories[categValue].listAttributes) {
//                if (categories[categValue].listAttributes[attrValue] == null) continue;
//                xml += '<a id="' + categories[categValue].listAttributes[attrValue].id + '" n="' + escape(categories[categValue].listAttributes[attrValue].name) + '" ac="' + categories[categValue].listAttributes[attrValue].status + '" />';
//            }
//            xml += '</c>';
//        }
//    }
//    xml += '</root>';
//    createCookie(cookieName, xml, $CookieTimeOut);
//}

// returns a categories associative array read from cookie
function getCategories() {

    var categories = readCategoriesFromCookie();
    return categories;
}

function displayCategories() {
    //alert('DDDisplayCategories: ' + categories);
    var categories = readCategoriesFromCookie();
    var tmpObj = jQuery('#contentArea');
    for (var categValue in categories) {
        tmpObj.append('categoryID ' + categories[categValue].id);
        tmpObj.append(' categoryName ' + categories[categValue].name + '<br />');
        for (var attrValue in categories[categValue].listAttributes) {
            tmpObj.append('- attribute ID ' + categories[categValue].listAttributes[attrValue].id + '<br />');
            tmpObj.append('- attribute name ' + categories[categValue].listAttributes[attrValue].name + '<br />');
        }
        tmpObj.append('<br />');
    }


}

// returns an associative array of type: Array<Attribute.Id, Attribute> read from CategoryCookie
function getAttributesByCategoryID(CategoryID, inlcudeDeactivated) {
    var categories = readCategoriesFromCookie();
    var attrList = new Array();
    for (var categValue in categories) {
        if (categories[categValue].id == CategoryID) {

            for (var attrValue in categories[categValue].listAttributes) {
                if ((inlcudeDeactivated == 0 && categories[categValue].listAttributes[attrValue].status == 1)
                    || (inlcudeDeactivated == 1)) {
                    attrList[categories[categValue].listAttributes[attrValue].id] = new Attribute(categories[categValue].listAttributes[attrValue].id, categories[categValue].listAttributes[attrValue].name, categories[categValue].listAttributes[attrValue].status);
                }

            }
        }
    }
    return attrList;
}

// sets the status of an Attribute with id = Attribute.Id contained in the Category = CategoryID with status param
// the cookie will be updated
function setStatus(CategoryID, AttributeID, status) {
    var categories = readCategoriesFromCookie();
    if (categories == null) return;
    if (categories[CategoryID] == null) return;
    if (categories[CategoryID].listAttributes == null) return;
    if (categories[CategoryID].listAttributes[AttributeID] == null) return;

    categories[CategoryID].listAttributes[AttributeID].status = status;

    writeCategoriesToCookie(categories);
} //fucntion

// returns all Attribute.Id from all categories as a comma separated string
function getAllAttributesID() {
    var categories = readCategoriesFromCookie();
    var retStr = '';
    for (var categValue in categories) {
        if (parseInt(categValue) > 0) {
            for (var attrValue in categories[categValue].listAttributes) {
                if (categories[categValue].listAttributes[attrValue].status == 1)
                    retStr += categories[categValue].listAttributes[attrValue].id + ',';
            } //for
        } //if
    } //for
    //retStr = retStr.substring(0, retStr.length - 1);
    if (retStr.length <= 1) return retStr;
    return retStr.substring(0, retStr.length - 1);
} //function

// adds a new Attribute to a Category
// if CategoryID does not exits a new Category will be created with id = CategoryID and name = CategoryName
// and then a new Attibute(AttributeID,AttributeName,status = 1) will be added to the CategoryID
// the cookie will be updated
function addAttributeToCategory(CategoryID, CategoryName, AttributeID, AttributeName) {
    var categories = readCategoriesFromCookie();
    if (categories == null) return null;
    var newCat;
    if (categories[CategoryID] == null) {

        var attribute = new Attribute(AttributeID, AttributeName, 1);
        var attrList = new Array();
        attrList[AttributeID] = attribute;
        categories[CategoryID] = new Category(CategoryID, CategoryName, attrList);
    }
    else {
        if (categories[CategoryID].listAttributes == null) return null;
        categories[CategoryID].listAttributes[AttributeID] = new Attribute(AttributeID, AttributeName, 1);
    }
    writeCategoriesToCookie(categories);
}

// removes an AttributeID from CategoryID
function removeAttributeFromCategory(CategoryID, AttributeID) {
    var categories = readCategoriesFromCookie();
    if (categories == null) return null;
    var newCat;
    if (categories[CategoryID] == null) { return null; }
    if (categories[CategoryID].listAttributes == null) { return null; }
    if (categories[CategoryID].listAttributes[AttributeID] == null) { return null; }


    categories[CategoryID].listAttributes[AttributeID] = null;
    if (getNumberOfElementsFromList(categories[CategoryID].listAttributes) == 0) {
        categories[CategoryID] = null;
    }

    writeCategoriesToCookie(categories);
}

function getNumberOfElementsFromList(list) {
    var count = 0;
    for (var listItem in list) {
        if (list[listItem] != null && list[listItem] != undefined) {
            count++;
        }
    }
    return count;
}

// adds a new Attribute to a Category
// with a new Attibute(AttributeID,AttributeName,status = 1) will be added to the CategoryID
// the cookie will be updated
function addAttributeToCategoryByName(CategoryName, AttributeID, AttributeName) {
    var categories = readCategoriesFromCookie();
    if (categories == null) return null;
    for (var category in categories) {
        if (categories[category].name != CategoryName) { continue; }
        var attribute = new Attribute(AttributeID, AttributeName, 1);
        if (categories[category].listAttributes == null) {
            var attrList = new Array();
            attrList[AttributeID] = attribute;
            categories[category].listAttributes = attrList;
        } //if
        else {
            categories[category].listAttributes[AttributeID] = attribute;
        } //else
    } //for
    writeCategoriesToCookie(categories);
}

function clearSearchCookie() {
    eraseCookie(cookieName);
}

function Category(id, name, listAttributesP) {
    this.id = id;
    this.name = name;
    this.listAttributes = new Array();
    for (var attrValue in listAttributesP) {
        this.listAttributes[listAttributesP[attrValue].id] = new Attribute(listAttributesP[attrValue].id, listAttributesP[attrValue].name, listAttributesP[attrValue].status);
    }
}

function Attribute(id, name, status) {
    this.id = id;
    this.name = name;
    this.status = status;
}


﻿var filterBarLabelCategoryId = -4;
var filterBarVirtualLibraryCategoryId = -5;

function refreshYouSearchedFor() {
    var d = new Date();
    blockHtmlElement('#keywords');
    jQuery.ajax({
        type: "Get",

        url: $SearchHandlerPath,
        //        timeout: (15 * 1000),
        data: ({ guid: d.getTime(), method: "BuildYouSearchedForHtmlText" }),
        success: function(data) {
            jQuery('#keywords_list').html(data);
            jQuery('#keywords').unblock();

        }
    });
}

var pageNo;
var currentPageNo;
var mode
var $resultsBoxDiv = "#resultsBox";
var $resultFilterBarDiv = "#resultFilterBar";
var $filterBarContainerDiv = ".filters_block";

function change_TrackSearchResultsPage(new_page_number) {
    pageNo = new_page_number;
    currentPageNo = new_page_number;
    refreshTrackResults();
}
function change_CDSearchResultsPage(new_page_number) {
    pageNo = new_page_number;
    refreshTrackResults();
}

function change_mode(new_result_mode) {
    if (new_result_mode != mode) {
        mode = new_result_mode;
        selectedDiscId = 0;
        if (mode == "CD")
            currentView = "cd";
        else if (mode == "Track")
            currentView = "track";
        refreshTrackResults();
    }
}


function refreshTrackResults() {
    var sortFilter = "";
    var resultsPerPage = "";
    var searchCriteria = "";
    var trackLen = 0;

    if (document.getElementById("sort") != null)
        sortFilter = document.getElementById("sort").value;
    if (document.getElementById("results_num") != null)
        resultsPerPage = document.getElementById("results_num").value;
    if (document.getElementById("searchCriteria") != null)
        searchCriteria = document.getElementById("searchCriteria").value;
    if (document.getElementById("tracklength") != null)
        trackLen = document.getElementById("tracklength").value;

    var attributeList = getAllAttributesID();
    var d = new Date();
    
    blockHtmlElement($resultsBoxDiv);
    blockHtmlElement($resultFilterBarDiv);
    jQuery.ajax({
        type: "Get",
        url: $SearchHandlerPath,
        //        timeout: (15 * 1000),
        data: ({ guid: d.getTime(), method: "RefreshTrackSearchResults", sortFilter: sortFilter,
            resultsPerPage: resultsPerPage, pageNo: pageNo, keyword: searchCriteria, mode: mode, attributeList: attributeList, searchtype: currSearchType, tracklength: trackLen
        }),
        success: function(data) {
            // this method will receive two <div> tags, one for results box and one for result filter bar
            for (i = 0; i < jQuery(data).length; i++) {
                if (jQuery(data)[i].id == $resultsBoxDiv.replace('#', '')) {
                    // destroy search results accordion
                    unbindSearchResultsAccordion();
                    jQuery($resultsBoxDiv).html(jQuery(data)[i].innerHTML);
                    // bind search resutls accordion
                    bindSearchResultsAccordion(); //re-bind the behaviour from the document.ready() method
                    setControlSecurity();
                    jQuery($resultsBoxDiv).unblock();
                }
                if (jQuery(data)[i].id == $filterBarContainerDiv.replace('.', '')) {
                    jQuery($filterBarContainerDiv).html(jQuery(data)[i].innerHTML);
                    jQuery($resultFilterBarDiv).unblock();
                }
            }

//            if (typeof SetAddTrackOnClickEventToTrackResultsSearch == 'function') {
//                SetAddTrackOnClickEventToTrackResultsSearch();
//            }

            createdraggables();
            if (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList") {
                audioPlayer.LoadPlayList("#trackResultsPlayerPlayList", null);
                audioPlayer.clipIndex = -1;
                audioPlayer.jmpToFirst = true;
            }
            //PLAYERbuildThePlaylistArrayFromTheDiv(true);
        }
    });
}

function filterBarSearch(categoryID, categoryName, attributeId, attributeName) {
    addAttributeToCategory(categoryID, categoryName, attributeId, attributeName);
    // ajax call to quickSearch WS
    refreshTrackResults();
    refreshYouSearchedFor();
}


function removeSearchKey(div, anchor, categoryId, attributeId) {
    removeAttributeFromCategory(categoryId, attributeId);
    // ajax call to quickSearch WS
    refreshTrackResults();
    refreshYouSearchedFor();
}

function removeDiv(div) {
    document.getElementById(div).style.display = "none";
}

function removeAnchor(anchor) {
    document.getElementById(anchor).style.display = "none";
}

function filterBarLabelChange(currentLabelId) {
    addAttributeToCategory(filterBarLabelCategoryId, '', filterBarLabelCategoryId, currentLabelId);
    // ajax call to quickSearch WS
    refreshTrackResults();
    refreshYouSearchedFor();
}

function checkVirtualLibraryFilter(cbChecked) {
    addAttributeToCategory(filterBarVirtualLibraryCategoryId, '', filterBarVirtualLibraryCategoryId, cbChecked);
    // ajax call to quickSearch WS
    refreshTrackResults();
    refreshYouSearchedFor();
}


var $baseTrackDetailsDiv = "#TrackDetailsInfo";
var $trackDetailsDiv = "";

var $baseTrackVersionsInfoDiv = "#TrackVersionsInfo";
var $trackVersionsInfoDiv = "";

var $baseMetadataInfoDiv = "#MetadataInfo";
var $metadataInfoDiv = "";

var $baseInfoRow = "#InfoRow";
var $infoRow = "";

// This method will display trackDetails
function resultsGetTrackDetails(selectedWorkId, composers, title, label) {
    if ($SearchHandlerPath !== "") {
        resultsRenderTrackDetailsAsync({ command: 'GetTrackDetails', workId: selectedWorkId, mode: mode, composers: composers, title: title, label: label });
    }
}

function resultsGetTracksFromCD(selectedDiscId, matchedTracksIDs) {
    if ($SearchHandlerPath !== "") {
        resultsRenderTracksForCDAsync({ command: 'GetTracksForCD', discId: selectedDiscId, matchedTracks: matchedTracksIDs, mode: mode });
    }
}

function displayTrackMetadata(versionID, composers) {
    if ($SearchHandlerPath !== "") {
        resultsRenderTrackMetadataAsync({ command: 'DisplayTrackMetadata', versionId: versionID, mode: mode, composers: composers });
    }
}

// do the actual AJAX call to the server
function resultsRenderTrackDetailsAsync(ajaxCallParams) {
    try {
        if ($SearchHandlerPath != "") {
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $SearchHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleTrackDetails(data);

                },
                error: function(objAJAXRequest, strError) {
                    showError(searchResults_lightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("TrackDetails"));
                }
            });
        }

    }
    catch (err) {
    }
}

// do the actual AJAX call to the server
function resultsRenderTracksForCDAsync(ajaxCallParams) {
    try {
        if ($SearchHandlerPath != "") {
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $SearchHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleTracks(data);
                    if (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList") {
                        audioPlayer.clearTrackArray();
                        buildThePlaylistArrayFromElement(jQuery(".playerPlayList", "<div>" + data + "</div>"));
                    }
                    //PLAYERbuildThePlaylistArrayFromTheDiv(false);

                },
                error: function(objAJAXRequest, strError) {
                    showError(searchResults_lightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("CDSearchResults"));
                }
            });
        }

    }
    catch (err) {
    }
}


// do the actual AJAX call to the server
function resultsRenderTrackMetadataAsync(ajaxCallParams) {
    try {
        if ($SearchHandlerPath != "") {

            if (mode != "BrowseTile" && mode != "BrowseList") {
                $metadataInfoDiv = $baseMetadataInfoDiv + "_" + selectedWorkId;
            }
            if (mode == "BrowseTile" || mode == "BrowseList") {
                $metadataInfoDiv = $baseMetadataInfoDiv + "_" + browseSelectedWorkId;
            }
            if (mode == "Projects") {
                $metadataInfoDiv = $baseMetadataInfoDiv + "_" + selectedFullProjectId + "_" + prjWorkAudioId;
            }
            blockHtmlElement($metadataInfoDiv);

            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $SearchHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleTrackMetadata(data);
                },
                error: function(objAJAXRequest, strError) {
                    showError(searchResults_lightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("TrackMetadata"));
                    jQuery($metadataInfoDiv).unblock();
                }
            });
        }

    }
    catch (err) {
    }
}


function handleTrackMetadata(data) {
    jQuery($metadataInfoDiv)[0].innerHTML = jQuery(data)[0].innerHTML;
    jQuery($metadataInfoDiv).unblock();
}

// handle the data received from the AJAX call
function handleTrackDetails(data) {
    $trackDetailsDiv = $baseTrackDetailsDiv + '_' + selectedWorkId;
    $trackVersionsInfoDiv = $baseTrackVersionsInfoDiv + '_' + selectedWorkId;
    $metadataInfoDiv = $baseMetadataInfoDiv + '_' + selectedWorkId;

    try {
        for (i = 0; i < jQuery(data).length; i++) {
            if (jQuery(data)[i].id == $baseTrackVersionsInfoDiv.replace('#', '')) {
                jQuery($trackVersionsInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
                if (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList") {
                    buildThePlaylistArrayFromElement(jQuery(".playerPlayList", data));
                }
                //PLAYERbuildThePlaylistArrayFromTheDiv(false);
            }

            if (jQuery(data)[i].id == $baseMetadataInfoDiv.replace('#', '')) {
                jQuery($metadataInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }
            
            bindObjTracklistOverlay(jQuery($trackDetailsDiv));
        }
        if (jQuery("input[name=hasLyrics]", $trackVersionsInfoDiv).val() == "true") {
            jQuery("p.btn_lyrics_cont", $trackDetailsDiv).css("display", "block");

        }
        jQuery("div.info", $trackDetailsDiv).css("display", "block");
        jQuery($trackVersionsInfoDiv, $trackDetailsDiv).css("display", "block");
        jQuery("div.metatitle", $trackDetailsDiv).css("display", "block");
        
        bindTracklistOverlay();
        //bindResultsDetailsItemBehaviour();
        createdraggables();
    }

    catch (err)
     { }
    setControlSecurity();
}


// handle the data received from the AJAX call
function handleTracks(data) {
    // create html object selector
    $infoRow = $baseInfoRow + '_' + selectedDiscId;
    // replace accourdion data
    jQuery($infoRow).html(data);
    //bindResultsDetailsItemBehaviour();
    bindTracklistOverlay();
    createdraggables();
    setControlSecurity();
}


jQuery(document).ready(function() {
    writeQuickSearchCookie(null, "onLoad");
});

function computeQuickSearchChecks(element) {
    var checkState = jQuery("input[name="+element+"]").attr('checked');
    var childs = jQuery("input[name="+element+"]").next().next("div.subgrp");
    if (childs.length > 0){
        jQuery("input:checkbox", jQuery(childs)).each(function(){
            jQuery(this).attr('checked', checkState);
        });
    } else {
        var parent = jQuery("input[name="+element+"]").parent("div.subgrp");
        var reset = 1;
        if (parent.length > 0){
            jQuery("input:checkbox", jQuery(parent)).each(function(){
                if (jQuery(this).attr('checked') != checkState){
                    reset = 0;
                }
            });
            if (reset == 1){
                jQuery(parent).prev().prev("input:checkbox").attr('checked', checkState);
            }
        }
    }
}

function writeQuickSearchCookie(eventname) {
    var qsCookieName = "QSAttrCookie";
    if ((eventname == "onClick") || (readCookie(qsCookieName) == null)) {
        eraseCookie(qsCookieName);
        var cookieData = '';
        jQuery("#qk_search_opts input:checkbox").each(function(){
            cookieData += jQuery(this)[0].name + '=' + jQuery(this)[0].checked + '&';
 	    });
 	    createCookie(qsCookieName, cookieData, $CookieTimeOut);
 	 }
}

var $waitForLoadCatalogNumbers = false;
var $waitForCategory = false;
var $browseFilterDiv = "#fltr_cont";
var $sortCatNumberId = "#sort_cat_num";
var $sortCategoryId = "#sort_cat";

var $baseBrowseTrackVersionsInfoDiv = "#TrackVersionsInfo";
var $browseTrackVersionsInfoDiv = "";
var $baseBrowseMetadataInfoDiv = "#MetadataInfo";
var $browseMetadataInfoDiv = "";
var $baseBrowseRelatedDiscsInfoDiv = "#RelatedDiscs";
var $browseRelatedDiscsInfoDiv = "";

var $baseBrowseListTracksDiv = "#BrowseListTracks";
var $browseListTracksDiv = "";

var browseSelectedWorkId;
var isWSCallFinished = true;

// This method will refresh catalog numbers
function getCatalogNumbers() {
    if ($BrowseHandlerPath !== "") {
        browseFilterCatalogNumbersRendererAsync({ method: 'GetCatalogueNumbers' })
    }
}

function getCategory() {
    if ($BrowseHandlerPath !== "") {
        browseFilterCategoryRendererAsync({ method: 'GetCategories' })
    }
}

function getCdTrackIds(cdId, action, cdName) {
    if ($BrowseHandlerPath !== "" && isWSCallFinished) {
        if (action == "AddToProject") {
            isWSCallFinished = false;
            browseTileGetCDIdsAsync({ method: 'CDTracksIds', cdID: cdId, action: action, cdName: cdName })
        }
        else if (action == "Download") {
            AddTrackToQueue("", cdName, cdId, 2); //2 -> download cd from browse
        }
        
    }
}

// This method will display trackDetails
function resultsGetBrowseTrackDetails(composers, title, label) {
    if ($SearchHandlerPath !== "") {
        mode = "BrowseTile";
        resultsRenderBrowseTrackDetailsAsync({ command: 'GetTrackDetails', workId: browseSelectedWorkId, mode: "BrowseTile", composers: composers, title: title, label:label });
    }
}

function resultsGetBrowseListTracks(discID) {
    if ($SearchHandlerPath !== "") {
        mode = "BrowseList";
        resultsRenderBrowseListTracksAsync({ method: 'BrowseResultsTrackViewRenderer', cdID: discID, ShowTrackResultsHeader: false, mode: "BrowseList" });
    }
}

function resultsGetBrowseListTrackDetails(composers, title, label) {
    if ($SearchHandlerPath !== "") {
        resultsRenderBrowseTrackDetailsAsync({ command: 'GetTrackDetails', workId: browseSelectedWorkId, mode: "BrowseList", composers: composers, label: label });
    }
}

function resultsGetBrowseListTrackDetailsForPrinting(discId) {
    try {
        if ($BrowseHandlerPath != "") {
            blockHtmlElement('.browse_results');
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $BrowseHandlerPath,
                data: {
                    method: 'BrowseResultsTrackViewRenderer',
                    cdID: discId,
                    ShowTrackResultsHeader: false,
                    mode: "BrowseList"
                },
                success: function(data) {
                    handleBrowseTrackDetailsForPrinting(data)
                },
                error: function(objAJAXRequest, strError) {
                    isWSCallFinished = true;
                    jQuery('.browse_results').unblock();
                    showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("TrackDetails"));
                }
            });
        }

    }
    catch (err) {
    }
}

function handleBrowseTrackDetailsForPrinting(data) {
    //jQuery(data)[0].innerHTML
    jQuery('.browse_results').unblock();
    jQuery("#print").html(jQuery(data).html());
    window.print();
}

function displayLabelPrev(labelId) {
    // fix the IE6 bug that sets all <a> on active when labelId is empty
    if (labelId != '') {
        if (jQuery(".smple_btn").length > 0) {
            var labelname, labeldesc, labelimg;
            labelname = jQuery("#labelname" + labelId).val()
            labeldesc = jQuery("#labeldesc" + labelId).val();
            labelimg = jQuery("#labelimg" + labelId).val();
            labelMusic = jQuery("#labelmusic" + labelId).val()

            if (labelId < 0) {
                jQuery('#sort_cat_num').attr('disabled', 'disabled')
            }
            else {
                jQuery('#sort_cat_num').removeAttr('disabled')
            }
            if (labelMusic == '') {
                jQuery(".smple_btn").hide();
            }
            else {
                jQuery(".smple_btn").show();
            }
            if (jQuery(".disc_prv h4") != null) {
                jQuery(".disc_prv h4").html(labelname);
            }
            if (jQuery(".disc_prv p") != null) {
                anchor = jQuery(".disc_prv p a");
                anchor.remove();
                jQuery(".disc_prv p").text("");
                jQuery(".disc_prv p").append(labeldesc);
                jQuery(".disc_prv p").append(anchor);
            }
            if (jQuery(".disc_prv img") != null) {
                jQuery(".disc_prv img").attr("src", labelimg);
            }

            // $("select#sort_cat").val("0");
            // setCookieParameter(browseCookieName, "SelectedCategoryId", "0");
            jQuery("a[id='" + labelId + "']").addClass("active");
            jQuery("a[id='" + labelId + "']").parent().parent().parent().parent().show();
            return true
        }
        else {
            jQuery("#lbl1 div a").removeClass("active");
            jQuery("#lbl1 li a").removeClass("active");
            var varName = 'a[id="' + labelId + '"]';
            jQuery(varName).addClass("active");
            jQuery(varName).parent().parent().parent().parent().show();
            return false;
        }
    }
}

function refreshTileView(elem) {
    var labelid;

    labelid = jQuery("#labelid" + jQuery(elem).attr("id")).val()
    if (labelid == "-1") createCookie("IsBrowseFirstLabel", "1", 1);
    else createCookie("IsBrowseFirstLabel", "0", 1);

    setCookieParameter(browseCookieName, "SelectedLabelId", labelid);
    setCookieParameter(browseCookieName, "SelectedPageNo", 1);
    setCookieParameter(browseCookieName, "SelectedCategoryId", 0);
    setCookieParameter(browseCookieName, "SelectedCatalogNameId", 0);
    setCookieParameter(browseCookieName, "SelectedCDId", 0);

    if ((labelid == -1) && (jQuery("#sort option[value='ReleaseDate']").length > 0)) {
        jQuery("#sort").val('ReleaseDate');
        setCookieParameter(browseCookieName, "SelectedOrderBy", 'ReleaseDate');
    }

    var bool = displayLabelPrev(labelid)
    // Ajax call to get the catalog numbers
    if (bool == true) {
        getCatalogNumbers();
        getCategory();
        refreshBrowseCDResults();
    }
    else {
        window.location = jQuery("#browseBackBtn").attr('href');
    }
}

// Do the actual AJAX call to the server
function browseFilterCatalogNumbersRendererAsync(ajaxCallParams) {
    try {
        if ($waitForLoadCatalogNumbers == false) {

            if ($BrowseHandlerPath !== "") {
                blockHtmlElement($browseFilterDiv);
                $waitForLoadCatalogNumbers = true;
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $BrowseHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleFilterCatalogNumbersReceivedData(data)
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("FilterCatalogNumbers"));
                        jQuery($browseFilterDiv).unblock();
                        $waitForLoadCatalogNumbers = false;
                    }
                });
            }
        }
    }
    catch (err) {
    }
}

// handle the data received from the AJAX call
function handleFilterCatalogNumbersReceivedData(data) {
    try {
        jQuery($sortCatNumberId)[0].outerHTML = jQuery(data)[0].outerHTML;
        jQuery($browseFilterDiv).unblock();
        $waitForLoadCatalogNumbers = false;
        labelId = getCookieParameter(browseCookieName, "SelectedLabelId")
        if (labelId < 0) {
            jQuery('#sort_cat_num').attr('disabled', 'disabled')
        }
        else {
            jQuery('#sort_cat_num').removeAttr('disabled')
        }
    }
    catch (err) {
    }
}


// Do the actual AJAX call to the server
function browseFilterCategoryRendererAsync(ajaxCallParams) {
    try {
        if ($waitForCategory == false) {

            if ($BrowseHandlerPath !== "") {
                blockHtmlElement($browseFilterDiv);
                $waitForCategory = true;
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $BrowseHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleFilterCategoryReceivedData(data)
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("FilterCategory"));
                        jQuery($browseFilterDiv).unblock();
                        $waitForCategory = false;
                    }
                });
            }
        }
    }
    catch (err) {
    }
}

// handle the data received from the AJAX call
function handleFilterCategoryReceivedData(data) {
    try {
        jQuery($sortCategoryId)[0].outerHTML = jQuery(data)[0].outerHTML;
        jQuery($browseFilterDiv).unblock();
        $waitForCategory = false;
    }
    catch (err) {
    }
}


function browseTileGetCDIdsAsync(ajaxCallParams) {
    try {
        if (ajaxCallParams['action'] == "AddToProject") {
            // if we have to add it to a project we must make the AJAX call as we don't have the tracks info on client
            if ($BrowseHandlerPath !== "") {
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $BrowseHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleBrowseTileGetCDIdsReceivedData(data)
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("CDTracksIds"));
                    }
                });
            }
        }
    }
    catch (err) {
    }
}


////
function resultsRenderBrowseListTracksAsync(ajaxCallParams) {
    try {
        if ($BrowseHandlerPath !== "") {
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $BrowseHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleBrowseListTracks(data)
                },
                error: function(objAJAXRequest, strError) {
                    showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("BrowseListTracks"));
                }
            });

        }
    }
    catch (err) {
    }
}

function handleBrowseListTracks(data) {
    jQuery("#hiddenResultDiv").html(data);
    $browseListTracksDiv = $baseBrowseListTracksDiv + "_" + selectedBrowseListDiscId;
    try {
        jQuery($browseListTracksDiv).html(jQuery("#hiddenResultDiv").find('.browse_details')[0].innerHTML);
        bindBrowseListBehaviour();
        createdraggables();
        setControlSecurity();
        if (audioPlayer.lastPlaylistSelector == ".browseListViewCDTracks") {
            buildThePlaylistArrayFromElement(jQuery(".browseListViewCDTracks", data));
        }
    }
    catch (ex) {
    }
    jQuery("#hiddenResultDiv").html("");
}

///


// handle the data received from the AJAX call
function handleBrowseTileGetCDIdsReceivedData(data) {
    try {
        if (data != "") {
            var workAudioIds = "";
            var action = "";
            var cdName = "";
            var objData = jQuery(data);
            for (i = 0; i < objData.length; i++) {
                if (objData[i].id == 'workAudioIds') {
                    workAudioIds = objData[i].innerHTML;
                }
                else if (objData[i].id == 'action') {
                    action = objData[i].innerHTML;
                }
                else if (objData[i].id == 'cdName') {
                    cdName = objData[i].innerHTML;
                }
            }

            if (action == "AddToProject") {
                dragObject.id = workAudioIds;
                //dragObject.title = workAudioTitles;
                addTrackClick(workAudioIds, false);
                //PLAYERbuildThePlaylistArrayFromElement("<div>" + playList + "</div>", false);
            }
//            else if (action == "Download") {
//                var workAudioIdsList = workAudioIds.split(',');
//                var param = "";
//                var tracksQueue = "";
//                for (var i = 0; i < workAudioIdsList.length; i++) {
//                    param = workAudioIdsList[i];
//                    if (i != workAudioIdsList.length - 1) {
//                        param += ',';
//                    }
//                    tracksQueue += param;
//                }
//                AddTrackToQueue(tracksQueue, cdName, 0, 2);
//            }
        }
        isWSCallFinished = true;
    }
    catch (err) {
    }
}

function refreshBrowseCDResults() {
    var pageNo = getCookieParameter(browseCookieName, "SelectedPageNo");

    if ($BrowseHandlerPath != "") {
        blockHtmlElement($cdListDiv);
        jQuery($rowRelDiv).block({
            message: '<div><div></div><strong></strong></div>',
            css: { border: 'none',
                padding: '15px',
                backgroundColor: 'transparent',
                opacity: .8,
                color: '#fff'
            }
        });

        jQuery.ajax({
            type: "Get",
            url: $BrowseHandlerPath,
            data: ({ method: 'RefreshBrowseCDResults', mode: browseCDResultsmode, pageno: pageNo }),
            success: function(data) {
                handleBrowseCDReceivedData(data);
                createdraggables();
            },
            error: function(objAJAXRequest, strError) {
                showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("BrowseCD"));
                jQuery($cdListDiv).unblock();
            }
        });
    }

}

function handleBrowseCDReceivedData(data) {
    try {
        var tmpObj = jQuery("#hiddenResultDiv");
        tmpObj.html(data);

        var rowRel = tmpObj.find("#rowRel");
        if (rowRel.length > 0) {
            jQuery($rowRelDiv).replaceWith(rowRel[0].outerHTML);
        }

        var browseList = tmpObj.find("#browse_list_acc");
        if (browseList.length > 0) {
            jQuery($cdListDiv).replaceWith(browseList[0].outerHTML);
        }
        tmpObj.html("");

        if (browseCDResultsmode == "browse_list") {
            bindBrowseListBehaviour();
        }

        setControlSecurity();
    }
    catch (err) {
        alert(err);
    }
}

// do the actual AJAX call to the server
function resultsRenderBrowseTrackDetailsAsync(ajaxCallParams) {
    try {
        if ($SearchHandlerPath != "") {
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $SearchHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleBrowseTrackDetails(data)
                },
                error: function(objAJAXRequest, strError) {
                    isWSCallFinished = true;
                    showError(browseLightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("TrackDetails"));
                }
            });
        }

    }
    catch (err) {
    }
}

// handle the data received from the AJAX call
function handleBrowseTrackDetails(data) {
    $browseTrackVersionsInfoDiv = $baseBrowseTrackVersionsInfoDiv + '_' + browseSelectedWorkId;
    $browseMetadataInfoDiv = $baseBrowseMetadataInfoDiv + '_' + browseSelectedWorkId;
    $browseRelatedDiscsInfoDiv = $baseBrowseRelatedDiscsInfoDiv + '_' + browseSelectedWorkId;

    try {
        for (i = 0; i < jQuery(data).length; i++) {
            if (jQuery(data)[i].id == $baseBrowseTrackVersionsInfoDiv.replace('#', '')) {
                jQuery($browseTrackVersionsInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }

            if (jQuery(data)[i].id == $baseBrowseMetadataInfoDiv.replace('#', '')) {
                jQuery($browseMetadataInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }

            if (jQuery(data)[i].id == $baseBrowseRelatedDiscsInfoDiv.replace('#', '')) {
                jQuery($browseRelatedDiscsInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }

        }

        bindTracklistOverlay();

        //          bindResultsDetailsItemBehaviour();
        //        if (mode == "BrowseTile") {
        //            bindBrowseItemBehaviour();
        //        }
        //        else if (mode == "BrowseList") {
        //            bindBrowseListBehaviour();
        //        }

        if (jQuery("input[name=hasLyrics]", $browseTrackVersionsInfoDiv).val() == "true") {
            jQuery("p.btn_lyrics_cont", $trackDetailsDiv).css("display", "block");
        }
        var browse_more_info = "#BrowseMoreInfo_" + browseSelectedWorkId;

        if (jQuery(browse_more_info).attr("class") == "browse_moreinfo_box hide") {
            jQuery(browse_more_info).removeClass('hide');
        }
        else {
            jQuery(browse_more_info).addClass('hide');
        }

        bindBrowseItemBehaviour();
        createdraggables();
        setControlSecurity();
        if ((audioPlayer.lastPlaylistSelector == ".browseListViewCDTracks") || 
            (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList")) {
            buildThePlaylistArrayFromElement(jQuery(".playerPlayList", data));
        }
        jQuery(".cd_grp a#" + browseSelectedWorkId).unbind('click');
    }
    catch (err)
     { }

}


jQuery(document).ready(function() {
    jQuery(".tracklist_box .track a.add:not(.disabled)").live("click", function() {
        jQuery(".browse .pe_btn a.tabtitle").click();
        jQuery(".playlists .pe_btn a").click();
        createDragObj(jQuery(this));
        var idWorkAudio = jQuery(this).find('.hiddenTrackId').val();
        addTrackClick(idWorkAudio, false);
    });

    jQuery(".sub_result .info_box a.add:not(.disabled)").live("click", function() {
        createDragObj(jQuery(this).parent().parent().find("a.main"));
        var idWorkAudio = jQuery(this).find('.workAudioID').val();
        addTrackClick(idWorkAudio, false);
    });
    
    jQuery(".related_discs .cd img.left").live("click", function() {
        var cdId = jQuery(this).parent().find('.cdId').val();
        save_BrowseCDTileViewSelectedCDId(cdId);
        window.location = $BrowsedResultsLocation + "?SelectedCDId=" + cdId;
    });
});

var $waitForLoadProjects = false;

var $fullProjectDiv = "#prj1";
var $fullProjectBreadcrumbDiv = "#tbrgt";

var $totalFullProjectsNoDiv = "#totalProjectsNo";

var $projectDetailsDiv = "#ProjectDetails";

var sortFilter = "";
var $sentComm = null;

// This method will add a new project
function fullProjectAddProjectOnServer(idParent, prjName) {
    if ($ProjectHandlerPath !== "") {
        if (document.getElementById("sort") != null)
            sortFilter = document.getElementById("sort").value;
        $projectPanel = "fullProject";
        fullProjectRenderProjectsAsync({ command: 'AddProjectWithoutRefreshing', parentId: idParent, projectName: prjName, sortBy: sortFilter, projectPanelType: $projectPanel });
    }
}

function fullProjectDeleteProject(idProject) {
    if ($ProjectHandlerPath !== "") {
        $projectPanel = "fullProject";
        if (document.getElementById("sort") != null)
            sortFilter = document.getElementById("sort").value;
        fullProjectRenderProjectsAsync({ command: 'DeleteProjectWithoutRefreshing', projectId: idProject, sortBy: sortFilter, projectPanelType: $projectPanel });

    }
}

//This method will delete the track with id = idTrack
function fullProjectDeleteTrack(idProject, idTrack, projectLevel) {
    if ($ProjectHandlerPath !== "") {
        $projectPanel = "fullProject";
        if (document.getElementById("sort") != null)
            sortFilter = document.getElementById("sort").value;
        fullProjectRenderProjectsAsync({ command: 'DeleteTrackWithoutRefreshing', projectId: idProject, trackId: idTrack, sortBy: sortFilter, projectPanelType: $projectPanel, projectLevel: projectLevel });
    }
}

function getFullProjectTracks(projectId){
     if ($ProjectHandlerPath !== "") {
        fullProjectRenderProjectsAsync({ command: 'GetProjectTracks', projectId: projectId, projectPanelType: "fullProject" });
    }
}

function getFullProjectTracksForPrint(projectId){
     if ($ProjectHandlerPath !== "") {
        fullProjectRenderProjectsAsync({ command: 'GetProjectTracksForPrint', projectId: projectId, projectPanelType: "fullProject" });
    }
}


function displayProjectDetails(projName, modifDate, author, projId) {
    if ($ProjectHandlerPath !== "") {
        fullProjectRenderDetailsAsync({ command: 'ProjectDetails', projectName: projName, modifiedDate: modifDate, author: author, projectId: projId });
    }
}

function displayTrackDetails(trackName, modifDate, author, projId, workAudioId) {
    if ($ProjectHandlerPath !== "") {
        fullProjectRenderDetailsAsync({ command: 'TrackDetails', trackName: trackName, modifiedDate: modifDate, author: author, projectId: projId, workAudioId: workAudioId });
    }
}

// do the actual AJAX call to the server
function fullProjectRenderProjectsAsync(ajaxCallParams) {
    try {
        if ($waitForLoadProjects == false) {

            if ($ProjectHandlerPath !== "") {
                blockHtmlElement($fullProjectDiv);
                $waitForLoadProjects = true;
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        var command = data.substring(0, data.indexOf('|'));
                        switch (command) {
                            case 'AddProjectWithoutRefreshing':
                                handleAddFullProjectWithoutRefreshing(data.substring(data.indexOf('|')+1));
                                break;
                            case 'DeleteProjectWithoutRefreshing':
                                handleDeleteFullProjectWithoutRefreshing(data.substring(data.indexOf('|')+1));
                                break;
                            case 'DeleteTrackWithoutRefreshing':
                                handleDeleteTrackForFullProjWithRefreshing(data.substring(data.indexOf('|')+1));
                                break;
                            case 'GetProjectTracks':
                                handleGetFullProjectTracks(data.substring(data.indexOf('|')+1));
                                break;
                             case 'GetProjectTracksForPrint':
                                handleGetFullProjectTracksForPrint(data.substring(data.indexOf('|')+1));
                                break;
                            default:
                                handleReceivedData(data.substring(data.indexOf('|')+1));
                                break;
                        }
                        jQuery($fullProjectDiv).unblock();
                        bindProjectAccordion();
                        $waitForLoadProjects = false;
                        setControlSecurity();
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("FullProjectPanel"));
                        jQuery($fullProjectDiv).unblock();
                        $waitForLoadProjects = false;
                    }
                });
            }
        }
    }
    catch (err) {
    }
}

function fullProjectRenderDetailsAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath != "") {
            jQuery.ajax({
                type: "Get",
                url: $ProjectHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleProjectDetails(data);
                    setControlSecurity();
                },
                error: function(objAJAXRequest, strError) {
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("ProjectDetails"));
                }
            });
        }
    }
    catch (err) {
    }
}

function handleAddFullProjectWithoutRefreshing(data) {
    var objData = jQuery(data);
    if (objData.length > 0) {
        if (fullProject_Author == undefined) {
            fullProject_Author = "";
        }
        projName = objData.val();
        projId = objData.attr("name");
        var today = new Date();    
        var thisDate = today.format(generalDateFormat);
        addProjectToFullProject(projName, projId, fullProject_Author, thisDate);
    }
   
    setTotalNumberOfFullProjects();
    
}

function handleDeleteFullProjectWithoutRefreshing(projectID) {
    deleteFullProjectWithoutRefreshing(projectID);
}

function deleteFullProjectWithoutRefreshing(projectID){
    if (projectID > 0) {
        jQuery("#prj1 .project .prj_link input[value='" + projectID + "']").parent().parent().parent().parent().next().remove();
        jQuery("#prj1 .project .prj_link input[value='" + projectID + "']").parent().parent().parent().parent().remove();
        
        getSelectedFullProjectId();
        createBreadcrumb();
    }
    setTotalNumberOfFullProjects();  
}

function handleDeleteTrackForFullProjWithRefreshing(data) { 
    var objData = jQuery(data);
    if (objData[0].innerHTML == "True") {
     var projectTracks;
        if (objData[3].innerHTML == "1"){
            projectTracks = jQuery("#prj1 .project .levelOne .prj_link .prj1 input[value='" + objData[2].innerHTML + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        else if (objData[3].innerHTML == "2"){
            projectTracks = jQuery("#prj1 .project .levelTwo .prj_link .prj2 input.ProjectId[value='" + objData[2].innerHTML + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        else if (objData[3].innerHTML == "3"){
            projectTracks = jQuery("#prj1 .project .prj .prj2a .levelThree .prj_link input.ProjectId[value='" + objData[2].innerHTML + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        projectTracks.find('.track_item .actions .deletebtn input.WorkAudioId[value=' + objData[1].innerHTML + ']').parent().parent().parent().parent().remove();
    }
}

function handleGetFullProjectTracks(data){
    if (data.length > 0){
        var projectId = data.substring(0, data.indexOf('|'));
        var trackList = data.substring(data.indexOf('|')+ 1);
        
        var projTrackListDiv = "#prj1 .project .prj #prjList_" + projectId;
        if (trackList.length > 0){
            var projTrackList = jQuery(projTrackListDiv);
            projTrackList[0].innerHTML = trackList;
            //bindTrackElementBeahaviour();
            bindProjectTrackButtonBehaviour(projTrackList.find(".actions"));
            if (projTrackList.find(".track_item").length > 0){
                document.getElementById('prjList_' + projectId).style.display = "block";
            }
        }
    }
}

function handleGetFullProjectTracksForPrint(data){
     if (data.length > 0){
        var projectId = data.substring(0, data.indexOf('|'));
        var trackList = data.substring(data.indexOf('|')+ 1);
    
        var projContent =  "<div class=\"project\">" + jQuery('#prjList_'+ projectId).parent().parent().html()+ "</div>";
        var obj = jQuery(projContent);
        obj.find('#prjList_'+ projectId)[0].innerHTML = trackList;
        jQuery('.prj2a', obj).remove();
        jQuery(obj).find('#prjList_' + projectId)[0].style.cssText = "DISPLAY: block;"
        jQuery(obj).find('#prjList_' + projectId).parent()[0].style.cssText = "DISPLAY: block;"
        
        prepareForPrintHavingTheContent(obj.html());
        jQuery("#print").find(".prj").show();
        window.print();
        return false;
    }
}


// handle the data received from the AJAX call
function handleReceivedData(data) {
    try {
        jQuery($fullProjectDiv).replaceWith(data);
        setTotalNumberOfFullProjects();
        bindProjectsBehaviour();
        bindOverlayBehavior(); 
        expanded = false;
        jQuery('.btn_expand').removeClass('btn_collapse');
        createBreadcrumb();
    }
    catch (err) {
    }
}

function setTotalNumberOfFullProjects() {
    var nrProjects = jQuery(".projects .prj_link").length;
    jQuery("#totalProjectsNo").html(jQuery("#totalProjectsNo").html().substring(0, jQuery("#totalProjectsNo").html().indexOf(':') + 2) + nrProjects);
}

function handleProjectDetails(data) {
    var projDetDiv = jQuery($projectDetailsDiv);
    projDetDiv.html(data);
    var projectId = projDetDiv.find("#projectId").val();
    var projectWorkAudioId = projDetDiv.find("#projectWorkAudioId").val();
    var note = "";
    if (projectWorkAudioId > 0){ //track note
        var today = new Date();
        var thisDate = today.format(generalDateFormat);
        var thisTime = today.getHours() + ":" + today.getMinutes();
        thisTime = convertTime(thisTime);
        thisDate += " " + thisTime;
        
        var trackNoteId = "trackNote_" + projectWorkAudioId + "_" + projectId;
        var trackNote = jQuery(".project").find("input[class=" + trackNoteId + "]")[0].value;
        if (trackNote == ""){
            note = thisDate + ' - ';
        } else {
            note = trackNote + "\n" + thisDate + ' - ';
        }

    }
    else { //project note
        note = jQuery(".project .wrapper").parent().find("input[value=" + projectId + "]").parent().find(".details")[0].innerHTML;
    }
    
    jQuery("#overlay3 #projectDetailsNote").val(note.replace(/^\s\s*/, '').replace(/\s\s*$/, ''));
                  
    bindEventsForProjectDetails();
}

function addProjectToFullProject(newProjName, newProjId, newProjAuthor, newProjDate) {

    level = selectedFullProjectLevel;
    parentId = selectedFullProjectId;
    var sharedWithText = fullProject_SharedWithHoverText.format(0);

    if (level == 0) {
        newFullProjHTMLTag = "<div class=\"project ui-droppable\">" +
                                "<div class=\"project_itm levelOne\">" +
                                    "<div class=\"rel\">" +
                                        "<div class=\"abs actions hide\" style=\"\">" +
                                            "<a class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\" href=\"javascript:void(0);\"><span>></span> </a>" +
                                            "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText + "\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                            "<a class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\" href=\"javascript:void(0);\"><span>P</span></a>" +
                                            "<a class=\"share trig\" rel=\"#overlay1\" title=\"" + fullProject_ShareProjectHoverText + "\" href=\"javascript:void(0);\"><span>S</span> </a>" +
                                            "<a class=\"email trig\" rel=\"#overlay2\" title=\"" + fullProject_EmailProjectHoverText + "\" href=\"javascript:void(0);\"><span> E</span> </a>" +
                                            "<a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\"" + fullProject_ProjectDetailsHoverText + "\" rel=\"#overlay3\"><span>N</span></a>" +
                                            "<a class=\"deletebtn\" title=\"" + fullProject_DeleteProjectHoverText + "\" href=\"javascript:void(0);\">" +
                                                "<span>X</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                        "<div id=\"ProjectLink_" + newProjId + "\" class=\"prj_link\">" +
                                            "<a class=\"prj1\" href=\"javascript:void(0);\"><span class=\"wrapper\"><span " +
                                                " class=\"title\">" + newProjName + "<span class=\"shared\" style=\"display: none;\">" +
                                                    "<img title=\"" + sharedWithText + "\" alt=\"" + sharedWithText + "\" src=\"" + $CDNFilesRootPath + "images/content/btn_usr.gif\" />" +
                                                    "<input class=\"noOfSharedUsers\" type=\"hidden\" value=\"0\" />" +
                                                "</span></span><span class=\"auth\">" + newProjAuthor + "</span><span class=\"date\">" +
                                                    newProjDate + "</span> <span class=\"details\"></span>" +
                                                "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\" />" +
                                            "</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                    "</div>" +
                                "</div>" +
                                "<div class=\"prj\" style=\"display: none;\" ><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>" +
                            "</div>";
                            
           
        if (jQuery("#prj1 .project").length > 0){
            jQuery("#prj1 .project:last").after(newFullProjHTMLTag);  
        }
        else{
            jQuery("#prj1").html(newFullProjHTMLTag);
        }
            
        jQuery("#prj1 .project:last").find("a.trig[rel]").overlay({
            top: "30%"
        });    
        
        bindProjectsBehaviour();
        bindOverlayBehavior();
           
    } else if (level == 1) {
        newFullProjHTMLTag = "<div class=\"project_itm levelTwo\">" +
                                    "<div class=\"rel\">" +
                                        "<div class=\"abs actions hide\" style=\"\">" +
                                            "<a href=\"javascript:void(0);\" class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\">" +
                                                "<span>></span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText + "\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\">" +
                                                "<span>P</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"share trig\" title=\""+ fullProject_ShareProjectHoverText +"\" rel=\"#overlay1\">" +
                                                "<span>S</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"email trig\" title=\""+ fullProject_EmailProjectHoverText +"\" rel=\"#overlay2\">" +
                                                "<span>E</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\""+ fullProject_ProjectDetailsHoverText +"\" rel=\"#overlay3\">" +
                                                "<span>I</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"deletebtn\" title=\""+ fullProject_DeleteProjectHoverText +"\">" +
                                                "<span>X</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                        "<div class=\"prj_link\" id=\"ProjectLink_" + newProjId + "\">" +
                                            "<a href=\"javascript:void(0);\" class=\"prj2\">" +
                                                "<span class=\"wrapper\">" +
                                                    "<span class=\"title\">" + newProjName + "</span>" +
                                                    "<span class=\"auth\">" + newProjAuthor + "</span>" +
                                                    "<span class=\"date\">" + newProjDate + "</span>" +
                                                    "<span class=\"details\"></span> " +
                                                    "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\"/>" +
                                                "</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\"/>" +
                                            "</a>" +
                                        "</div>" +
                                    "</div>" +
                                "</div>" +
                                "<div class=\"prj\" style=\"display: none;\" ><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>";

        var $selectedSubProj = jQuery("#prj1 .project .project_itm .prj_link .prj1 input[value='" + parentId + "']").parent().parent().parent().parent().next();

        if ($selectedSubProj.find('.prj2a').length > 0) {

            $selectedSubProj.find(".prj2a:first").append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a:first").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            bindOverlayBehavior();
           
            $selectedSubProj.find(".prj2a:first .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        } else {

            newFullProjHTMLTag = "<div class=\"prj2a project_itm\">" + newFullProjHTMLTag + "</div>";
            $selectedSubProj.append(newFullProjHTMLTag);
           
            $selectedSubProj.find(".prj2a:first").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            
            $selectedSubProj.find(".prj2a:first .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
            bindProjectsBehaviour();
            bindOverlayBehavior();
        }
    } else if (level == 2) {
        newFullProjHTMLTag = "<div class=\"project_itm levelThree\">" +
                                "<div class=\"rel\">" +
                                    "<div class=\"abs actions hide\" style=\"\">" +
                                        "<a href=\"javascript:void(0);\" class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\">" +
                                            "<span>></span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText +"\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                        "<a href=\"javascript:void(0);\" class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\">" +
                                            "<span>P</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"share trig\" title=\"" + fullProject_ShareProjectHoverText + "\" rel=\"#overlay1\">" +
                                            "<span>S</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"email trig\" title=\"" + fullProject_EmailProjectHoverText + "\" rel=\"#overlay2\">" +
                                            "<span>E</span>" +
                                        "</a>" +
                                        " <a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                        "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\"" + fullProject_ProjectDetailsHoverText + "\" rel=\"#overlay3\">" +
                                            "<span>I</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"deletebtn\" title=\"" + fullProject_DeleteProjectHoverText + "\">" +
                                            "<span>X</span>" +
                                            "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                        "</a>" +
                                    "</div>" +
                                    "<div class=\"prj_link\" id=\"ProjectLink_" + newProjId + "\">" +
                                        "<a href=\"javascript:void(0);\" class=\"prj2 prj3\">" +
                                            "<span class=\"wrapper\">" +
                                                "<span class=\"title\">" + newProjName + "</span> " +
                                                "<span class=\"auth\">" + newProjAuthor + "</span> " +
                                                "<span class=\"date\">" + newProjDate + "</span>" +
                                                "<span class=\"details\"></span>" +
                                                "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\"/>" +
                                            "</span>" +
                                            "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\"/>" +
                                        "</a>" +
                                    "</div>" +
                                "</div>" +
                            "</div>" +
                            "<div class=\"prj\" style=\"display: none;\" ><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>";

        var $selectedSubProj = jQuery("#prj1 .project .prj .prj2a .project_itm .prj_link input[value='" + parentId + "']").parent().parent().parent().parent().next();

        if ($selectedSubProj.find('.prj3').length > 0) {

            $selectedSubProj.find(".prj2a.prj3.project_itm").append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a.prj3.project_itm").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            bindOverlayBehavior();
            
            $selectedSubProj.find(".prj2a.prj3.project_itm .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        } else {

            newFullProjHTMLTag = "<div class=\"prj2a prj3 project_itm\">" + newFullProjHTMLTag + "</div>";
            $selectedSubProj.append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a.prj3").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            bindOverlayBehavior();
           
            $selectedSubProj.find("a.trig[rel]").overlay({
                top: "30%"
            });
        }
    }
}


function projectsGetTrackDetails(workAudioId, workGroupingId, title) {
    if ($SearchHandlerPath !== "") {
        mode = "Projects";
        resultsRenderProjectTrackDetailsAsync({ command: 'GetTrackDetails', workAudioId: workAudioId, mode: "Projects", workGroupingId: workGroupingId, title: title });
    }
}

// do the actual AJAX call to the server
function resultsRenderProjectTrackDetailsAsync(ajaxCallParams) {
    try {
        if ($SearchHandlerPath != "") {
            blockHtmlElement($fullProjectDiv);
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $SearchHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleProjectsTrackDetails(data);
                    jQuery($fullProjectDiv).unblock();
                },
                error: function(objAJAXRequest, strError) {
                    isWSCallFinished = true;
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("TrackDetails"));
                    jQuery($fullProjectDiv).unblock();
                }
            });
        }

    }
    catch (err) {
    }
}

function handleProjectsTrackDetails(data){
    var cdDetails = "#CdDetails" + "_" + selectedFullProjectId + '_' + prjWorkAudioId;
    var projTrackVersionsInfoDiv = "#TrackVersionsInfo" + '_' + selectedFullProjectId + '_' + prjWorkAudioId;
    var metatitleLabel = "#MetaTitleLabel" + "_" + selectedFullProjectId + '_' + prjWorkAudioId;
    var projMetadataInfoDiv = "#MetadataInfo" + '_' + selectedFullProjectId + '_' + prjWorkAudioId;   
    
    try {
        for (i = 0; i < jQuery(data).length; i++) {
            if (jQuery(data)[i].id == "CdDetails") {
                jQuery(cdDetails).html(jQuery(data)[i].innerHTML);
                bindObjTracklistOverlay(jQuery(cdDetails));                                
            }
            if (jQuery(data)[i].id ==  "TrackVersionsInfo") {
                jQuery(projTrackVersionsInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }
            if (jQuery(data)[i].id == "MetaTitleLabel".replace('#', '')) {
                jQuery(metatitleLabel).html(jQuery(data)[i].innerHTML);
            }
            if (jQuery(data)[i].id == "MetadataInfo") {
                jQuery(projMetadataInfoDiv)[0].innerHTML = jQuery(data)[i].innerHTML;
            }
            if (jQuery("input[name=hasLyrics]", projTrackVersionsInfoDiv).val() == "true") {
            jQuery("p.btn_lyrics_cont", cdDetails).css("display", "block");

        }
        }

        jQuery(".prj_list .track_item .tracklist_box .add").hide();

        //bindResultsDetailsItemBehaviour();
        //bindTracklistOverlay();

        setControlSecurity();
        if ((audioPlayer.lastPlaylistSelector == ".fullProjectPlayerPlayList") || 
            (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList")) {
            buildThePlaylistArrayFromElement(jQuery(".playerPlayList", "<div>" + data + "</div>"));
        }        
        //PLAYERbuildThePlaylistArrayFromTheDiv(false);
    }
    catch (err)
     { }

}



function bindBuddyAddButton() {
 jQuery("#addbuddy").unbind('click').click(function(){
    validateAndAddBuddy();
 })
}

function bindBuddySortCombo() {
 jQuery("#sortbuddies").unbind('change').change(function(){
    GetBuddies();
 })
}

function validateBuddyEmail(validatedFieldId)
{
    var filter=/^.+@.+\..{2,3}$/        
    var fieldValue = document.getElementById(validatedFieldId).value;

    if (filter.test(fieldValue)) return true;
    else return false;
}    

function validateAndAddBuddy()
{
    var valBoxTop = "<ul>";
    var valBoxBotom = "</ul>";
    var valBox = valBoxTop;
    
    if (document.getElementById("name").value == "") valBox = valBox + mandatoryFieldBuddyValidationMsg;
    if (validateBuddyEmail("email") == false) valBox = valBox + invalidEmailBuddyValidationMsg;    
    if (valBox != valBoxTop) 
    {
      valBox = valBox + valBoxBotom;
      document.getElementById("errorMsg").innerHTML = valBox;
      document.getElementById("errorMsg").className = "error";
    }
    else 
    {
      AddBudy(document.getElementById("email").value, document.getElementById("name").value);
      document.getElementById("errorMsg").innerHTML = "";
      document.getElementById("errorMsg").className = "";
    }
}

 doDeleteBuddyCallback = function doDeleteBuddy(currentObject){
      DeleteBudy(currentObject);
      document.getElementById("errorMsg").innerHTML = "";
      document.getElementById("errorMsg").className = "";
      api_confirm.close();
 }

function deleteBudyMsg(buddyUserId) {
    var buddyName = "";
    buddyName = jQuery("#buddyName_" + buddyUserId).find('.bdName').val();
   
    showConfirmation(manageBuddies_lightboxConfirmationMessageTitle, removeBuddyMsg.format(buddyName), doDeleteBuddyCallback, buddyUserId); 
}




var $waitForBuddies = false;
var $buddiesDiv = "#buddies";


function AddBudy(buddyEmail, buddyAlias) {
    if ($ProjectHandlerPath !== "") {
        if (document.getElementById("sortbuddies") != null)
            sortFilter = document.getElementById("sortbuddies").value;

        buddyRenderAsync({ command: 'AddBudy', buddyEmail: buddyEmail, buddyAlias: buddyAlias, sortBy: sortFilter });
    }
}

function DeleteBudy(buddyUserId) {
    if ($ProjectHandlerPath !== "") {
        if (document.getElementById("sortbuddies") != null)
            sortFilter = document.getElementById("sortbuddies").value;

        buddyRenderAsync({ command: 'DeleteBudy', buddyUserId: buddyUserId, sortBy: sortFilter });
    }
}

function GetBuddies() {
    if ($ProjectHandlerPath !== "") {
        if (document.getElementById("sortbuddies") != null)
            sortFilter = document.getElementById("sortbuddies").value;

        buddyRenderAsync({ command: 'GetBuddies', sortBy: sortFilter });
    }
}

function buddyRenderAsync(ajaxCallParams) {
    try {
        if ($waitForBuddies == false) {

            if ($ProjectHandlerPath !== "") {
                blockHtmlElement($buddiesDiv);
                $waitForBuddies = true;
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleBuddyReceivedData(data);
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(manageBuddies_lightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("Buddies"));
                        jQuery($buddiesDiv).unblock();
                        $waitForBuddies = false;
                        bindBuddySortCombo();
                    }
                });
            }
        }
    }
    catch (err) {
    }
}

// handle the data received from the AJAX call
function handleBuddyReceivedData(data) {
    try {
        if (jQuery(data)[0].innerHTML != 'False') {
            jQuery("#buddyView")[0].outerHTML = data;
            document.getElementById("email").value = "";
            document.getElementById("name").value = "";            
        } else {
            document.getElementById("errorMsg").innerHTML = "<ul>" + buddyNotFoundMessage.format(jQuery("#email").val()) + "</ul>";
            document.getElementById("errorMsg").className = "error";
        }
        
        jQuery($buddiesDiv).unblock();
        $waitForBuddies = false;
        bindBuddySortCombo();
        bindBuddyAddButton();       
    }
    catch (err) {
    }
}



function saveProjectDetails(projName, projNote, projId) {
    if ($ProjectHandlerPath !== "") {
        if (projNote.toString().length > 1700)
        {
            projNote = projNote.toString().substring(0, 1700);
        }
        fullProjectSaveProjectDetailsAsync({ command: 'SaveProjectDetails', projectName: projName, projectNote: projNote, projectId: projId });
    }
}

function saveTrackNotes(trackNote, projId, workAudioId) {
    if ($ProjectHandlerPath !== "") {
        if (trackNote.toString().length > 1700)
        {
            trackNote = trackNote.toString().substring(0, 1700);
        }
        fullProjectSaveTrackNotesAsync({ command: 'SaveTrackNotes', trackNote: trackNote, projectId: projId, trackId: workAudioId });
    }
}


// do the actual AJAX call to the server
function fullProjectSaveProjectDetailsAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            jQuery.ajax({
                type: "Get",
                url: $ProjectHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    refreshProjectInFullProjectPanel(data);
                    setControlSecurity();
                },
                error: function(objAJAXRequest, strError) {
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("SaveProjectDetails"));
                }
            });
        }
    }
    catch (err) {
    }
}

// do the actual AJAX call to the server
function fullProjectSaveTrackNotesAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            jQuery.ajax({
                type: "Get",
                url: $ProjectHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    refreshTrackNoteInFullProjectPanel(data);
                    setControlSecurity();
                },
                error: function(objAJAXRequest, strError) {
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("SaveTrackNotes"));
                }
            });
        }
    }
    catch (err) {
    }
}

function refreshProjectInFullProjectPanel(data) {
    jQuery(".sortbox select").show();

    //  update the information in the full project panel
    var projectLinkId = "#ProjectLink_" + overlayProjectId;

    var sharedHTML = "";
    //    if (jQuery(".project_itm .rel " + projectLinkId + " .title").find('span').length > 0)
    //    {
    //        sharedHTML = jQuery(".project_itm .rel " + projectLinkId + " .title").find('span')[0].outerHTML;
    //    }
    
    jQuery(".project_itm .rel " + projectLinkId + " .title").text(jQuery(data)[0].innerHTML);
    
    //jQuery(".project_itm .rel " + projectLinkId + " .title")[0].innerHTML = jQuery(data)[0].innerHTML + sharedHTML;
  
    var shortDescription = "";
    shortDescription = jQuery(data)[1].innerHTML;
  
    jQuery(".project_itm .rel " + projectLinkId + " .details")[0].innerHTML = shortDescription;

    var descriptionID = " .Description_" + overlayProjectId;
    jQuery(".project_itm .rel " + projectLinkId + descriptionID)[0].value = jQuery(data)[1].innerHTML;

    bindProjectsBehaviour();

}


function refreshTrackNoteInFullProjectPanel(data) {
    var trackNoteId = ".trackNote_" + overlayWorkAudioId + "_" + overlayProjectId;

    jQuery(".track_item .rel a.main " + trackNoteId)[0].value = jQuery(data)[0].innerHTML;

}


/**
*Check if the player has to strat playing
**/
jQuery(document).ready(function() {
    setTimeout("audioPlayer.LoadState(true);", 1000);
    eraseCookie('loginStatePageNo'); /*Mentain page nr on SerachResults for login*/
});


var audioPlayer = new function() {
    this.clipIndex = -1;
    this.clipId = -1;
    this.lastPlaylistSelector = "";
    this.loadedPlayListLength = -1;
    this.jmpToFirst = false;

    var clipIndexCookName = 'playerClipIndex';
    this.SaveClipIndex = function() {
        createCookie(clipIndexCookName, this.clipIndex, 1);
    };
    this.LoadClipIndex = function() {
        var val = readCookie(clipIndexCookName);
        if (val == null) this.clipIndex = -1; /*def value*/
        else this.clipIndex = val;
        eraseCookie(clipIndexCookName);
    };

    var clipIdCookName = 'playerClipId';
    this.SaveClipId = function() {
        createCookie(clipIdCookName, this.clipId, 1);
    };
    this.LoadClipId = function() {
        var val = readCookie(clipIdCookName);
        if (val == null) this.clipId = -1; /*def value*/
        else this.clipId = val;
        eraseCookie(clipIdCookName);
    };

    var lastPlaylistSelectorCookName = 'playerLastPlaylistSelector';
    this.SaveLastPlaylistSelector = function() {
        createCookie(lastPlaylistSelectorCookName, this.lastPlaylistSelector, 1);
    };
    this.LoadLastPlaylistSelector = function() {
        var val = readCookie(lastPlaylistSelectorCookName);
        if (val == null) this.lastPlaylistSelector = ""; /*def value*/
        else this.lastPlaylistSelector = val;
        eraseCookie(lastPlaylistSelectorCookName);
    };

    this.LoadPlayList = function(selector, clipId) {
        this.lastPlaylistSelector = selector;
        var obj = jQuery(selector);
        this.clearTrackArray();
        buildThePlaylistArrayFromElement(obj);
        if ((clipId != undefined) && (clipId != null) && (clipId > 0)) playTrackById(clipId);
    };
    this.clearTrackArray = function() {
        trackArray = [];
        trackIdsArray = [];
    };

    this.LoadState = function(startPlaying) {
        this.LoadClipId();
        this.LoadClipIndex();
        this.LoadLastPlaylistSelector();
        if ((startPlaying == true) && (this.clipId > 0) && (this.lastPlaylistSelector != "")) {
            this.LoadPlayList(this.lastPlaylistSelector, this.clipId);
            if (audioPlayer.loadedPlayListLength <= 0) {
                this.clipId = -1;
                this.clipIndex = -1;
                this.lastPlaylistSelector = "";
            }
        }
    };

    this.SaveState = function() {
        this.SaveClipId();
        this.SaveClipIndex();
        this.SaveLastPlaylistSelector();
    };

}

function buildThePlaylistArrayFromElement(element) {
    if ((element == undefined) || (element == null) || (element.length <= 0)) return;
    jQuery("input[type='hidden']", element).each(function(i) {
        var obj = jQuery(this);
        // make sure there's only one insance of this track in the array
        var val = obj[0].value;
        var itemIndex = jQuery.inArray(val, trackIdsArray);
        if (itemIndex < 0) {
            trackArray = trackArray.concat([{ url: $CDNGeneralMusicLocation + obj[0].name + ".mp3", clipTitle: obj[0].title, clipId: obj[0].value}]);
            trackIdsArray.push(val);
        }
    });
}

function addTrackToPlaylist(url, title, id) {
    var itemIndex = jQuery.inArray(id, trackIdsArray);
    if (itemIndex < 0) {
        trackArray = trackArray.concat([{ url: url, clipTitle: title, clipId: id}]);
        trackIdsArray.push(id);
    }
}

﻿var $shareProjectDiv = "#ShareProject";

function displayShareProjectsPanel(projName, projId, selectedSortBy) {
    if ($ProjectHandlerPath !== "") {
        fullProjectRenderShareProjectPanelAsync({ command: 'FullProjectBuddies', projectName: projName, projectId: projId, sortBy: selectedSortBy });
    }
}

function fullProjectAddBuddy(projName, projId, buddyEmailAddress, buddyName, selectedSortBy) {
    if ($ProjectHandlerPath !== "") {
        fullProjectRenderShareProjectPanelAsync({ command: 'FullProjectAddBuddy', projectName: projName, projectId: projId, buddyEmail: buddyEmailAddress, buddyAlias: buddyName, sortBy: selectedSortBy });
    }
}

function fullProjectDeleteBuddy(projName, projId, buddyUserId, selectedSortBy) {
    if ($ProjectHandlerPath !== "") {
        fullProjectRenderShareProjectPanelAsync({ command: 'FullProjectDeleteBuddy', projectName: projName, projectId: projId, buddyUserId: buddyUserId, sortBy: selectedSortBy});
    }
}

function fullProjectShareProject(projId, sharedUserIds, sharedUserAddresses, projectTitle) {
    if ($ProjectHandlerPath !== "") {
        try {
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $ProjectHandlerPath,
                data: { command: 'FullProjectShareProject', projectId: projId, sharedUserIds: sharedUserIds, sharedUserAddresses: sharedUserAddresses, projectTitle: projectTitle},
                success: function(data) {
                    refreshProjectTitleInFullProjectPanel(data);
                    setControlSecurity();
                },
                error: function(objAJAXRequest, strError) {
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("ShareProject"));
                }
            });
        }
        catch (err) {
        }
    }
}


function fullProjectRenderShareProjectPanelAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            blockHtmlElement($shareProjectDiv);
            // make the AJAX call
            jQuery.ajax({
                type: "Get",
                url: $ProjectHandlerPath,
                data: ajaxCallParams,
                success: function(data) {
                    handleShareProjectData(data);
                    setControlSecurity();
                },
                error: function(objAJAXRequest, strError) {
                    showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("ShareProject"));
                    jQuery($shareProjectDiv).unblock();
                }
            });
        }
    }
    catch (err) {
    }
}


function handleShareProjectData(data) {
    if (jQuery(data)[0].innerHTML == '-1'){
        showError(projects_lightboxErrorMesageTitle, shareProject_buddyNotFoundMessage);
        jQuery($shareProjectDiv).unblock();
    }
    else if (jQuery(data)[0].innerHTML == '-2'){
        showError(projects_lightboxErrorMesageTitle, shareProject_addYourselfAsBuddyMessage);
        jQuery($shareProjectDiv).unblock();
    }
    else{
        jQuery($shareProjectDiv).html(data);
        //bindOverlayBehavior();
         bindEventsForSharedProject();  
    }
    
    refreshProjectShareIconInFullProjectPanel(data);
}

function refreshProjectShareIconInFullProjectPanel(data){
    var projectId = jQuery(data).find("#projectId").val();
    var projectDiv = "#ProjectLink_" + projectId; 
    var deleteSharedUser = "false";
    
    if (jQuery(projectDiv).find('.deleteSharedUser').length > 0)
    {
       deleteSharedUser = jQuery(projectDiv).find('input[class=deleteSharedUser]').val();
    }
    if (deleteSharedUser == "true"){
        if (jQuery(projectDiv).find('input[class=noOfSharedUsers]').length > 0){
            var noOfSharedUsers = parseInt(jQuery(projectDiv).find('input[class=noOfSharedUsers]').val());
            if (noOfSharedUsers >= 1){
                noOfSharedUsers = noOfSharedUsers - 1;
                jQuery(projectDiv).find('input[class=noOfSharedUsers]').val(noOfSharedUsers);
            }
            jQuery(projectDiv).find('input[class=deleteSharedUser]').val('false');
            
            var sharedWithText = fullProject_SharedWithHoverText.format(noOfSharedUsers);
            jQuery(".project_itm " + projectDiv).find('img')[0].title = sharedWithText;
            jQuery(".project_itm " + projectDiv).find('img')[0].alt = sharedWithText;
            
            if (noOfSharedUsers > 0){
                  jQuery(".project_itm " + projectDiv + " .shared")[0].style.display = "inline";
            }
            else{
                jQuery(".project_itm " + projectDiv + " .shared")[0].style.display = "none";
            }
            
        }
    }

}

function refreshProjectTitleInFullProjectPanel(data) {
    var noOfSharedUsers = 0;
    var restrictedUsersAddresses = "";
    if (jQuery(data)[0].id == 'noOfSharings'){
        noOfSharedUsers = jQuery(data)[0].innerHTML;
    }
    else if (jQuery(data)[0].id == 'restrictedUsersAddresses'){
        restrictedUsersAddresses = jQuery(data)[0].innerHTML;
    }
    
    if(restrictedUsersAddresses == ""){
        var projId = jQuery("#ShareProject .row .row input#projectId")[0].value;
        var projLinkId = "#ProjectLink_" + projId;
        

        if (jQuery(".project_itm " + projLinkId).find('input[class=noOfSharedUsers]').length > 0)
        {
            noOfSharedUsers = parseInt(jQuery(data)[0].innerHTML);
            jQuery(".project_itm " + projLinkId).find('input[class=noOfSharedUsers]').val(noOfSharedUsers);
            var sharedWithText = fullProject_SharedWithHoverText.format(noOfSharedUsers);
            
            jQuery(".project_itm " + projLinkId).find('img')[0].title = sharedWithText;
            jQuery(".project_itm " + projLinkId).find('img')[0].alt = sharedWithText;
            
            //set the image visible
            if (noOfSharedUsers > 0){
                jQuery(".project_itm " + projLinkId + " .shared")[0].style.display = "inline";
            }
            else{
                jQuery(".project_itm " + projLinkId + " .shared")[0].style.display = "none";
            }
            
        }
    }
    else{
        showError(projects_lightboxErrorMesageTitle, projects_shareProjectToRegisteredErrMsg.format(restrictedUsersAddresses));
    }
    
    
}


﻿var $emailProjectDiv = "#EmailProject";

function displayEmailProjectPanel(projName, projId, selectedSortBy, emailTrack, workAudioId){
    if ($ProjectHandlerPath !== ""){
        fullProjectRenderEmailProjectPanelAsync({command: 'FullProjectBuddies', projectName: projName, projectId: projId, sortBy: selectedSortBy, panel:"EmailProject", emailTrack: emailTrack, workAudioId: workAudioId});
    }
}

function fullProjectEmailProjectAddBuddy(projName, projId, buddyEmailAddress, buddyName, selectedSortBy){
    if ($ProjectHandlerPath !== ""){
        fullProjectRenderEmailProjectPanelAsync({command: 'FullProjectAddBuddy', projectName: projName, projectId: projId, buddyEmail: buddyEmailAddress, buddyAlias: buddyName, sortBy: selectedSortBy, panel:"EmailProject"});
    }
}

function fullProjectEmailProjectDeleteBuddy(projName, projId, buddyUserId, selectedSortBy){
    if ($ProjectHandlerPath !== ""){
        fullProjectRenderEmailProjectPanelAsync({command: 'FullProjectDeleteBuddy',projectName: projName, projectId: projId, buddyUserId: buddyUserId, sortBy: selectedSortBy, panel:"EmailProject"});
    }
}

function fullProjectEmailProject(projId, emailedUsers, projectTitle, emailTrack, workAudioId){
    if ($ProjectHandlerPath !== ""){
        try {
            // make the AJAX call
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: {command: 'FullProjectEmailProject', projectId: projId, emailedUsers: emailedUsers, projectName: projectTitle, emailTrack: emailTrack, workAudioId: workAudioId },
                    success: function(data) {
                        handleSendProject(data);
                        },
                    error: function( objAJAXRequest, strError ){
                            showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("EmailProject"));
                       }
                   });
        }
        catch (err) {
        }
    
    }
}


function handleSendProject(data){
    if (data == 'false'){
        showError(projects_lightboxErrorMesageTitle, emailProject_sendEmptyProjectMessage);    
    }
}

function fullProjectRenderEmailProjectPanelAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            blockHtmlElement($emailProjectDiv);
            // make the AJAX call
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleEmailProjectData(data);
                        },
                    error: function( objAJAXRequest, strError ){
                            showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("EmailProject"));
                            jQuery($emailProjectDiv).unblock();
                       }
                   });
        }
    }
    catch (err) {
    }
}

function handleEmailProjectData(data){
    if (jQuery(data)[0].innerHTML == '-1'){
        showError(projects_lightboxErrorMesageTitle, emailProject_buddyNotFoundMessage);
        jQuery($emailProjectDiv).unblock();
    }
    else if (jQuery(data)[0].innerHTML == '-2'){       
        showError(projects_lightboxErrorMesageTitle, emailProject_addYourselfAsBuddyMessage);
        jQuery($emailProjectDiv).unblock();
    }
    else{
        jQuery($emailProjectDiv).html(data);
        //bindOverlayBehavior();
        bindEventsForEmailProject();  
    }
 
}

﻿var $playListDetailsClass = ".playlist_details";
var $playList_moreinfo_boxId = "#PlaylistMoreInfo_";

var $playlist_baseCDDetailsDiv = "#CdDetails";
var $playlist_baseTrackVersionsInfoDiv = "#TrackVersionsInfo";
var $playlist_baseMetaTitleLabelDiv = "#MetaTitleLabel";
var $playlist_baseMetadataInfoDiv = "#MetadataInfo";

function getPlaylistTracksFromServer(playListId, playListName, playListDescription, playListCreatedBy, playlistCreatedDate) {
    if ($PlaylistHandlerPath !== "") {
        try {
            blockHtmlElement($playListDetailsClass);
            jQuery.ajax({
                type: "Get",
                url: $PlaylistHandlerPath,
                data: { method: 'GetPlaylistTrack', playListId: playListId, playListName: playListName, playListDescription: playListDescription, playListCreatedBy: playListCreatedBy, playlistCreatedDate: playlistCreatedDate },
                success: function(data) {
                    handleReceivedPlaylistTracksFromServer(data);
                },
                error: function(objAJAXRequest, strError) { }
            });
        }
        catch (err) {
        }
    }
}

function handleReceivedPlaylistTracksFromServer(data) {
    unbindPlaylistAccordion();
    jQuery($playListDetailsClass).html(data);
    if (audioPlayer.lastPlaylistSelector == "#themedPlayListPlayerPlayList") {
        audioPlayer.LoadPlayList("#themedPlayListPlayerPlayList", null);
        audioPlayer.clipIndex = -1;
        audioPlayer.jmpToFirst = true;
    }
    bindPlaylistAccordion();
    createdraggables();
    jQuery($playListDetailsClass).unblock();
    setControlSecurity();
}

function getPlaylistTracksMoreDetailsFromServer(workId, workGroupingId, title) {
    if ($PlaylistHandlerPath !== "") {
        try {
            blockHtmlElement($playListDetailsClass);
            $playList_moreinfo_boxId = "#PlaylistMoreInfo_" + workId;
            jQuery.ajax({
                type: "Get",
                url: $PlaylistHandlerPath,
                data: { method: 'GetPlaylistTrackMoreInfo', workId: workId, workGroupingId: workGroupingId, title: title },
                success: function(data) {
                    handleReceivedPlaylistTracksMoreDetailsFromServer(data)
                },
                error: function(objAJAXRequest, strError) { }
            });
        }
        catch (err) {
        }
    }
}

function handleReceivedPlaylistTracksMoreDetailsFromServer(data) {
    var $cdDetails = $playlist_baseCDDetailsDiv + "_" + workId;
    var $trackVersionsInfo = $playlist_baseTrackVersionsInfoDiv + "_" + workId;
    var $metatitleLabel = $playlist_baseMetaTitleLabelDiv + "_" + workId;
    var $metadataInfo = $playlist_baseMetadataInfoDiv + "_" + workId;

    var tmpObj = jQuery("#hiddenResultDiv");
    tmpObj.html(data);
    try {
        jQuery($cdDetails).html(tmpObj.find($playlist_baseCDDetailsDiv)[0].innerHTML);
        jQuery($trackVersionsInfo).html(tmpObj.find($playlist_baseTrackVersionsInfoDiv)[0].innerHTML);
        jQuery($metatitleLabel).html(tmpObj.find($playlist_baseMetaTitleLabelDiv)[0].innerHTML);
        jQuery($metadataInfo).html(tmpObj.find($playlist_baseMetadataInfoDiv)[0].innerHTML);
    }
    catch (err) {
    }
    tmpObj.html("");
    
    if (jQuery("input[name=hasLyrics]",$trackVersionsInfo ).val() == "true"){
        jQuery("p.btn_lyrics_cont", $cdDetails).css("display", "block");
    }
    if ((audioPlayer.lastPlaylistSelector == "#themedPlayListPlayerPlayList") || 
        (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList")) {
        buildThePlaylistArrayFromElement(jQuery(".playerPlayList"));
    }
    jQuery($playListDetailsClass).unblock();
    //bindPlaylistBehaviour();
    //bindResultsDetailsItemBehaviour();
    bindTracklistOverlay();
    createdraggables();
    setControlSecurity();
}


function getThemedPlaylistTrackIds(playlistId, action) {
    if ($PlaylistHandlerPath !== "") {
        try {
            if (action == "Download") {
                var tracksQueue = "";
                var separator = "";
                var workId = "";
                jQuery("div.playlist .result").each(function(i) {
                    workId = jQuery(this).find('.hiddenWorkAudioId').val();
                    if (workId !== undefined) {
                        tracksQueue += separator + workId;
                        separator = ',';
                    }
                });
                var themedPlaylistName = readCookie("ThemedPlaylistName");
                AddTrackToQueue(tracksQueue, themedPlaylistName, playlistId, 3); //3-> dwd themed playlist
            }

            if (action == "AddToProject") {
                jQuery.ajax({
                    type: "Get",
                    url: $PlaylistHandlerPath,
                    data: { method: 'ThemedPlaylistTracksIds', playlistId: playlistId, action: action },
                    success: function(data) {
                        handleReceivedPlaylistTracksIDs(data)
                    },
                    error: function(objAJAXRequest, strError) {
                        showError(playlist_lightboxErrorMessageTitle, $RetrievingDataErrorMessage.format("ThemedPlaylistTracksIds"));
                    }
                });
            }

        }
        catch (err) {
        }
    }
}

function handleReceivedPlaylistTracksIDs(data) {
    if (data != "") {
        var workAudioIds = "";
        var workAudioTitles = "";
        var action = "";

        for (i = 0; i < jQuery(data).length; i++) {
            if (jQuery(data)[i].id == 'workAudioIds') {
                workAudioIds = jQuery(data)[i].innerHTML;
            }
            if (jQuery(data)[i].id == 'workAudioTitles') {
                workAudioTitles = jQuery(data)[i].innerHTML;
            }
            if (jQuery(data)[i].id == 'action') {
                action = jQuery(data)[i].innerHTML;
            }
        }

        if (action == "AddToProject") {
            dragObject.id = workAudioIds;
            dragObject.title = workAudioTitles;
            addTrackClick(workAudioIds, false);
        }
        else if (action == "Download") {
            var workAudioIdsList = workAudioIds.split(',');
            var param = "";
            var tracksQueue = "";
            for (var i = 0; i < workAudioIdsList.length; i++) {
                param = workAudioIdsList[i];
                if (i != workAudioIdsList.length - 1) {
                    param += ',';
                }
                tracksQueue += param;
            }
            var themedPlaylistName = readCookie("ThemedPlaylistName");
            var themedPlaylistId = readCookie("ThemedPlaylistFirstId");
            AddTrackToQueue(tracksQueue, themedPlaylistName, themedPlaylistId, 3); //3-> dwd themed playlist
        }

    }
}


﻿var $waitForLoginOperation = false;
var $blockLogin = false;
var $loginDiv = "#loginDiv";
var $loginCurrentCommand = "";

function ShowLogin() {
    jQuery("#user").show();
    jQuery("#pwd").show();
    jQuery("#forgotPwd").show();
    jQuery("#loginButton").show();
    jQuery("#selectCompany").hide();
    jQuery("#selectCompanyButton").hide();
    jQuery("#loginUser").focus();
}

function ShowSelectCompany() {
    jQuery("#user").hide();
    jQuery("#pwd").hide();
    jQuery("#forgotPwd").hide();
    jQuery("#loginButton").hide();
    jQuery("#selectCompany").show();
    jQuery("#selectCompanyButton").show();
    jQuery("#companies").focus();

}

function doLogin(user, password) {
    if ($CommonHandlerPath !== "") {
        $loginCurrentCommand = 'Login';
        $blockLogin = true;
        loginRenderAsync({ method: $loginCurrentCommand, user: user, password: password });
    }
}

function doChoseCompany() {
    var user = jQuery("input[name='loginUser']").val();
    var password = jQuery("input[name='loginPwd']").val();
    var companyId = jQuery("#companies")[0].value;

    if ($CommonHandlerPath !== "") {
        $loginCurrentCommand = 'Login';
        $blockLogin = true;
        loginRenderAsync({ method: $loginCurrentCommand, user: user, password: password, companyId: companyId });
    }
}

function loginRenderAsync(ajaxCallParams) {
    try {
        if ($waitForLoginOperation == false) {

            if ($CommonHandlerPath !== "") {
                if ($blockLogin == true) {
                    blockHtmlElement($loginDiv);
                }

                $waitForLoginOperation = true;
                // make the AJAX call
                jQuery.ajax({
                    type: "Get",
                    url: $CommonHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleLoginReceivedData(data);
                    },
                    error: function(objAJAXRequest, strError) {
                        handleLoginReceivedData('<div class="error"><li>' + strError + '</li></div>');
                    }
                });
            }
        }
    }
    catch (err) {
    }
}

function handleLoginReceivedData(data) {
    try {
        if (data.split(">")[0] == '<div class="error"') {
            throw jQuery(data).html();
        }
        else if ($loginCurrentCommand == 'Login') {
            if (jQuery(data).html() == "True") {

                audioPlayer.SaveState();
                createCookie('loginStatePageNo', currentPageNo, 1); /*Mentain page nr on SerachResults for login*/
                if (/registration.aspx$/.test(window.location.href) ||
                    /forgot-password.aspx$/.test(window.location.href)) {
                    window.location.href = '/';
                } else {
                    location.reload(true);
                    //window.location.href = window.location.href;
                }
            } else {
                jQuery("#companies").html(jQuery(data).find("#companies").html());
                ShowSelectCompany();
            }
        }
        else throw data;
    }
    catch (err) {
        var errorDiv = jQuery(loginErrorDivId);
        var errorUl = jQuery(loginErrorUlId);
        errorUl.html(err);
        errorDiv.show();
        ShowLogin();
    }

    $waitForLoginOperation = false;
    if ($blockLogin == true) {
        jQuery($loginDiv).unblock();
        $blockLogin = false;
    }
}



﻿var $userSearchHistoryDiv = "#userSearchHistory";

jQuery(document).ready(function() {
    bindUserSearchHistoryBehaviour();
});

function bindUserSearchHistoryBehaviour() {
    jQuery("#userSearchHistory .result_item a.main").each(function(i) {
        var tmpObj = jQuery(this);
        if (tmpObj.find('.hasAdditionalFilters')[0] != undefined) {
            var hasAdditionalFilters = tmpObj.find('.hasAdditionalFilters');
            if (hasAdditionalFilters != '' && hasAdditionalFilters != undefined) {
                tmpObj.find('.additionalFiltersAdded')[0].style.display = "block";
            }
        }

        jQuery(this).unbind('click').click(function() {
            var searchAttributesIds = jQuery(this).find('.attributesIds').val();
            var searchType = jQuery(this).find('.searchtype')[0].innerHTML;
            var $request = '';
            if (searchAttributesIds != null) {
                searchAttributesIds.replace(",", "%2C");
            }
            if (searchType == 'Advanced Search') { //advanced search

                var lyrics = jQuery(this).find('.lyrics').val();
                var composer = jQuery(this).find('.composer').val();
                var durationId = jQuery(this).find('.durationId').val();

                jQuery("#userSearchHistoryForm").attr("action", $SearchPathForPostBack); ;
                jQuery("#userSearchHistoryForm").find("#searchtype").val("adv");
                jQuery("#userSearchHistoryForm").find("#attributeList").val(searchAttributesIds);
                jQuery("#userSearchHistoryForm").find("#lyrics").val(lyrics);
                jQuery("#userSearchHistoryForm").find("#composer").val(composer);
                jQuery("#userSearchHistoryForm").find("#tracklength").val(durationId);
                jQuery("#userSearchHistoryForm").find("#adv_go").val("Search");

                clearSearchCookie();
                //TODO: save search criteria to cookie

            }
            else {  //quick search
                var searchCriteria = jQuery(this).find('.searchKeyword').val();
                jQuery("#userSearchHistoryForm").attr("action", $SearchPathForPostBack);
                jQuery("#userSearchHistoryForm").find("#searchtype").val("quick");
                jQuery("#userSearchHistoryForm").find("#keyword").val(searchCriteria);
                jQuery("#userSearchHistoryForm").find("#attributeList").val(searchAttributesIds);
                jQuery("#userSearchHistoryForm").find("#lyrics").val("");
                jQuery("#userSearchHistoryForm").find("#composer").val("");
                jQuery("#userSearchHistoryForm").find("#tracklength").val("0");
                jQuery("#userSearchHistoryForm").find("#adv_go").val("Search");

                clearSearchCookie();

                eraseCookie("QSAttrCookie");
                var cookieData = '';

                var incAttributes = jQuery(this).find('.incAttributes').val();
                var incComposer = jQuery(this).find('.incComposer').val();
                var incDesc = jQuery(this).find('.incDesc').val();
                var incDiscDesc = jQuery(this).find('.incDiscDesc').val();
                var incDiscNumber = jQuery(this).find('.incDiscNumber').val();
                var incDiscTitle = jQuery(this).find('.incDiscTitle').val();
                var incKeyword = jQuery(this).find('.incKeyword').val();
                var incLyrics = jQuery(this).find('.incLyrics').val();
                var incTrackTitle = jQuery(this).find('.incTrackTitle').val();

                cookieData += "attributes" + '=' + incAttributes + '&';
                cookieData += "cd_num" + '=' + incDiscNumber + '&';
                cookieData += "cd_title" + '=' + incDiscTitle + '&';
                cookieData += "composer" + '=' + incComposer + '&';
                cookieData += "tracks_desc" + '=' + incDesc + '&';
                cookieData += "cd_desc" + '=' + incDiscDesc + '&';
                cookieData += "tracks_title" + '=' + incTrackTitle + '&';
                cookieData += "lyrics" + '=' + incLyrics;
                createCookie("QSAttrCookie", cookieData, $CookieTimeOut);

                createCookie("quickSearchCookie", searchCriteria, $CookieTimeOut);
                addQuickSearchToFilters(searchCriteria);

            }

            var labelId = jQuery(this).find('.labelid').val();
            var includeVirtualLibrary = jQuery(this).find('.includeVirtualLibrary').val();
            if (labelId != '' && labelId != undefined) {
                addAttributeToCategory(filterBarLabelCategoryId, '', filterBarLabelCategoryId, labelId);
            }

            if (includeVirtualLibrary != undefined && includeVirtualLibrary != '') {
                addAttributeToCategory(filterBarVirtualLibraryCategoryId, '', filterBarVirtualLibraryCategoryId, includeVirtualLibrary);
            }
            jQuery("#adv_go").click();

            //window.location = $request;
            //refreshYouSearchedFor(); 
            //jQuery('#keywords_list').html(searchCriteria);   
        });
    });
}

function change_UserSearchHistoryPage(new_page_number) {
    pageNo = new_page_number;
    currentPageNo = new_page_number;
    refreshUserSearchHistory();
}

function refreshUserSearchHistory() {
    var resultsPerPage = "";

    if (document.getElementById("search_hist_num") != null)
        resultsPerPage = document.getElementById("search_hist_num").value;

    blockHtmlElement($userSearchHistoryDiv);
    jQuery.ajax({
        type: "Get",
        url: $SearchHandlerPath,
        data: ({ command: "RefreshUserSearchHistory", resultsPerPage: resultsPerPage, pageNo: pageNo }),
        success: function(data) {
            for (i = 0; i < jQuery(data).length; i++) {
                if (jQuery(data)[i].id == $userSearchHistoryDiv.replace('#', '')) {
                    jQuery($userSearchHistoryDiv).html(jQuery(data)[i].innerHTML);
                    bindUserSearchHistoryBehaviour();
                    jQuery($userSearchHistoryDiv).unblock();
                }
            }

        }
    });
}

﻿jQuery(document).ready(function() {
    bindUserAuditionHistoryBehaviour();
});

function bindUserAuditionHistoryBehaviour(){
    jQuery(".audition_history_item a.main").live("click", function(i) {
        var workAudioId = jQuery(this).parent().find(".hiddenWorkAudioId").val();
        if (audioPlayer.lastPlaylistSelector != "#userAuditionHistoryPlayerPlayList") {
            audioPlayer.LoadPlayList("#userAuditionHistoryPlayerPlayList", null);
        }
        playTrackById(workAudioId);
    });
}

//function refreshAuditionHistory(sourceObj) {
//    var sortFilter = "";
//    if (document.getElementById("sort") != null)
//        sortFilter = document.getElementById("sort").value;
//    //sortFilter = jQuery(sourceObj).value;

//    var attributeList = getAllAttributesID();
//    var d = new Date();
//    
//    blockHtmlElement($resultsBoxDiv);
//    jQuery.ajax({
//        type: "Get",
//        url: $CommonHandlerPath,
//        data: ({ method: "RefreshUserAuditions", sortFilter: sortFilter }),
//        success: function(data) {
//            for (i = 0; i < jQuery(data).length; i++) {
//                    jQuery($resultsBoxDiv).html(data);
//                    bindSearchResultsAccordion();  
//                    jQuery($resultsBoxDiv).unblock();
//                           
//            }
// //           if (typeof SetAddTrackOnClickEventToTrackResultsSearch == 'function') {
// //               SetAddTrackOnClickEventToTrackResultsSearch();
// //           }

// //           createdraggables();
//           // if (audioPlayer.lastPlaylistSelector == "#trackResultsPlayerPlayList") {
//           //     audioPlayer.LoadPlayList("#trackResultsPlayerPlayList", null);
//           //     audioPlayer.clipIndex = -1;
//           //     audioPlayer.jmpToFirst = true;
//           // }
//            //PLAYERbuildThePlaylistArrayFromTheDiv(true);
//        }
//    });
//}

﻿function prepareForPrint(contentDIV) {
    if (jQuery(contentDIV).length > 0) {
        jQuery("#print").html(jQuery(contentDIV).html());
    }
}

function prepareForPrintHavingTheContent(HTMLcontent) {
    jQuery("#print").html(HTMLcontent);
}

﻿//var $copyMoveProjectDiv = "#copyMove";
var $copyMoveProjectDDs = "#copy_move_project_DropDowns";
var $copy_move_sub_project1 = "#copy_move_sub_project1";
var $copy_move_sub_project2 = "#copy_move_sub_project2";
var $copy_move_overlay = "copy_move_overlay";

function displayCopyMovePanel(projectId, viewMode, fullProjectLevel, workAudioId, copyAction){
     if ($ProjectHandlerPath !== "") {
        fullProjectRenderCopyMoveAsync({ command: 'FullProjectCopyMovePanel', projectId: projectId, viewMode: viewMode, fullProjectLevel: fullProjectLevel, workAudioId: workAudioId, copyAction: copyAction });
    }
}

function displaySubProjectsDropDown(projectId){
     if ($ProjectHandlerPath !== "") {
        fullProjectRenderSubProjectsDropDownAsync({ command: 'CopyFullProjectSubProjectsDropDown', projectId: projectId});
    }
}

function displaySubSubProjectsDropDown(subProjectId){
     if ($ProjectHandlerPath !== "") {
        fullProjectRenderSubSUbProjectsDropDownAsync({ command: 'CopyFullProjectSubSubProjectsDropDown', subProjectId: subProjectId});
    }
}

function copyMoveProject(projectId, selectedLevel,  destinationProjectId, destinationLevel, newName, copyAction, viewMode, workAudioId){
     if ($ProjectHandlerPath !== "") {
        fullProjectCopyMoveActionAsync({ command: 'FullProjectCopyMove', projectId: projectId , selectedLevel: selectedLevel, destinationProjectId: destinationProjectId, destinationLevel: destinationLevel, newName: newName, copyAction: copyAction, viewMode: viewMode, workAudioId: workAudioId });
    }
}

function fullProjectRenderCopyMoveAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            blockHtmlElement($copy_move_overlay);
            // make the AJAX call
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleCopyMoveProject(data);
                        jQuery($copy_move_overlay).unblock();
                        },
                    error: function( objAJAXRequest, strError ){
                             showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("FullProjectCopyMovePanel"));
                             jQuery($copy_move_overlay).unblock();
                       }
                   });
        }
    }
    catch (err) {
    }
}

function handleCopyMoveProject(data){
     jQuery($copyMoveProjectDDs).html(data);
     if(data != ''){
        bindEventsForCopyProject();
        var firstLevelProjectId = 0;
        for(var i=0; i< jQuery(data).length; i++){
            if (jQuery(data)[i].id == 'copy_move_project'){
                    firstLevelProjectId = jQuery(data)[i].value;
            }
        }
        if (firstLevelProjectId > 0){
            displaySubProjectsDropDown(firstLevelProjectId);
        }
            
     }
}

function fullProjectRenderSubProjectsDropDownAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            blockHtmlElement($copy_move_overlay);
            // make the AJAX call
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleDisplaySubProjectsDropDown(data);
                        jQuery($copy_move_overlay).unblock();
                        },
                    error: function( objAJAXRequest, strError ){
                             showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("FullProjectCopyMovePanel"));
                             jQuery($copy_move_overlay).unblock();
                       }
                   });
        }
    }
    catch (err) {
    }
}

function handleDisplaySubProjectsDropDown(data){
    if (data != ''){
        jQuery($copy_move_sub_project1).html(data);
        jQuery('#copy_move_sub_project1').parent().removeClass('hide');
        jQuery('#copy_move_sub_project2').parent().addClass('hide');
        bindEventsForCopyTrack();
    }
    else{
        jQuery('#copy_move_sub_project1').parent().addClass('hide');
        jQuery('#copy_move_sub_project2').parent().addClass('hide');
    }
}


function fullProjectRenderSubSUbProjectsDropDownAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
            blockHtmlElement($copy_move_overlay);
            // make the AJAX call
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleDisplaySubSubProjectsDropDown(data);
                        jQuery($copy_move_overlay).unblock();
                        },
                    error: function( objAJAXRequest, strError ){
                             showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("FullProjectCopyMovePanel"));
                             jQuery($copy_move_overlay).unblock();
                       }
                   });
        }
    }
    catch (err) {
    }
}

function handleDisplaySubSubProjectsDropDown(data){
    if (data != ''){
        jQuery($copy_move_sub_project2).html(data);
        jQuery('#copy_move_sub_project2').parent().removeClass('hide');
    }
    else{
         jQuery('#copy_move_sub_project2').parent().addClass('hide');
    }
}


function fullProjectCopyMoveActionAsync(ajaxCallParams) {
    try {
        if ($ProjectHandlerPath !== "") {
              blockHtmlElement($fullProjectDiv);
              jQuery.ajax({
                    type: "Get",
                    url: $ProjectHandlerPath,
                    data: ajaxCallParams,
                    success: function(data) {
                        handleCopyMoveAction(data);
                        jQuery($fullProjectDiv).unblock();
                        },
                    error: function( objAJAXRequest, strError ){
                        showError(projects_lightboxErrorMesageTitle, $RetrievingDataErrorMessage.format("FullProjectCopyMove"));     
                        jQuery($fullProjectDiv).unblock();
                       }
                   });
        }
    }
    catch (err) {
    }
}

function handleCopyMoveAction(data){
    var objData = jQuery(data);

    if (objData.length > 0) {
       
        var newProjName;
        var newInsertedProjId = 0;
        var destinationProjectId;
        var copyAction;
        var destinationLevel;
        var projectId;
        var selectedLevel;
        var viewMode;
        var workAudioId;
        
        var operationSuceeded = true;
        
        for (var i=0; i<objData.length; i++){
            if (objData[i].id == 'projName') {
                newProjName = objData[i].innerHTML;
            }
            if (objData[i].id == 'destinationProjectId') {
                destinationProjectId = objData[i].innerHTML;
            }
            if (objData[i].id == 'copyAction') {
                copyAction = objData[i].innerHTML;
            }
            if (objData[i].id == 'destinationLevel') {
                destinationLevel = objData[i].innerHTML;
            }
            if (objData[i].id == 'projectId') {
                projectId = objData[i].innerHTML;
            }
            if (objData[i].id == 'selectedLevel') {
                selectedLevel = objData[i].innerHTML;
            }
            if (objData[i].id == 'newInsertedProjectId') {
                newInsertedProjId = objData[i].innerHTML;
            }
            if (objData[i].id == 'viewMode') {
                viewMode = objData[i].innerHTML;
            }
            if (objData[i].id == 'workAudioId') {
                workAudioId = objData[i].innerHTML;
            }
             
            if (objData[i].id == 'operationSuceeded') {
                operationSuceeded = objData[i].innerHTML;
            }
        }
        
        if (operationSuceeded == "false"){
            jQuery($fullProjectDiv).unblock();
            return;
        }
        
        //get the oldProject;
        var oldProject;
        if (selectedLevel == "0"){
            //oldProject = jQuery("#prj1 .project .levelOne .prj_link .prj1 input.ProjectId[value='" + projectId + "']").parent().parent().parent().parent().next().find('.prj_list');
            oldProject = jQuery("#prj1 .project .levelOne .prj_link .prj1 input[value='" + projectId + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        else if (selectedLevel == "1"){
            oldProject = jQuery("#prj1 .project .levelTwo .prj_link .prj2 input.ProjectId[value='" + projectId + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        else if (selectedLevel == "2"){
            oldProject = jQuery("#prj1 .project .prj .prj2a .levelThree .prj_link input.ProjectId[value='" + projectId + "']").parent().parent().parent().parent().next().find('.prj_list:first');
        }
        
         //get project details to be copied along with the rest of data.
            var projDetails = "";
            if(oldProject.parent().parent().find('.details').length > 0){
                projDetails = oldProject.parent().parent().find('.details').text();
            }

        if (viewMode == "project") {
            if (fullProject_Author == undefined) {
                fullProject_Author = "";
            }
            var today = new Date();
            var thisDate = today.format(generalDateFormat);
            
            //delete project if move
            var parentProjectId = 0;
            if (oldProject.parent().parent().parent().prev().find('input.ProjectId').length > 0){
                parentProjectId = oldProject.parent().parent().parent().prev().find('input.ProjectId')[0].value;
            }    
            if (copyAction == "false"){
               deleteFullProjectWithoutRefreshingAfterMove(projectId, selectedLevel, parentProjectId); 
            }
            
            //copy project
            copyProjectToFullProject(newProjName, newInsertedProjId, fullProject_Author, thisDate, projDetails, destinationProjectId, destinationLevel);
            
            //update the no of projects
            setTotalNumberOfFullProjects();
        } else if (viewMode == "track"){
                var track = oldProject.find('.track_item .deletebtn input.WorkAudioId[value=' + workAudioId + ']').parent().parent().parent().parent();
                var cdNumber = track.find('.cdref').text();
                var trackTitle = track.find('.title:first').text();
                var trackNumber = track.find('.num').text();
                var versionType = track.find('.ver_type').text();
                var editType = track.find('.edit_type').text();
                var trackDescription = track.find('.desc').text();
                var cdnFilePath = track.find('#cdnFilePath').val();
                var workGroupingId = track.find('input.workGroupingId').val();
                
                var trackNote = track.find('.trackNote_' + workAudioId + '_' + projectId).val();
                
                if (workAudioId !== undefined) {
                    copyTrackToProject(workAudioId, cdNumber, trackTitle, trackNumber, versionType, editType, trackDescription, cdnFilePath, trackNote, destinationProjectId , destinationLevel, workGroupingId, true);    
                }
                
                if (copyAction == "false"){
                    track.remove();
            }
        }
    }
}

function deleteFullProjectWithoutRefreshingAfterMove(projectID, oldLocation, oldParentProjectId){
    if (projectID > 0) {
        if (oldLocation == "0"){
            //need new param oldParentProjectId
            var projItm = jQuery("#prj1 .project .levelOne .prj_link input[value='" + projectID + "']").parent().parent().parent().parent();
            projItm.next().remove();
            projItm.remove();
        } else if(oldLocation == "1"){
            var projTracks = jQuery("#prj1 .project .levelTwo .prj_link input[value='" + projectID + "']").parent().parent().parent().parent().next();
            var proj = jQuery("#prj1 .project .levelTwo .prj_link input[value='" + projectID + "']").parent().parent().parent().parent();
            for(var i=0; i<projTracks.length; i++){
                if (jQuery(projTracks[i]).parent().parent().prev().find('input[class=ProjectId]')[i].value == oldParentProjectId){
                    jQuery(projTracks[i]).remove();
                    jQuery(proj[i]).remove();
                }
            }
        } else if(oldLocation == "2"){
            var projTracks = jQuery("#prj1 .project .levelThree .prj_link input[value='" + projectID + "']").parent().parent().parent().parent().next();
            var proj = jQuery("#prj1 .project .levelThree .prj_link input[value='" + projectID + "']").parent().parent().parent().parent();
            for(var i=0; i<projTracks.length; i++){
                if (jQuery(projTracks[i]).parent().parent().prev().find('input[class=ProjectId]')[i].value == oldParentProjectId){
                    jQuery(projTracks[i]).remove();
                    jQuery(proj[i]).remove();
               
                }
            }
        }
        
        getSelectedFullProjectId();
        createBreadcrumb();
    }

}


function copyProjectToFullProject(newProjName, newProjId, newProjAuthor, newProjDate, newProjDetails, destinationProjectId, level, viewMode){
    var sharedWithText = fullProject_SharedWithHoverText.format(0);
    var newFullProjHTMLTag;

    if (level == 0) {
        newFullProjHTMLTag = "<div class=\"project ui-droppable\">" +
                                "<div class=\"project_itm levelOne\">" +
                                    "<div class=\"rel\">" +
                                        "<div class=\"abs actions hide\" style=\"\">" +
                                            "<a class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\" href=\"javascript:void(0);\"><span>></span> </a>" +
                                            "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText + "\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                            "<a class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\" href=\"javascript:void(0);\"><span>P</span></a>" +
                                            "<a class=\"share trig\" rel=\"#overlay1\" title=\"" + fullProject_ShareProjectHoverText + "\" href=\"javascript:void(0);\"><span>S</span> </a>" +
                                            "<a class=\"email trig\" rel=\"#overlay2\" title=\"" + fullProject_EmailProjectHoverText + "\" href=\"javascript:void(0);\"><span> E</span> </a>" +
                                            "<a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\"" + fullProject_ProjectDetailsHoverText + "\" rel=\"#overlay3\"><span>N</span></a>" +
                                            "<a class=\"deletebtn\" title=\"" + fullProject_DeleteProjectHoverText + "\" href=\"javascript:void(0);\">" +
                                                "<span>X</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                        "<div id=\"ProjectLink_" + newProjId + "\" class=\"prj_link\">" +
                                            "<a class=\"prj1\" href=\"javascript:void(0);\"><span class=\"wrapper\"><span " +
                                                " class=\"title\">" + newProjName + "<span class=\"shared\" style=\"display: none;\">" +
                                                    "<img title=\"" + sharedWithText + "\" alt=\"" + sharedWithText + "\" src=\"" + $CDNFilesRootPath + "images/content/btn_usr.gif\" />" +
                                                    "<input class=\"noOfSharedUsers\" type=\"hidden\" value=\"0\" />" +
                                                "</span></span><span class=\"auth\">" + newProjAuthor + "</span><span class=\"date\">" +
                                                    newProjDate + "</span> <span class=\"details\">" + newProjDetails + "</span>" +
                                                "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\" />" +
                                            "</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                    "</div>" +
                                "</div>" +
                                "<div class=\"prj\" style=\"display: none;\"><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>" +
                            "</div>";
                            
           
        if (jQuery("#prj1 .project").length > 0){
            jQuery("#prj1 .project:last").after(newFullProjHTMLTag);  
        }
        else{
            jQuery("#prj1").html(newFullProjHTMLTag);
        }

        
        jQuery("#prj1 .project:last").find("a.trig[rel]").overlay({
            top: "30%"
        });
        
        bindEvents();
           
    } else if (level == 1) {
        newFullProjHTMLTag = "<div class=\"project_itm levelTwo\">" +
                                    "<div class=\"rel\">" +
                                        "<div class=\"abs actions hide\" style=\"\">" +
                                            "<a href=\"javascript:void(0);\" class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\">" +
                                                "<span>></span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText + "\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\">" +
                                                "<span>P</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"share trig\" title=\""+ fullProject_ShareProjectHoverText +"\" rel=\"#overlay1\">" +
                                                "<span>S</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"email trig\" title=\""+ fullProject_EmailProjectHoverText +"\" rel=\"#overlay2\">" +
                                                "<span>E</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                            "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\""+ fullProject_ProjectDetailsHoverText +"\" rel=\"#overlay3\">" +
                                                "<span>I</span>" +
                                            "</a>" +
                                            "<a href=\"javascript:void(0);\" class=\"deletebtn\" title=\""+ fullProject_DeleteProjectHoverText +"\">" +
                                                "<span>X</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                            "</a>" +
                                        "</div>" +
                                        "<div class=\"prj_link\" id=\"ProjectLink_" + newProjId + "\">" +
                                            "<a href=\"javascript:void(0);\" class=\"prj2\">" +
                                                "<span class=\"wrapper\">" +
                                                    "<span class=\"title\">" + newProjName + "</span>" +
                                                    "<span class=\"auth\">" + newProjAuthor + "</span>" +
                                                    "<span class=\"date\">" + newProjDate + "</span>" +
                                                    "<span class=\"details\">" + newProjDetails + "</span> " +
                                                    "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\"/>" +
                                                "</span>" +
                                                "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\"/>" +
                                            "</a>" +
                                        "</div>" +
                                    "</div>" +
                                "</div>" +
                                "<div class=\"prj\" style=\"display: none;\" ><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>";

        var $selectedSubProj = jQuery("#prj1 .project .project_itm .prj_link .prj1 input[value='" + destinationProjectId + "']").parent().parent().parent().parent().next();

        if ($selectedSubProj.find('.prj2a').length > 0) {

            $selectedSubProj.find(".prj2a:first").append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a:first").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            $selectedSubProj.find(".prj2a:first .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        } else {

            newFullProjHTMLTag = "<div class=\"prj2a project_itm\">" + newFullProjHTMLTag + "</div>";
            $selectedSubProj.append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a:first").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            
            $selectedSubProj.find(".prj2a:first .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        }
        bindOverlayBehavior();
    } else if (level == 2) {
        newFullProjHTMLTag = "<div class=\"project_itm levelThree\">" +
                                "<div class=\"rel\">" +
                                    "<div class=\"abs actions hide\" style=\"\">" +
                                        "<a href=\"javascript:void(0);\" class=\"dwnload\" title=\"" + fullProject_DownloadProjectHoverText + "\">" +
                                            "<span>></span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyProjectHoverText +"\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                        "<a href=\"javascript:void(0);\" class=\"print\" title=\"" + fullProject_PrintProjectHoverText + "\">" +
                                            "<span>P</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"share trig\" title=\"" + fullProject_ShareProjectHoverText + "\" rel=\"#overlay1\">" +
                                            "<span>S</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"email trig\" title=\"" + fullProject_EmailProjectHoverText + "\" rel=\"#overlay2\">" +
                                            "<span>E</span>" +
                                        "</a>" +
                                        " <a href=\"javascript:void(0);\" class=\"open\" title=\"" + fullproject_OpenProjectHoverText + "\"><span>I</span></a>" +
                                        "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\"" + fullProject_ProjectDetailsHoverText + "\" rel=\"#overlay3\">" +
                                            "<span>I</span>" +
                                        "</a>" +
                                        "<a href=\"javascript:void(0);\" class=\"deletebtn\" title=\"" + fullProject_DeleteProjectHoverText + "\">" +
                                            "<span>X</span>" +
                                            "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\" />" +
                                        "</a>" +
                                    "</div>" +
                                    "<div class=\"prj_link\" id=\"ProjectLink_" + newProjId + "\">" +
                                        "<a href=\"javascript:void(0);\" class=\"prj2 prj3\">" +
                                            "<span class=\"wrapper\">" +
                                                "<span class=\"title\">" + newProjName + "</span> " +
                                                "<span class=\"auth\">" + newProjAuthor + "</span> " +
                                                "<span class=\"date\">" + newProjDate + "</span>" +
                                                "<span class=\"details\">" + newProjDetails + "</span>" +
                                                "<input class=\"Description_" + newProjId + "\" type=\"hidden\" value=\"\"/>" +
                                            "</span>" +
                                            "<input class=\"ProjectId\" type=\"hidden\" value=\"" + newProjId + "\"/>" +
                                        "</a>" +
                                    "</div>" +
                                "</div>" +
                            "</div>" +
                            "<div class=\"prj\" style=\"display: none;\" ><div id=\"prjList_" + newProjId + "\" class=\"prj_list\" style=\"display: none;\"><ul></ul><div class=\"clear\"></div></div></div>";

        var $selectedSubProj = jQuery("#prj1 .project .prj .prj2a .project_itm .prj_link input[value='" + destinationProjectId + "']").parent().parent().parent().parent().next();

        if ($selectedSubProj.find('.prj3').length > 0) {

            $selectedSubProj.find(".prj2a.prj3.project_itm").append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a.prj3.project_itm").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            $selectedSubProj.find(".prj2a.prj3.project_itm .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        } else {

            newFullProjHTMLTag = "<div class=\"prj2a prj3 project_itm\">" + newFullProjHTMLTag + "</div>";
            $selectedSubProj.append(newFullProjHTMLTag);
            bindProjectsBehaviour();
            $selectedSubProj.find(".prj2a.prj3").accordion({
                active: false,
                alwaysOpen: false,
                autoheight: false,
                header: 'a.open',
                clearStyle: false,
                animated: false
            });
            $selectedSubProj.find(".prj2a.prj3.project_itm .project_itm:last").find("a.trig[rel]").overlay({
                top: "30%"
            });
        }
  
        bindOverlayBehavior();
    }
}


function copyTrackToProject(workAudioId, cdNumber, trackTitle, trackNumber, versionType, editType, trackDescription, cdnFilePath, trackNote, destinationProjectId , destinationLevel, workGroupingId, bindEv) {  
    var addedProj;   
    //find the destination project
    if (destinationLevel == "0"){
        addedProj = jQuery("#prj1 .project .project_itm .prj_link .prj1 input[value='" + destinationProjectId + "']").parent().parent().parent().parent().next();
    }
    else if (destinationLevel == "1"){
        addedProj = jQuery("#prj1 .project .prj .prj2a:not(.prj3) .project_itm .prj_link input[value='" + destinationProjectId + "']").parent().parent().parent().parent().next();
    }
    else if (destinationLevel == "2"){
        addedProj = jQuery("#prj1 .project .prj .prj2a.prj3 .project_itm .prj_link input[value='" + destinationProjectId + "']").parent().parent().parent().parent().next();
    }
    
    
    var newTrackHTML = " <div class=\"track_item\">" + 
                            "<div class=\"rel\">" +
                                "<div class=\"abs actions hide\">" +
                                    "<a href=\"javascript:void(0);\" class=\"dwnload\" title=\"" + fullProject_DownloadTrackHoverText + "\">" +
                                        "<span>></span>" +
                                        "<input type=\"hidden\" id = \"cdnFilePath\" value=\""+ cdnFilePath +"\" />" +
                                    "</a>" +
							        "<a href=\"javascript:void(0);\" class=\"copy trig\" title=\"" + fullProject_CopyTrackHoverText + "\" rel=\"#copy_move_overlay\"><span>C</span></a>" +
                                    "<a href=\"javascript:void(0);\" class=\"email trig\" title=\"" + fullProject_EmailTrackHoverText + "\" rel=\"#overlay2\"><span>E</span></a>" +
                                    "<a href=\"javascript:void(0);\" class=\"info\" title=\"" + fullProject_TrackDetailsHoverText + "\"><span>i</span><input type=\"hidden\" class=\"workGroupingId\" value=\"" + workGroupingId +"\" /></a>" +
                                    "<a href=\"javascript:void(0);\" class=\"notes trig\" title=\"" + fullProject_TrackNotesHoverText + "\" rel=\"#overlay3\">" +
                                        "<span>i</span></a>" +
                                    "<a href=\"javascript:void(0);\" class=\"deletebtn\" title=\"" + fullProject_DeleteTrackHoverText + "\">"+
                                        "<span>X</span>" +
                                        "<input type=\"hidden\" class=\"WorkAudioId\" value=\"" + workAudioId + "\" />" +
                                    "</a>" +
                                    "<input type=\"hidden\" class=\"WorkAudioId\" value=\"" + workAudioId + "\" />" +
                                    "<div class=\"clear\">" +
                                    "</div>" +
                                "</div>" +
                                "<a href=\"javascript:void(0);\" class=\"main\">" +
                                    "<span class=\"cdref\">" + cdNumber + "</span>" + 
                                    "<span class=\"title\">" + trackTitle + "</span>" +
                                    "<span class=\"num\">" + trackNumber + "</span>" +
                                    "<span class=\"ver_type\">" + versionType + "</span>" +
							        "<span class=\"edit_type\">" + editType + "</span>" +
                                    "<span class=\"desc\">" + trackDescription + "</span>" +
                                    "<input type=\"hidden\" class=\"Description_" + destinationProjectId + "\" value=\"{4}\" />" +
                                    "<input type=\"hidden\" class=\"trackNote_" + workAudioId + "_" + destinationProjectId + "\" value=\"" + trackNote + "\" />" +
                                    "<input type=\"hidden\" class=\"ProjectId\" value=\"" + destinationProjectId + "\" />" +
                                    "<span class=\"spanclear\"></span></a>" +
                            "</div>" +
                            "<div class=\"projects_moreinfo_box hide\">" +
                                 "<div id=\"InfoRow_" + destinationProjectId + "_" + workAudioId + "\" class=\"inforow\">" +
                                    "<div id=\"CdDetails_" + destinationProjectId + "_" + workAudioId + "\" class=\"info_box\">" +
                                    "</div>" +
                                    "<div id=\"TrackVersionsInfo_" + destinationProjectId + "_" + workAudioId + "\" class=\"tracklist_box\">" +
                                    "</div>" +
                                 "</div>" +
                                 "<div id=\"MetaTitleLabel_" + destinationProjectId + "_" + workAudioId + "\" class=\"metatitle\">" +
                                 "</div>" +
                                 "<div id=\"MetadataInfo_" + destinationProjectId + "_" + workAudioId + "\" class=\"metainfo hide\">" +
                                 "</div>" +
                            "</div>" +
                        
                    "</div>";
                
                        
             jQuery(addedProj).find(".prj_list:first ul").append(newTrackHTML); 
             jQuery(addedProj).find(".prj_list:first ul .track_item:last a.trig[rel]").overlay({
                top: "30%"
            });  
        
        addedProj.find('.prj_list')[0].style.cssText = "DISPLAY: block";                 

        if (bindEv)
        {
            bindEvents();
        }               
}


function bindEvents(){
    bindProjectsBehaviour();
    bindOverlayBehavior();

}


﻿if (!this.JSON) {
    this.JSON = {};
}

(function () {

    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                   this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            text = String(text);
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('JSON.parse');
        };
    }
}());

/*
 * --------------------------------------------------------------------
 * jQuery-Plugin - $.download - allows for simple get/post requests for files
 * by Scott Jehl, scott@filamentgroup.com
 * http://www.filamentgroup.com
 * reference article: http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/
 * Copyright (c) 2008 Filament Group, Inc
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
 * --------------------------------------------------------------------
 */
 
jQuery.download = function(url, data, method){
	//url and data options required
	if( url && data ){ 
		//data can be string of parameters or array/object
		data = typeof data == 'string' ? data : jQuery.param(data);
		//split params into form inputs
		var inputs = '';
		jQuery.each(data.split('&'), function(){ 
			var pair = this.split('=');
			inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; 
		});
		//send request
		jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
		.appendTo('body').submit().remove();
	};
};



