/* GLOBAL VARIABLES SET BY registerJSDefaults */
var defaultErrorHandler = "";
var jsNodeId = "";
var jsSiteId = "";

/*
!!IMPORTANT!!
registerJSDefaults MUST BE CALLED FROM EVERY PAGE THAT USES THIS LIBRARY,
PRIOR TO USING ANY OF THE OTHER FXNS BELOW
*/
function registerJSDefaults(nodeId, siteId, errorHandler) {
    registerJSPageDefaults(nodeId, siteId, '', '', errorHandler)
}
function registerJSPageDefaults(nodeId, siteId, pageType, oid, errorHandler) {
    jsNodeId = nodeId;
    jsSiteId = siteId;
    jsPageType = pageType;
    jsOID = oid;
    defaultErrorHandler = errorHandler;
}

/* AJAX CALLS */

//filterWatchList (used by Watch List page)
//Required parms: divId, viewName
//Optional: daysSinceEvent, waitingSize, errorHandlerOverride
function filterWatchList(divId, daysSinceEvent, viewName, waitingSize, errorHandlerOverride) {
    $(divId).o = new fx.Opacity(divId);
    $(divId).o.custom(1,0);

    var listOid = '/3350-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var queryString = 'viewName=' + viewName + '&component';
    queryString += '&daysSinceEvent=' + daysSinceEvent + '&filtered=1';

    setTimeout("getHTML('" + divId + "','" +  listOid + "','" +  queryString + "', getErrorHandler('" + errorHandlerOverride + "'));",400);
    setTimeout("$('" + divId + "').o.custom(0,1);", 800);


};

