// File Contains "../js/tooltip.js" "../js/common.js" "common.js" (from StoreWidget)
// common.js
function EncodeJsString(value, encodeQuote) {
    var result = "";
    for (var i = 0; i < value.length; ++i) {
        var ch = value.charAt(i);
        if (ch == '\'') result += "\\'";
        else if (ch == '\"') result += encodeQuote ? "&quot;" : "\\\"";
        else if (ch == '\\') result += "\\\\";
        else if (ch == '\b') result += "\\b"
        else if (ch == '\f') result += "\\f";
        else if (ch == '\n') result += "\\n";
        else if (ch == '\r') result += "\\r";
        else if (ch == '\t') result += "\\t";
        else result += ch;
    }
    return result;
}
function urlRtrim(str, chars) {
    var r = str.length - 1;
    while (r > 0 && chars.indexOf(str[r]) != -1) { r -= 1; }
    return str.substring(0, r + 1);
}
function splitMy(str, chars) {
    var result = new Array();
    var s = 0; var c = 0;
    do {
        while (c < str.length && chars.indexOf(str[c]) == -1) { c++; }
        var data = str.substring(s, c);
        var item = { text: data, separator: str[c] };
        result.push(item); c++; s = c;
    } while (c < str.length);
    return result;
}
function getPrevWordForLink(words, minLength) {
    var result = null;
    if (words.length > 0) {
        result = words.pop();

        if (!result.isUrl && result.text.length < minLength) {
            // Try to find matche word
            var isFound = false;
            var prevWords = new Array();
            for (var i = 0; i < 3; ++i) {
                if (words.length > 0) {
                    var word = words.pop();
                    prevWords.push(word);
                    if (word.isUrl) {
                        break;
                    }
                    if (word.text.length >= minLength) {
                        isFound = true;
                        break;
                    }
                }
            }
            // If not found then return words back
            if (!isFound) {
                while (prevWords.length > 0) {
                    words.push(prevWords.pop());
                }
            }
            else {
                // otherwise merge all words to result
                prevWords = prevWords.reverse();
                while (prevWords.length > 0) {
                    var word = prevWords.pop();
                    result.text = word.text + (word.separator ? word.separator : '') + result.text;
                }
            }
        }
    }
    return result;
}
function joinMy(words) {
    var result = '';
    for (var i = 0; i < words.length; ++i) {
        var item = words[i];
        if (item.isUrl) {
            var txt = (item.word ? item.word.text : item.url);
            result += '<a href="' + item.url + '" target="_blank" class="I">' + txt + '</a>';
            result += item.text.replace(item.url, '');
        }
        else {
            result += item.text;
        }
        if (item.separator) {
            result += (item.separator == '\n' ? '<br>' : item.separator);
        }
    }
    return result;
}
function getParsedForLiveLinks(txt) {
    // use simplified url regexp
    var regex = /(http|https):\/\/(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i;
    var words = splitMy(txt, " \n\r");
    // Populate parsed words array
    var parsedWords = new Array();
    for (var i = 0; i < words.length; ++i) {
        var item = { text: words[i].text, separator: words[i].separator, isUrl: false, url: '', word: null };
        var url = regex.exec(item.text);
        if (url) {
            item.isUrl = true;
            item.url = urlRtrim(url[0], '.:-');
        }
        parsedWords.push(item);
    }
    // Find and set text for every detected link
    var tmpWords = new Array();
    for (var i = 0; i < parsedWords.length; ++i) {
        var item = parsedWords[i];
        if (item.isUrl) {
            var prevWord = getPrevWordForLink(tmpWords, 3);
            if (prevWord) {
                if (prevWord.isUrl || prevWord.text.length < 3) {
                    tmpWords.push(prevWord);
                }
                else {
                    item.word = prevWord;
                }
            }
        }
        tmpWords.push(item);
    }
    return tmpWords;
}
function getStrippedLength(text) {
    var strippedText = text.replace(/(<.*?>)/g, '');
    return strippedText.length;
}
function getTrancatedText(words, maxLength) {
    var result = '';
    var sumLength = 0;
    for (var i = 0; i < words.length && result.length < maxLength; ++i) {
        var curLength = 0;
        var text2add = '';
        var item = words[i];
        if (item.isUrl) {
            var txt = (item.word ? item.word.text : item.url);
            text2add += '<a href="' + item.url + '" target="_blank" class="I">' + txt + '</a>';
            text2add += item.text.replace(item.url, '');
            curLength += txt.length;
        }
        else {
            text2add += item.text;
            curLength += item.text.length;
        }
        if (item.separator) {
            text2add += item.separator;
        }
        if ((sumLength + curLength) < maxLength) {
            result += text2add;
        }
        sumLength += curLength;
    }
    return result;
}
function TruncateTrackDescription(value) {
    var parsedWords = getParsedForLiveLinks(value);
    var updatedText = joinMy(parsedWords)
    var result = updatedText;
    if (getStrippedLength(updatedText) > 290) {
        result = getTrancatedText(parsedWords, 285) + '... ' +
            "<a class=\"I\" href=\"javascript:void(0)\" onmouseover=\"showFullTrackDescription('" +
                EncodeJsString(updatedText, true) +
            "');\" onmouseout=\"hideFullTrackDescription();\">More</a>";
    }
    return result;
}
var _hideIntervalTimer;
function showFullTrackDescription(txt) {
    if (_hideIntervalTimer) {
        clearInterval(_hideIntervalTimer);
        _hideIntervalTimer = null;
        UnTip();
    }
    //keep tooltip in the frame's boundries
    Tip(txt, FOLLOWMOUSE, false, TITLE, '', SHADOW, false, BGCOLOR, '#ffffff', BORDERCOLOR, '#000000', FONTCOLOR, '#000000', OFFSETX, -260, WIDTH, -340);
}
function hideFullTrackDescription() {
    if (_hideIntervalTimer) {
        clearInterval(_hideIntervalTimer);
        _hideIntervalTimer = null;
    }
    _hideIntervalTimer = setInterval(function() {
        UnTip();
    }, 2000);
}
// js/common.js
function setSOverButton(obj) {
    obj.className = "AspSHoverButton E";
}
function setSOutButton(obj) {
    obj.className = "AspSButton E";
}
function setOverButton(obj) {
    obj.className = "AspHoverButton E";
}
function setOutButton(obj) {
    obj.className = "AspButton E";
}
function setLOverButton(obj) {
    obj.className = "AspLHoverButton";
}
function setLOutButton(obj) {
    obj.className = "AspLButton";
}
function setMOverButton(obj) {
    obj.className = "AspMHoverButton";
}
function setMOutButton(obj) {
    obj.className = "AspMButton";
}
function setM12OverButton(obj) {
    obj.className = "AspM12HoverButton";
}
function setM12OutButton(obj) {
    obj.className = "AspM12Button";
}
function setM2OverButton(obj) {
    obj.className = "AspM2HoverButton";
}
function setM2OutButton(obj) {
    obj.className = "AspM2Button";
}
var _songFilePlayer;
function playTrackByPlayer(songId, basePath, color, nobuy) {
    if (_songFilePlayer && !_songFilePlayer.closed) {
        _songFilePlayer.close();
    }
    var w = 380;
    var h = 180;
    var xMax = screen.width;
    var yMax = screen.height;
    var xOffset = (xMax - w) / 2;
    var yOffset = (yMax - h) / 2;

    var urlToGo = basePath + 'play/player.html?songId=' + songId;
    urlToGo += '&color=' + color;
    if (nobuy) {
        urlToGo += '&nobuy=1';
    }

    var _opts = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,titlebar=no,resizable=yes,width=' + w + ',height=' + h + ',left=' + xOffset + ',top=' + yOffset;
    _songFilePlayer = window.open(urlToGo, 'MusicPlayerWindow', _opts);

    if (_songFilePlayer) {
        if (window.focus) {
            _songFilePlayer.focus();
        }
        _songFilePlayer.opener = self;
    }
    if (!checkPopupOk(_songFilePlayer)) {
        alert("Cannot open music player because your browser blocks popups. Please change your browser settings.");
    }
}
var _urlPlayer;
function playTrackByUrl(url, width, height) {
    if (_urlPlayer && !_urlPlayer.closed) {
        _urlPlayer.close();
    }

    var xMax = screen.width;
    var yMax = screen.height;
    var xOffset = (xMax - width) / 2;
    var yOffset = (yMax - height) / 2;

    var _opts = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,titlebar=no,resizable=yes,' +
                'width=' + width + ',height=' + height + ',left=' + xOffset + ',top=' + yOffset;
    _urlPlayer = window.open(url, 'urlPlayer', _opts);
    if (window.focus && _urlPlayer) {
        _urlPlayer.focus();
    }
    if (!checkPopupOk(_urlPlayer)) {
        alert("Cannot open music page because your browser blocks popups. Please change your browser settings.");
    }
}
function checkPopupOk(poppedWindow) {
    var result = true;
    try {
        if (typeof poppedWindow == 'undefined') {
            // Safari with popup blocker...
            result = false;
        }
        else if (!poppedWindow || poppedWindow.closed) {
            // This happens if the user opens and closes the client window...
            result = false;
        }
    }
    catch (err) {
        // Do nothing here
    }
    return result;
}
function showButtonTooltip(txt) {
    Tip(txt, FOLLOWMOUSE, false, TITLE, '', SHADOW, false, BGCOLOR, '#ffffff', BORDERCOLOR, '#000000', FONTCOLOR, '#000000', OFFSETX, 10, WIDTH, -340);
}
//"../js/tooltip.js"
/* Script by: www.jtricks.com
* Version: 20060314
* Latest version:
* www.jtricks.com/javascript/window/box.html
*/
// Moves the box object to be directly beneath an object.
function move_box(an, box, width, height, maxWidth, maxHeight) {
    var cleft = 0;
    var ctop = 0;
    var obj = an;
    while (obj.offsetParent) {
        cleft += obj.offsetLeft;
        ctop += obj.offsetTop;
        obj = obj.offsetParent;
    }
    // Check if we will exceed the bottom margin
    if (ctop + height >= maxHeight) {
        ctop -= ctop + height - maxHeight;
        // in this case the right margin of the tooltip
        // must be to the left of the image
        cleft -= width + 20;
    }
    else {
        // Check if we will exceed the right margin
        if (cleft + width >= maxWidth) {
            cleft -= cleft + width - maxWidth;
        }
    }
    box.style.left = cleft + 'px';
    ctop += an.offsetHeight + 8;

    // Handle Internet Explorer body margins,
    // which affect normal document, but not
    // absolute-positioned stuff.
    if (document.body.currentStyle &&
        document.body.currentStyle['marginTop']) {
        ctop += parseInt(document.body.currentStyle['marginTop']);
    }
    box.style.top = ctop + 'px';
}
// Shows a box if it wasn't shown yet or is hidden
// or hides it if it is curre
function show_hide_box(an, width, height, borderStyle, bubbleNumber, maxWidth, maxHeight, subfolder) {
    var href = an.href;
    var boxdiv = document.getElementById(href);
    if (!subfolder) {
        subfolder = '';
    }
    if (boxdiv != null) {
        if (boxdiv.style.display == 'none') {
            bubbleNumberSpan = document.getElementById('bubbleNumberSpan');
            bubbleNumberSpan.innerHTML = bubbleNumber;

            contents = document.getElementById('bubbleIFrame');
            setHyperlink(bubbleNumber, contents, subfolder);
            // Show existing box, move it
            // if document changed layout
            move_box(an, boxdiv, width, height, maxWidth, maxHeight);
            boxdiv.style.display = 'block';
        }
        else {
            boxdiv.style.display = 'none';
        }
        return false;
    }
    // Create box object through DOM
    boxdiv = document.createElement('div');
    boxdiv.setAttribute('id', href);
    boxdiv.style.display = 'block';
    boxdiv.style.position = 'absolute';
    boxdiv.style.width = width + 'px';
    boxdiv.style.height = height + 'px';
    boxdiv.style.border = borderStyle;
    boxdiv.style.padding = '4px';
    boxdiv.style.background = '#FFFFFF';
    document.body.appendChild(boxdiv);

    var offset = 0;
    var bubbleNumberHeight = 30;
    var bubbleNumberSpan = document.createElement('span');
    bubbleNumberSpan.id = 'bubbleNumberSpan';
    bubbleNumberSpan.innerHTML = bubbleNumber;
    bubbleNumberSpan.style.fontFamily = 'tahoma, verdana';
    bubbleNumberSpan.style.fontSize = '8px';
    bubbleNumberSpan.style.textAlign = 'justify';
    bubbleNumberSpan.style.height = bubbleNumberHeight;
    boxdiv.appendChild(bubbleNumberSpan);
    
    var contents = document.createElement('iframe');
    contents.id = 'bubbleIFrame';
    contents.scrolling = 'no';
    contents.frameBorder = '0';
    contents.style.width = (width) + 'px';
    contents.style.height = (height - offset - bubbleNumberHeight) + 'px';
    boxdiv.appendChild(contents);
    move_box(an, boxdiv, width, height, maxWidth, maxHeight);
    setHyperlink(bubbleNumber, contents, subfolder)
    // The script has successfully shown the box, prevent hyperlink navigation.
    return false;
}
function setHyperlink(bubbleNumber, contents, subfolder) {
    var tooltipLink = subfolder + 'bubbles/bubble' + bubbleNumber + '.html';
    if (contents.contentWindow)
        contents.contentWindow.document.location.replace(
            tooltipLink);
    else
        contents.src = tooltipLink;
}
var helpPageTimer = null;
var helpPage = null;
function showHelpPage(helpPageNumber, subfolder) {
    if (!subfolder) {
        subfolder = '';
    }
    var left = (screen.width - 425) / 2;
    var top = (screen.height - 275) / 2;
    helpPage = window.open(subfolder + 'helpfiles/help.html', 'helpWin', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=425,height=275,' + 'top=' + top + ',left=' + left + " ");
    helpPageTimer = setInterval("fillHelpPage('" + helpPageNumber + "', '" + subfolder + "');", 100);
}
function fillHelpPage(helpPageNumber, subfolder) {
    var helpPageNumberSpan = helpPage.document.getElementById('helpPageNumber');
    var helpContent = helpPage.document.getElementById('helpPageContent');
    if (helpPageNumberSpan != null && helpContent != null) {
        clearInterval(helpPageTimer);
        // Retrieve the help page number span and set its content
        helpPageNumberSpan.innerHTML = helpPageNumber;
        // Retrieve the help page inner frame and set the source
        var helpPageLink = subfolder + 'helpfiles/help' + helpPageNumber + '.html';
        if (helpContent.contentWindow)
            helpContent.contentWindow.document.location.replace(helpPageLink);
        else
            helpContent.src = helpPageLink;
    }
}

