(function($){
	$("body").data("wmvplayerList", []);
	
	$.fn.wmvplayer = function(options) {
		var defaults = {
			autoPlay: 1,
			width: 299,
			height: 237,
			filePathWS : "Data.asmx/GetVideoPreview",
			loop: 1,
			playList: [{
				src: "",
				artist: "",
				itemID: 0,
				title: "",
				image: ""
			}]
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var obj = $(this);
			obj.addClass("wmvplayer");
			obj.data("UID", (new Date()).getTime());
			obj.data("videoListCounter", 0);
			
			if (typeof (options.playList) == "string")
			{
			    options.playList = [{
				    src: options.playList,
				    artist: "",
				    itemID: 0,
				    title: "",
				    image: ""
			    }]
			}
			else if (!options.playList.length)
			{
			    options.playList = [{
				    src: options.playList.src,
				    artist: "",
				    itemID: 0,
				    title: "",
				    image: options.playList.image
			    }]
			}

			var videoObject = options.playList[obj.data("videoListCounter")];
			
	    var html = "<img class='coverArt' src='" + videoObject.image + "' />";        
        html += "<object id='Player_" + obj.data("UID") + "' width='" + options.width + "' height='" + options.height + "' ";
	    if($.browser.msie)
	    {
	    	html += "classid='clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'>" +
	    					"<param name='url' value='" + videoObject.src + "'>";
	    }
	    else
	    {
	    	html += "type='application/x-ms-wmp'>" +
	              "<param name='src' value='" + videoObject.src + "'>";
	    }
	    html += "<param name='SendPlayStateChangeEvents' value='1'>" +
	    				"<param name='autoSize' value='0'>" +
	            "<param name='uiMode' value='none'>" +
	            "<param name='AutoStart' value='" + options.autoPlay + "'>" +
	            "<param name='Volume' value='100'>" +
	            "<param name='stretchToFit' value='1'>" +
	            "<param name='windowlessVideo' value='0'>" +
	            "<param name='EnableContextMenu' value='false'>" +
	            "</object>";

			$("<div class='videoPlayerArea'></div>").html(html).appendTo(obj);
			$("<div class='controlPanel'></div>")
				.append("<a href='#' class='btnPrev controlButton'></a>")
				.append("<a href='#' class='btnPlay controlButton'></a>")
				.append("<a href='#' class='btnStop controlButton'></a>")
				.append("<a href='#' class='btnNext controlButton'></a>")
				.append("<div class='seekBar'></div>")
				.append("<div class='displayTime'>00:00</div>")
				.append("<a href='#' class='imgLoading controlButton'></a>")
				.append("<a href='#' class='btnSound controlButton'></a>")
				.append("<div class='volumeBarContainer'><div class='volumeBar'></div></div>")
				.appendTo(obj);
			$("<div class='videoName'>&nbsp;</div>").appendTo(obj);

			obj[0].videoPlayerArea = obj.find(".videoPlayerArea");
			obj[0].coverArt = obj.find(".coverArt");
			obj[0].controlPanel = obj.find(".controlPanel");
			obj[0].btnPrev = obj.find(".btnPrev");
			obj[0].btnPlay = obj.find(".btnPlay");
			obj[0].btnStop = obj.find(".btnStop");
			obj[0].btnNext = obj.find(".btnNext");
			obj[0].seekBar = obj.find(".seekBar");
			obj[0].displayTime = obj.find(".displayTime");
			obj[0].btnSound = obj.find(".btnSound");
			obj[0].imgLoading = obj.find(".imgLoading");
			obj[0].volumeBar = obj.find(".volumeBar");
			obj[0].volumeBarContainer = obj.find(".volumeBarContainer");
			obj[0].videoName = obj.find(".videoName");
			
		    var totalheight = options.height + obj[0].controlPanel.height() + obj[0].videoName.height();
		    if (videoObject.title == "")
		    {
		        obj[0].videoName.hide();
		        totalheight -= obj[0].videoName.height();
		    }

			obj.height(totalheight);
			obj.width(options.width);
			obj[0].videoPlayerArea.height(options.height);
			obj[0].videoPlayerArea.width(options.width);
			obj[0].seekBar.width(options.width - (obj[0].btnPrev.width()*6) - obj[0].displayTime.width() - 32); //total width - (all button width) - display time width - (border and margin of seek bar))
			obj[0].coverArt.width(options.height-20).height(options.height-20).click(function() {
			    obj[0].play();
			    return false;
			});
/*
			.css({
			    "top": obj.position().top + 10,
			    "left": obj.position().left + ((obj.width() - obj[0].coverArt.width())/2)
			});
*/
			if (videoObject.image != "")
				obj[0].coverArt.css("display", "block");
			$("#Player_" + obj.data("UID")).css("margin-left", -1000000);
			
			if (options.playList.length == 1)
			{
			    obj[0].btnPrev.hide();
			    obj[0].btnNext.hide();
			    obj[0].seekBar.width(obj[0].seekBar.width() + (obj[0].btnPrev.width()*2));
			    obj[0].btnPlay.css("margin-left", "2px");
			}
			else {
			    obj[0].btnPrev.css("margin-left", "2px");
			}

			obj[0].seekBar.slider({
				range: "min",
				value: 0,
				step: 0.1,
				orientation: "horizontal",
				start: function(event, ui) {
					obj[0].seekBar.data("liveUpdate", "false");
				},
				slide: function(event, ui) {
					var min = Math.floor(ui.value / 60);
					var sec = Math.round(ui.value % 60);
					if (min < 10) min = "0" + min;
					if (sec < 10) sec = "0" + sec;
					obj[0].displayTime.text(min + ":" + sec);
				},
				stop: function(event, ui) {
					$("#Player_" + obj.data("UID"))[0].controls.currentPosition = ui.value;
					obj[0].seekBar.data("liveUpdate", "true");
				}
			});
				
			obj[0].volumeBar.slider({
				range: "min",
				value: 100,
				orientation: "vertical",
				slide: function(event, ui) {
					$("#Player_" + obj.data("UID"))[0].settings.volume = ui.value;
					if (ui.value == 0)
					{
						obj[0].btnSound
							.removeClass("low")
							.removeClass("none")
							.addClass("mute");
					}
					else if (ui.value < 33) {
						obj[0].btnSound
							.removeClass("low")
							.removeClass("mute")
							.addClass("none");
					}
					else if (ui.value < 66) {
						obj[0].btnSound
							.removeClass("none")
							.removeClass("mute")
							.addClass("low");
					}
					else {
						obj[0].btnSound
							.removeClass("low")
							.removeClass("none")
							.removeClass("mute");
					}
				},
				stop: function(event, ui) {
					obj[0].volumeBarContainer.fadeOut("fast");
				}
			});
			
			obj[0].volumeBarContainer.css({
			    //"top" : obj[0].btnSound.position().top + obj[0].btnSound.height() - (obj[0].volumeBarContainer.height()),
			    "top" : obj.position().top + obj.height() - obj[0].volumeBarContainer.height(),
			    "left" : obj.position().left + obj.width() + 2
			});

			obj[0].displayTimeFunc = function()
		  {
		  	me = $(this);
		  	var timeString;
		  	var maxTime = 100;
		  	var currTime = 0;
		  	
		  	if ($("#Player_" + me.data("UID"))[0].controls) {
		  		timeString = $("#Player_" + me.data("UID"))[0].controls.currentPositionString;
		  		currTime = $("#Player_" + me.data("UID"))[0].controls.currentPosition;
		  	}
		  	
		  	if ($("#Player_" + me.data("UID"))[0].currentMedia) {
		  		maxTime = $("#Player_" + me.data("UID"))[0].currentMedia.duration;
		  	}
		    	
		    if (timeString == "") {
		    	timeString = "00:00";
		    	maxTime = 100;
		    	currTime = 0;
		    }
		    	
			  me[0].seekBar.slider('option', 'max', maxTime);
			  if (me[0].seekBar.data("liveUpdate") != "false")
			  {
			  	me[0].displayTime.text(timeString);
			  	me[0].seekBar.slider('option', 'value', currTime);
			  }
			}
			
			obj[0].OnDSPlayStateChangeEvt = function(arg)
	    {
	    		me = !isNaN(arg) ? $(obj[0]) : $(this);
				NewState = $("#Player_" + me.data("UID"))[0].playState;
	    		me[0].btnPlay.toggleClass("pause", NewState == 3);
	    		
    	    	obj[0].imgLoading.css("visibility", (NewState > 3) ? "visible" : "hidden");
    	    	if (NewState > 3 || NewState == 1 || ($("#Player_" + me.data("UID"))[0].URL != undefined && $("#Player_" + me.data("UID"))[0].URL.toLowerCase().indexOf(".wma") != -1))
    	    	{
    	    	    $("#Player_" + me.data("UID")).css("margin-left", -1000000);
					me[0].coverArt.css("display", "block");
    	    	}
    	    	else {
					me[0].coverArt.hide();
    	    	    $("#Player_" + me.data("UID")).css("margin-left", 0);
    	    	}

	    		
	    		if (NewState <= 3)
	    		{
        	        //resize the wmv player
        	        if ($("#Player_" + me.data("UID")).width() != options.width)
		    	        $("#Player_" + me.data("UID")).width(options.width);
		    	    if ($("#Player_" + me.data("UID")).height() != options.height)
		    	        $("#Player_" + me.data("UID")).height(options.height);
	    		}
		    	
			    $("#Player_" + me.data("UID")).data("status", NewState);
			    
			    if (NewState == 8) //MediaEnded, play Next
			    {
			        if (options.loop == 1 || me.data("videoListCounter") < options.playList.length - 1)
			    	    setTimeout("$('#Player_" + me.data("UID") + "').parents('.wmvplayer')[0].playNext(1)", 1);
			    }
	    }
	    
	    obj[0].playNext = function(arg)
	    {
	        me = $(this);
	        me.data("videoListCounter", me.data("videoListCounter") + arg);
	        if (me.data("videoListCounter") >= options.playList.length) me.data("videoListCounter", 0);
	        if (me.data("videoListCounter") < 0) me.data("videoListCounter", options.playList.length - 1);
		    me[0].play();
	    }
			
		obj[0].stop = function(){
			    $("#Player_" + obj.data("UID"))[0].controls.stop();
	    };
	    
		obj[0].pause = function(){
			    $("#Player_" + obj.data("UID"))[0].controls.pause();
	    };

		obj[0].play = function(mediaObject){
	    		me = $(this);
	    		
	    		if ($("#Player_" + obj.data("UID")).data("status") == 2 && mediaObject == null) // is pausing
	    		{
	    		    $("#Player_" + me.data("UID"))[0].controls.play();
	    		    return;
	    		}
	    		
    		    if (mediaObject != null)
    		    {
	    		    if (typeof(mediaObject) == "string") {
	    		        options.playList = [{
				            src: mediaObject,
				            artist: "",
				            itemID: 0,
				            title: "",
				            image: ""
	    		        }];
	    		    }
	    		    else if (mediaObject.length) {
	    		        options.playList = mediaObject;
	    		    }
	    		    else {
	    		        options.playList = [mediaObject];
	    		    }
    		        me.data("videoListCounter", 0);
    		        mediaObject = null;
	    		}
	    		
	    		if (mediaObject == null)
	    		    mediaObject = options.playList[me.data("videoListCounter")];

	    		if (mediaObject.src == "" && mediaObject.itemID != "")
	    		{
                    $.ajax({
                        type: "POST",
                        url: options.filePathWS,
                        data: "{'itemId': '" + mediaObject.itemID + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(result) {
                            mediaObject.src = result;
                            if (options.playList[me.data("videoListCounter")] == mediaObject)
                            {
		    	                me[0].play();
                            }
                        },
                        error: function() {
                            try {
                                console.log('Error! cannot get the preview of video. Item ID: ' + mediaObject.itemID);
                            }
                            catch (err) {}
                        }
                    });
                    return;
	    		}

    		    if(typeof (options.onPlay) == 'function')
    		        options.onPlay();
    		    
    		    if (mediaObject.artist == undefined) mediaObject.artist = "";
    		    if (mediaObject.title == undefined) mediaObject.title = "";
    		    
    		    me[0].videoName.text(mediaObject.artist + (mediaObject.artist != "" ? " - " : "") + mediaObject.title);
    		    
    		    var isWMA = (mediaObject.src.toLowerCase().indexOf(".wma") != -1);
    		    
    		    $("#Player_" + me.data("UID"))[0].uiMode = isWMA ? "invisible" : "none";

	            me[0].coverArt.attr("src", mediaObject.image);

    		    $("#Player_" + me.data("UID")).css("margin-left", -1000000);
/*
    		    if (isWMA)
    		    {
    		        if ($("#Player_" + me.data("UID"))[0].URL.toLowerCase().indexOf(".wma") == -1)
					{
        		        $("#Player_" + me.data("UID")).css("margin-left", -1000000);
			            //me[0].coverArt.css("display", "block");
					}
    		    }
    		    else {
    		        if ($("#Player_" + me.data("UID"))[0].URL.toLowerCase().indexOf(".wma") != -1)
					{
    		            $("#Player_" + me.data("UID")).css("margin-left", 0);
					}
    		    }
*/

    		    if ($("#Player_" + me.data("UID"))[0].URL != mediaObject.src)
    		        $("#Player_" + me.data("UID"))[0].URL = mediaObject.src;
		        $("#Player_" + me.data("UID"))[0].controls.play();
	    };

		obj[0].btnPlay.click(function(){
	    		if ($("#Player_" + obj.data("UID")).data("status") == 3) //is playing
	    			obj[0].pause();
	    		else
			    	obj[0].play();
			    return false;
	    });

	    obj[0].btnStop.click(function(){
			    obj[0].stop();
			    return false;
	    });
	    
	    obj[0].btnNext.click(function(){
	    		obj[0].playNext(1);
	    		return false;
	    });
	    
	    obj[0].btnPrev.click(function(){
	    		obj[0].playNext(-1);
	    		return false;
	    });
	    
	    obj[0].btnSound.click(function(){
	            if (obj[0].volumeBarContainer.css("display") == "none")
	    		    obj[0].volumeBarContainer.fadeIn("fast");
	    		else 
	    		    obj[0].volumeBarContainer.fadeOut("fast");
	    		return false;
	    });
			
		if(window.attachEvent) {
			$("#Player_" + obj.data("UID"))[0].attachEvent("PlayStateChange", obj[0].OnDSPlayStateChangeEvt );
		}
		else {
		    var oldOnDSPlayStateChangeEvt = null;
		    if(typeof (window.OnDSPlayStateChangeEvt) == 'function') {
		        oldOnDSPlayStateChangeEvt = window.OnDSPlayStateChangeEvt;
		    }
	        window.OnDSPlayStateChangeEvt = function() {
	            if (oldOnDSPlayStateChangeEvt != null) oldOnDSPlayStateChangeEvt();
	            obj[0].OnDSPlayStateChangeEvt();
	        }
		}

        $('body').click(function() {
            $(".wmvplayer .volumeBarContainer").fadeOut("fast");
        });
        
        obj[0].volumeBarContainer.click(function(event){
            event.stopPropagation();
        });
        
 	    $(window).unload( function () {
	        if ($("#Player_" + obj.data("UID")).length > 0 && $("#Player_" + obj.data("UID"))[0].controls != undefined)
	            $("#Player_" + obj.data("UID"))[0].controls.stop();
	    });
	    
	    setInterval("$('#Player_" + obj.data("UID") + "').parents('.wmvplayer')[0].displayTimeFunc()", 200);
	    
	    if (options.autoPlay && videoObject.src == "")
            obj[0].play();
		});
	};
})(jQuery);