//showAddOrWatchItemLink (used by Product Detail page)
//Required parms: divId, referencedType, referencedId, viewName
//Optional: waitingSize, errorHandlerOverride
function showAddOrWatchItemLink(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {

    var queryStringParms = parseQSParms();

    if(queryStringParms['addWatchItem'] != null) {
        addWatchItem(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride);
    } else {
        showWatchItemLink(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride);
    }

}

//showWatchItemLink (used by Product Detail page)
//Required parms: divId, referencedType, referencedId, viewName
//Optional: waitingSize, errorHandlerOverride
function showWatchItemLink(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {

    showWaitingGif(divId, waitingSize, "Loading...");

    var displayOid = '/3351-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var queryString = 'referencedType=' + referencedType + '&referencedId=' + referencedId;
    queryString += '&viewName=' + viewName + '&component';

    getHTML(divId, displayOid, queryString, getErrorHandler(errorHandlerOverride));
}

//viewWatchItem (used by Watch List page)
//Required parms: divId, listItemId, viewName
//Optional: waitingSize, errorHandlerOverride
function viewWatchItem(divId, listItemId, viewName, waitingSize, errorHandlerOverride) {

    showWaitingGif(divId, waitingSize, "Loading...");

    var displayOid = '/3352-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var queryString = 'viewName=' + viewName + '&listItemId=' + listItemId + '&component';

    getHTML(divId, displayOid, queryString, getErrorHandler(errorHandlerOverride));
        return true;
}

//syncWatchItemByItemId (used by Watch List page)
//Required parms: divId, listItemId, viewName
//Optional: waitingSize, errorHandlerOverride
function syncWatchItemByItemId(divId, listItemId, viewName, waitingSize, errorHandlerOverride) {

    showWaitingGif(divId, waitingSize, "Loading...");

    var updateViewOid = '/3352-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var cmd = 'syncListItem';

    var queryString = 'cmd=' + cmd + '&assetType=listItem&listItemId=' + listItemId;
    queryString += '&viewName=' + viewName + '&component';

    getHTML(divId, updateViewOid, queryString, getErrorHandler(errorHandlerOverride));

}

//syncWatchItemByRefId (used by Post-DL page)
//Required parms: divId, referencedType, referencedId, viewName
//Optional: waitingSize, errorHandlerOverride
function syncWatchItemByRefId(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {
//alert('syncWatchItemByRefId');
    showWaitingGif(divId, waitingSize, "Loading...");

    var addEditOid = '/3353-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var cmd = 'syncIfWatchItemExists';

    var queryString = 'cmd=' + cmd + '&referencedType=' + referencedType + '&referencedId=' + referencedId + '&eventTypes=1';

    var autoAddCookieValuePostDlAlert = getCookie("DLWatchlistAutoAdd-SW_PS-PostDlAlert");
    if((location.href != null && location.href.indexOf('also-dwnld') < 0) && autoAddCookieValuePostDlAlert != 'false') {
        queryString += '&eventTypes=2';
    }
    

    queryString += '&viewName=' + viewName + '&component';

    getHTML(divId, addEditOid, queryString, getErrorHandler(errorHandlerOverride));

}

//addWatchItem (used by Product Detail & Post-DL pages)
//Required parms: divId, referencedType, referencedId, viewName
//Optional: waitingSize, errorHandlerOverride
function addWatchItem(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {

    showWaitingGif(divId, waitingSize, "Adding...");

    var addEditOid = '/3353-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var cmd = 'addWatchItem';

    var queryString = 'cmd=' + cmd + '&referencedType=' + referencedType + '&referencedId=' + referencedId;
    queryString += '&viewName=' + viewName + '&component';

    getHTML(divId, addEditOid, queryString, getErrorHandler(errorHandlerOverride));

}

//addWatchItemPostDL (Post-DL pages)
//Required parms: divId, referencedType, referencedId, viewName
//Optional: waitingSize, errorHandlerOverride
function addWatchItemPostDL(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {

    addWatchItem(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride);

}

//addWatchItemRedirect -- NOT READY FOR PRODUCTION
//function addWatchItemRedirect(divId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {
//  showWaitingGif(divId, waitingSize, "Adding...");
//
//  var dwRedirectUrl = 'http://dw.com.com/redir'
//  var dwRedirectParms = 'pid=' + referencedId + '&lop=addWatchItem&siteId=4&oId=&ontId=20_4&destUrl='
//
//    var addEditOid = '/3353-' + jsNodeId + '_' + jsSiteId + '-0.html';
//    var cmd = 'addWatchItem';
//
//    var queryString = 'cmd=' + cmd + '&referencedType=' + referencedType + '&referencedId=' + referencedId;
//    queryString += '&viewName=' + viewName + '&component';
//
//  var ajaxUrl = addEditOid + '?' + queryString;
//
//  var dwRedirectString = dwRedirectParms + escape(ajaxUrl);
//
//  alert("dwRedirectUrl: " + dwRedirectUrl + " and dwRedirectString: " + dwRedirectString);
//
//  getHTML(divId, dwRedirectUrl, dwRedirectString, getErrorHandler(errorHandlerOverride));
//
//}

//removeWatchItem (used by Post-DL & Watch List pages)
//Required parms: divId, listItemId, viewName
//Optional: referencedType, referencedId, waitingSize, errorHandlerOverride
function removeWatchItem(divId, listItemId, referencedType, referencedId, viewName, waitingSize, errorHandlerOverride) {

    showWaitingGif(divId, waitingSize, "Removing...");

    var addEditOid = '/3353-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var cmd = 'removeListItem';

    var queryString = 'cmd=' + cmd + '&listItemId=' + listItemId;
    if (referencedType != '' & referencedId != '') {
        queryString += '&referencedType=' + referencedType + '&referencedId=' + referencedId;
    }
    queryString += '&viewName=' + viewName + '&component';

    //tracking
    try {
        document.watchListTrckng.src = 'http://dw.com.com/redir?usraction=86&oId=' + jsOID + '&siteId=' + jsSiteId + '&destURL=http%3A%2F%2Fwww.download.com%2Fb.gif';
    } catch (e) {
    }
    getHTML(divId, addEditOid, queryString, getErrorHandler(errorHandlerOverride));

}

//updateEmailPreference (used by Watch List page)
//Required parms: emailDays
//Optional: eventTypeId, waitingSize, errorHandlerOverride
function updateEmailPreference(emailDays, viewName, eventTypeId, errorHandlerOverride) {
    var addEditOid = '/3353-' + jsNodeId + '_' + jsSiteId + '-0.html';
    var cmd = 'editEmailDays';

    var queryString = 'cmd=' + cmd + '&emailDays=' + emailDays;
    if(eventTypeId != '') {
        queryString += '&eventTypes=' + eventTypeId;
    }
    queryString += '&component';

    //pass null for divId b/c we don't need it to replace the html
    getHTML(null, addEditOid, queryString, getErrorHandler(errorHandlerOverride));
}

/* HELPER FXNS */
function getErrorHandler(errorHandlerOverride) {
    var thisErrorHandler = defaultErrorHandler;
    if (errorHandlerOverride != null && errorHandlerOverride != '') {
        thisErrorHandler = errorHandlerOverride;
    }
    return thisErrorHandler;
}

function getAuthIdForQS() {
    var authId = getAuthId();
    if (authId != null) {
        return '&authId=' + authId;
    } else {
        return "";
    }
}

function getAuthId() {
    var queryStringParms = parseQSParms();
    var authId = queryStringParms['authId'];
    return authId;
}

function showWaitingGif(divId, waitingSize, displayText) {
    if (waitingSize != null && waitingSize != '') {
        if (waitingSize == "small") {
            document.getElementById(divId).innerHTML = getSmallWaitingHTML(displayText);
        } else if (waitingSize == "large") {
            document.getElementById(divId).innerHTML = getLargeWaitingHTML();
        }
    }
}

function getSmallWaitingHTML(displayText) {
    return '<div class="searching"><img src="http://i.d.com.com/i/dl/watchlist/icon_small_waiting.gif" class="icon-waiting-sm" width="13" height="13" border="0">' + displayText + '</div>';
}

function getLargeWaitingHTML() {
    return '<div class="loading"><img src="http://i.d.com.com/i/dl/watchlist/waiting.gif" class="icon-waiting-lg" width="150" height="54" border="0"></div>';
}

function parseQSParms() {
    var parmsArray = new Array();
    var query = window.location.search.substring(1);
    var parms = query.split('&');

    for (var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos+1);
            parmsArray[key] = val;
        } else {
            parmsArray[key] = '';
        }
    }
    return parmsArray;
}
