/*jslint laxbreak:true */
/*jslint laxcomma:true */
/*jslint loopfunc:true */
/*jslint strict:true */
/*jslint browser:true */
/*jslint devel:true */
define([
	"underscore"
	, "jquery"
	, "toolbox"
	, "backbone"
]
, function (
_
, $
, Toolbox
, Backbone
) {
	"use strict";

	var WebAudio	= Toolbox.Base.extend(_.extend({
		_defaultOpts:	{
			autoplay:		"autoplay"
			, preload:		"auto"
			, controls:		false
			, loop:			false
			, src:			""
		}

		, obj:			new Audio()

		, $obj:			null

		, constructor:	function () {
			var that	= this
			;

			_.bindAll(this
// Public
				, "loadMedia"
// Private
				, "_bindAudio"
// Events
				, "__audioProgress"
				, "__audioError"
				, "__audioPause"
				, "__audioPlay"
				, "__audioTimeUpdate"
				, "__audioLoadStart"
				, "__audioCanPlay"
				, "__audioEnded"
			);

			that.$obj	= $(that.obj);

			that.obj.attributes	= _.extend({}, that.obj.attributes, that._defaultOpts);

			return that;
		}
/**
 * PUBLIC
**/
		, loadMedia:		function (uri) {
			var that	= this
			;

			that.obj.stop();
		}
/**
 * PRIVATE
**/
		, _bindAudio:		function () {
			var that	= this
			;

			that.$obj.unbind();

			that.$obj.on("loadstart", that.__audioLoadStart);

			that.$obj.on("progress", that.__audioProgress);

			//that.$obj.on("suspend", that.__audioSuspend);

			//that.$obj.on("abort", that.__audioAbort);

			that.$obj.on("error", that.__audioError);

			//that.$obj.on("emptied", that.__audioEmptied);

			//that.$obj.on("stalled", that.__audioStalled);
			that.$obj.on("pause", that.__audioPause);

			that.$obj.on("play", that.__audioPlay);

			//that.$obj.on("loadedmetadata", that.__audioLoadedMetaData);

			//that.$obj.on("loadeddata", that.__audioLoadedData);

			//that.$obj.on("waiting", that.__audioWaiting);

			//that.$obj.on("playing", that.__audioPlaying);

			that.$obj.on("canplay", that.__audioCanPlay);

			//that.$obj.on("canplaythrough", that.__audioCanPlayThrough);

			//that.$obj.on("seeking", that.__audioSeeking);

			//that.$obj.on("seeked", that.__audioSeeked);

			that.$obj.on("timeupdate", that.__audioTimeUpdate);

			that.$obj.on("ended", that.__audioEnded);

			//that.$obj.on("ratechange", that.__audioRateChanged);

			//that.$obj.on("durationchange", that.__audioDurationChange);

			//that.$obj.on("volumechange", that.__audioVolumeChange);
		}

/**
 * EVENTS
**/
		, __audioProgress:	function (event) {

		}
		, __audioError:		function (event) {

		}

		, __audioPause:		function (event) {
			var that	= this
			;

		}

		, __audioPlay:		function (event) {
			var that	= this
			;

		}

		, __audioTimeUpdate:		function (event) {
			var that	= this
			;

		}

		, __audioLoadStart:		function (event) {
			var that	= this
			;

		}

		, __audioCanPlay:		function (event) {
			var that	= this
			;

		}

		, __audioEnded:		function (event) {
			var that	= this
			;

		}
	}, Backbone.Events));

	return WebAudio;
});