﻿var test;


function Browser() {
    var ua, i;

    this.isIE = false;
    this.isNS = false;
    this.version = null;

    ua = navigator.userAgent;

    if ((i = ua.indexOf('MSIE')) >= 0) {
        this.isIE = true;
        this.version = parseFloat(ua.substr(i + 'MSIE'.length));
        return;
    }

    if ((i = ua.indexOf('Netscape6/')) >= 0) {
        this.isNS = true;
        this.version = parseFloat(ua.substr(i + 'Netscape6/'.length));
        return;
    }

    /* Treat any other "Gecko" browser as NS 6.1. */
    if ((i = ua.indexOf('Gecko')) >= 0) {
        this.isNS = true;
        this.version = 6.1;
        return;
    }
}

window.browser = new Browser();

/*
* WMP Event object
*/
var WmpEvent = {};
WmpEvent.attachWmpEvent = function(event, eventType, eventHandler) {
    //return false;
    if (window.browser.isIE) {
        document.attachEvent('on' + eventType, eventHandler);
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }

    if (window.browser.isNS) {
        document.addEventListener(eventType, eventHandler, true);
        event.preventDefault();
    }
}
WmpEvent.detachWmpEvent = function(eventType, eventHandler) {
    if (window.browser.isIE) {
        document.detachEvent('on' + eventType, eventHandler);
    } else if (window.browser.isNS) {
        document.removeEventListener(eventType, eventHandler, true);
    }
}


// This object represents a Windows Media Player object
// with ability to bind events on an HTML page to its controls

