;(function(jQuery) {

	var defaults = {
		swfPlayer: 			'',
		uid:				'',
		swfExtPath:			'',
		src:				'',
		useHTML5:			1
	};
	
	//extend the fn for the methods
	jQuery.fn.ifwsplayer = function(settings) {
		
		jQuery.extend(this,{
						
			initialize: function() {
				this.uid = jQuery(this).attr('rel');
				this.src = jQuery(this).find('.song_src').html();
				this.audio = document.createElement('audio');
				
				if (this.useHTML5==1 && this.audio.canPlayType && this.audio.canPlayType('audio/mpeg')) {
					this.initHTML();
				} else {
					this.initFlash();
					
				}
				return this;
			},
			
			initFlash: function() {
				this.flashVars = { "soundFile": this.src };
				this.flashParams = { "quality": "high", "wmode": "transparent", "menu": "false" };
				this.swfPlayer = swfobject.embedSWF(this.swfExtPath+"player.swf", "player_fallback_"+this.uid, "190", "24", "7", "", this.flashVars, this.flashParams, {} );
				jQuery(this).find('.html_player').hide();
			},
			
			initHTML: function() {
				var pl=this;

				jQuery(this.audio).append('<source src="'+this.src+'" type="audio/mpeg">');
				this.audio.src = this.src;
				
				this.audio.addEventListener('timeupdate', function() { pl.timeUpdate() });
				this.audio.addEventListener('ended', function() { pl.ended() });
				
				jQuery(this).find('.player_start').click(function(e) {
					pl.play(e);
				}).addClass('player_paused');
				
				jQuery(this).find('.player_progress').click(function(e) {
					pl.setCurTime(e);
				});
				
				jQuery('#html5_player_'+this.uid).prepend(this.audio);
				
				jQuery(this).find('.player_flashfallback').hide();
			},
			
			play: function(e) {
				if (this.audio.paused) {
					this.audio.play();
					jQuery(this).find('.player_start').addClass('player_playing').removeClass('player_paused');
					jQuery(this).find('.player_controls').animate({left: "20px"}, "fast");
				} else {
					this.audio.pause();
					jQuery(this).find('.player_start').addClass('player_paused').removeClass('player_playing');
					jQuery(this).find('.player_controls').animate({left: "-130px"}, "fast");
				}
				e.preventDefault();
			},
			
			timeUpdate: function() {
				var fra = this.audio.currentTime/this.audio.duration;
				var per = fra*100;
				var wi = jQuery(this).find('.player_progress').width();
				var npos = wi-(wi*(per/100));
				jQuery(this).find('.player_progress_bar').css('width', npos+'px');
				jQuery(this).find('.player_duration').html(per);
				jQuery(this).find('.player_time').html(this.formatTime(this.audio.currentTime));
			},
			
			ended: function() {
				jQuery(this).find('.player_start').removeClass('player_playing').addClass('player_paused');
				jQuery(this).find('.player_controls').animate({left: "-130px"}, "fast");
				jQuery(this).find('.player_progress_bar').css('width: 0px');
				jQuery(this).find('.player_time').htnml(this.formatTime(0));
			},
			
			setCurTime: function(e) {
				var pos = jQuery(this).find('.player_progress').offset();
				var left = e.pageX-pos.left;
				var per = left*100/jQuery(this).find('.player_progress').width();
				var cTime = this.audio.duration*per/100;
				
				this.audio.currentTime = cTime;
				
				e.preventDefault();
			},
			
			formatTime: function(s) {
				var d = new Date(s * 1000);
				var h = d.getUTCHours();
				var m = d.getUTCMinutes();
				var s = d.getUTCSeconds();
				var sh = (h < 10) ? "0" + h : h;
				var sm = (m < 10) ? "0" + m : m;
				var ss = (s < 10) ? "0" + s : s;
				return sm+':'+ss;
			}
		
		});
		
		jQuery.extend(this, defaults, settings);
		
		this.initialize();
		
		return this;
	};
})(jQuery);