function MediaPlayer(mediaUrl) {

    /* URL: "private" property and method */
    var getUrl = function() { return mediaUrl; }

    /* Player type */
    var isActiveX = function() { return null != window.ActiveXObject; }
    var isOpera = function() { return -1 != navigator.userAgent.indexOf('Opera'); }
    var isWmp11 = function() {

        if (isActiveX()) {
            return false;
        }

        if (!!navigator.plugins) {
            for (var i in navigator.plugins) {
                if ('np-mswmp' == navigator.plugins[i].description) {
                    return true;
                }
            }
        }

        return false;
    }

    /* HTML code for player */
    var getPlayerHtml = function(autostart) {
        var html = '';
        autostart = !!autostart ? 1 : 0;
        if (autostart == 1) playState = 3;

        if (isWmp11() && !isOpera()) {
            html = '<object id="wmplayer" type="application/x-ms-wmp" data="' + getUrl() + '" width="0" height="0">';
            html += '<param name="URL" value="' + getUrl() + '" />';
            html += '<param name="uiMode" value="minimal" />';
            html += '<param name="EnablePositionControls" value="true" />';
            html += '<param name="ShowControls" value="1" />';
            html += '<param name="ShowDisplay" value="0" />';
            html += '<param name="ShowStatusBar" value="0" />';
            html += '<param name="volume" value="' + (GetSavedVolume() ? GetSavedVolume() : 50) + '" />';
            html += '<param name="AutoStart" value="' + toplay + '" />';
            html += '</object>';
        } else if (isActiveX()) {
            /* no object code needed */
        } else {
            html = '<embed id="wmplayer" name="wmplayer" type="application/x-mplayer2"';
            html += ' pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/" ';
            /*html += ' filename="' + getUrl() + '" ';*/
            html += ' src="' + getUrl() + '" ';
            html += ' EnablePositionControls="1" ';
            html += ' ShowControls="1" ShowDisplay="0" ShowStatusBar="0" Volume="' + (GetSavedVolume() ? GetSavedVolume() : 50) + '" AutoStart="' + autostart + '" width="0" height="0"/>';


        }

        return html;
    }

    var volume = 0;
    var playing = toplay;

    /* initialization */
    var playerContainer = null;
    var initPlayer = function() {
        playerContainer = document.createElement('div');
        playerContainer.style.position = 'absolute';
        playerContainer.style.width = '1px';
        playerContainer.style.height = '1px';
        playerContainer.setAttribute('id', 'player_container');
        document.body.appendChild(playerContainer);
        playerContainer.innerHTML = getPlayerHtml(toplay);

        if (isActiveX()) {
            wmpControl = new ActiveXObject('WMPlayer.OCX.7');
            wmpControl.URL = getUrl();
            wmpControl && wmpControl.settings && (wmpControl.settings.volume = GetSavedVolume());

        } else if (isWmp11()) {
            wmpControl = document.getElementById('wmplayer');
        }

        //console.log("Status = " + wmpControl.status);
        //wmpControl && wmpControl.settings && (wmpControl.settings.volume = 100);
        //wmpControl.settings.volume = 100;
        //console.log("Were here!!!");
        //console.log("Volume = " + wmpControl.settings.volume);
        //console.log("DONE!")
    }

    initPlayer();

    /* String variables, set methods */
    var i = 0;

    var statusbar;
    var volumebar;

    /* volume */
    var volumeSlider = null;
    window.volumeSliderInfo = {}; /* make it temp global */

    /* private event handlers */
    var volumeDragStart = function(ev) {

        var x, y;
        volumeSliderInfo.zIndex = 0;

        ev = ev || window.event;

        if (null == volumeSlider) {
            if (browser.isIE) {
                volumeSlider = ev.srcElement;
            } else if (browser.isNS) {
                volumeSlider = ev.target;
            } else {
                /* no support for Opera yet, coming soon */
                return false;
            }

            /* do we really need it? */
            if (3 == volumeSlider.nodeType) {
                volumeSlider = volumeSlider.parentNode;
            }
        }

        volumeSliderInfo.mouseX = ev.clientX;

        WmpEvent.attachWmpEvent(ev, 'mousemove', volumeDragDo);
        WmpEvent.attachWmpEvent(ev, 'mouseup', volumeDragEnd);

    }
    var volumeDragDo = function(event) {
        if (muted) {
            muteReseted = true;
            Mute();
        }

        var mouseX = event.clientX;
        volumeSliderInfo.marginLeftCur = volumeSliderInfo.marginLeftCur - (volumeSliderInfo.mouseX - mouseX);
        volumeSliderInfo.mouseX = mouseX;

        var loud_img = document.getElementById('volume');
        if ((volumeSliderInfo.marginLeftCur > 42) && (volumeSliderInfo.marginLeftCur < 62)) {
            test = "ставим 3 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_3";
        } else if ((volumeSliderInfo.marginLeftCur > 21) && (volumeSliderInfo.marginLeftCur < 42)) {
            test = "ставим 2 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_2";
        } else if ((volumeSliderInfo.marginLeftCur > 0) && (volumeSliderInfo.marginLeftCur < 21)) {
            test = "ставим 1 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_1";

        }
        if (volumeSliderInfo.marginLeftCur < volumeSliderInfo.marginLeftMin) {
            loud_img.className = "volume_level_0"
            volumeSliderInfo.marginLeftCur = volumeSliderInfo.marginLeftMin;

        } else if (volumeSliderInfo.marginLeftCur > volumeSliderInfo.marginLeftMax) {
            volumeSliderInfo.marginLeftCur = volumeSliderInfo.marginLeftMax;


        }

        var tt = -65;

        document.getElementById("volumeslider").style.marginLeft = volumeSliderInfo.marginLeftCur + 'px';

        if (browser.isIE) {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
        } else if (browser.isNS) {
            event.preventDefault();
        }

        /* seeting volume */
        var volume = parseInt(100 * (volumeSliderInfo.marginLeftCur - volumeSliderInfo.marginLeftMin) / (volumeSliderInfo.marginLeftMax - volumeSliderInfo.marginLeftMin));
        Set_Cookie("selected_volume", volume, 30, "/");
        wmpControl && wmpControl.settings && (wmpControl.settings.volume = volume);
        volumebar && (volumebar.innerHTML = volume + '%');
    }
    var volumeDragEnd = function(event) {
        WmpEvent.detachWmpEvent('mousemove', volumeDragDo);
        WmpEvent.detachWmpEvent('mouseup', volumeDragEnd);
    }

    /* controls */
    this.play = function() {
        if (false == playing) {
            playing = true;

            if (wmpControl && wmpControl.controls) {
                wmpControl.controls.play();
                wmpControl.settings && (wmpControl.settings.volume = GetSavedVolume());
            } else {
                playerContainer.innerHTML = getPlayerHtml(true); /*  */

            }
        }
    }
    this.stop = function() {
        if (true == playing) {
            playing = false;

            if (wmpControl && wmpControl.controls) {
                wmpControl.controls.stop();
            } else {
                playerContainer.innerHTML = getPlayerHtml(false); /*  */

            }
        }
    }
    this.setUrl = function(newUrl) {
        mediaUrl = newUrl;
        wmpControl && (wmpControl.URL = newUrl);

        if (!wmpControl) {
            playerContainer.innerHTML = getPlayerHtml(true);
        }
    }

    /* Binding methods to DOM elements of the player */
    this.bindPlayButton = function(buttonPlay) { buttonPlay && (buttonPlay.onclick = this.play) }
    this.bindStopButton = function(buttonStop) { buttonStop && (buttonStop.onclick = this.stop) }
    this.bindVolumeSlider = function(volumeSliderElement, maxLeft, maxRight, marginLeft, defaultValue) {
        if (null == volumeSliderElement || 0 == parseInt(maxLeft) || 0 == parseInt(maxRight) || 0 == parseInt(marginLeft)) {
            return false;
        }

        volumeSlider = volumeSliderElement;
        //volumeSlider.style.marginLeft = parseInt(defaultValue) + 'px';

        var loud_img = document.getElementById('volume');
        //loud_img.className = "volume_level_2";

        volumeSlider.onmousedown = volumeDragStart;

        window.volumeSliderInfo.marginLeftOrig = parseInt(marginLeft);
        window.volumeSliderInfo.marginLeftCur = parseInt(defaultValue);
        window.volumeSliderInfo.marginLeftMin = parseInt(marginLeft) - maxLeft - 1;
        window.volumeSliderInfo.marginLeftMax = parseInt(marginLeft) + maxRight;

        // ========================================= Position slider on load ==============================
        volumeSliderInfo.marginLeftCur = GetSavedVolume() * (volumeSliderInfo.marginLeftMax - volumeSliderInfo.marginLeftMin) / 100 + volumeSliderInfo.marginLeftMin;

        if ((volumeSliderInfo.marginLeftCur > 42) && (volumeSliderInfo.marginLeftCur <= 62)) {
            test = "ставим 3 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_3";
        } else if ((volumeSliderInfo.marginLeftCur > 21) && (volumeSliderInfo.marginLeftCur < 42)) {
            test = "ставим 2 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_2";
        } else if ((volumeSliderInfo.marginLeftCur > 0) && (volumeSliderInfo.marginLeftCur < 21)) {
            test = "ставим 1 уровень громкости\n" + loud_img.className;
            loud_img.className = "volume_level_1";

        }
        if (volumeSliderInfo.marginLeftCur <= volumeSliderInfo.marginLeftMin) {
            loud_img.className = "volume_level_0"
            volumeSliderInfo.marginLeftCur = volumeSliderInfo.marginLeftMin;

        } else if (volumeSliderInfo.marginLeftCur > volumeSliderInfo.marginLeftMax) {
            volumeSliderInfo.marginLeftCur = volumeSliderInfo.marginLeftMax;
        }

        document.getElementById("volumeslider").style.marginLeft = volumeSliderInfo.marginLeftCur + 'px';
        // ================================================================================================        
    }
    this.bindStatusBar = function(elem) {
        statusbar = elem;
    }
    this.bindVolumeBar = function(elem) {
        volumebar = elem;
    }
}

