function Player(){

	this.currentPlayer = null;	// Window where the player is
	
	/**
	* expand open the track in expanded player
	*/

	this.playTrack = function(track_id, release_id){
		//open a blank window if there is no player
		if(player.isPlayerLost())
			player.currentPlayer=window.open("", "", "width=444,height=644,status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=no");
		
		player.currentPlayer.focus();
		
		var ids = ""+track_id;
	
		if (player.isPlayerLost()) { // If there is no info in the window opened
			player.expand(track_id, release_id, ids);
		} else {
			if (player.trackNotInPlaylist(track_id)) {
				player.currentPlayer.focus();
				player.getFlashMovieObject().add(ids, release_id);
				player.getFlashMovieObject().playSong(track_id, release_id);
				player.addTracksToPlaylist(ids);
			}
		}
	};
	
	this.play = function(track_id, release_id){
		//open a blank window if there is no player
		if(player.isPlayerLost())
			player.currentPlayer=window.open("", "", "width=444,height=644,status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=no");
		
		
		player.currentPlayer.focus();
		
		var ids = "";
		jQuery.get(baseUrl + "json/getTracksFromRelease/" + release_id, {}, function(json){
			//get all tracks from release
			var tracks_string = json.substr(json.indexOf("[")+1, json.indexOf("]")-json.indexOf("[")-1);
			tracks_string = tracks_string.replace(/"/g, "");
			var tracks_array = tracks_string.split(",");
			for (var i in tracks_array){
				if (IsNumeric(tracks_array[i])){
					//var id = parseInt(tracks_array[i].substr(1, tracks_array[i].length-2));
					var id = tracks_array[i];
					if (!ids.length)
						ids += id;
					else
						ids += "-" + id;
				}
			}
			
			if (player.isPlayerLost()){	// If there is no info in the window opened
				player.expand(track_id, release_id, ids);
			}else{
				if (player.trackNotInPlaylist(track_id)){
					player.getFlashMovieObject().add(ids, release_id);
					player.getFlashMovieObject().playSong(track_id, release_id);
					player.addTracksToPlaylist(ids);
				}
			}
		});
	};
	
	/**
	* Changes from player bar to big player
	* @param ids track_ids from release_id
	*/

	this.expand = function(track_id, release_id, ids){
		if (ids == undefined)
			ids = "";

		var url = baseUrl + 'flashPlayer/loadPlaylistInSession';

		if (ids.length > 0)
			var aIds = ids.split("-");
		else
			var aIds = new Array();

		jQuery.get(url, {}, function(data){
			//load playlist from session
			if (data){
				data = data.replace(/"/g, "");
				var aData = data.split(",");

				for (var d in aData ){
					if (IsNumeric(aData[d]))
					if (jQuery.inArray(aData[d], aIds) == -1 && aData[d] != "null")    // If not in array
						aIds[aIds.length] = aData[d];
				}

				ids = aIds.join('-');
			}

			if (track_id != undefined)
				url = baseUrl + "flashPlayer/expand/" + track_id + "/" + release_id + "/" + ids;
			else
				url = baseUrl + "flashPlayer/expand/";

			//load info into window opened
			player.currentPlayer.document.open();
			player.currentPlayer.name = "expandedWindow";
			player.currentPlayer.location.href = url;
			player.currentPlayer.document.close();

 			//if (isChrome())
			//setTimeout("checkPopUp()", 2000);

			/*if (player.currentPlayer && !player.currentPlayer.innerHeight){	// For Chrome
			//player.currentPlayer.close();
			if($.browser.msie) player.currentPlayer = null;
			actions.showAlert("Please, enable pop-us in your navigator to show the<br/>player.");
			}*/

			if (!player.currentPlayer){ // The pop-up has not been opened
				actions.showAlert("Please, enable pop-us in your navigator to show the<br/>player.");
			} else{ // The player has been opened perfectly
				player.addTracksToPlaylist(ids);
				player.currentPlayer.focus();
			}
		});
	};

	/**
	* Retrieves the flash movie
	*/

	this.getFlashMovieObject = function(){
		try{
			return this.currentPlayer.swfobject.getObjectById("audioPlayerExpanded");
		}
		catch(err){
			return null;
		}
	};

	this.refreshDisplay = function(){
		var url = baseUrl + 'cart/numItems';
		jQuery.get(url, {}, function(data){
			jQuery("#cartHeaderItems").html(parseInt(data));
		});
		  
		url = baseUrl + 'cart/amount';
		jQuery.get(url, {}, function(data){
			jQuery("#cartHeaderAmount").html(parseFloat(data));
		});
		
		if(self.location.href.indexOf("myCart") != -1){
			actions.myCart();
		}
	};

	this.getPlaylist = function(){
		var playlist = this.getFlashMovieObject().getPlaylist();
		return playlist;
	}

	this.addToPlaylist = function(track_id, release_id){
		if (this.trackNotInPlaylist(track_id)){
			var flash = this.getFlashMovieObject();
			if(flash)
				flash.add(track_id, release_id);
			this.addTracksToPlaylist(track_id);
			if(ids.length > 1)
				actions.showTempAlert('<center>Tracks have been added</center>',1000)
			else
				actions.showTempAlert('<center>The track has been added</center>',1000)
		}
		else {
			actions.showTempAlert('<center>The track is already in the playlist</center>',1000)
		}
	}
	
	/**     
	* ids, for example: 4-5-6-8
	*/

	this.addTracksToPlaylist = function(ids){
		if (ids){
			var url = baseUrl + "flashPlayer/addTracksInSession/"+ids;
			jQuery.get(url);
		}
	}

	this.addTracksToPlayer = function(ids, release_id){
		if (ids){
			if (!this.isPlayerLost()){ // The player is opened
				var tracks = ids.split("-");
				var validTracks = "";
				var count = 0;
				for (var i in tracks)
 					if (this.trackNotInPlaylist(tracks[i])){
						if (!count)
							validTracks = tracks[i];
						else
							validTracks += "-" + tracks[i];
						count++;
					}
                	
				if (count){
					if(this.getFlashMovieObject())
						this.getFlashMovieObject().add(validTracks, release_id);
					this.addTracksToPlaylist(validTracks);
				}
			}
		}
	}
	
	
	this.resetPlayer = function(user_id,playlist_id){
		var url = baseUrl + 'flashPlayer/clearPlaylist?user_id='+user_id+'&playlist_id='+playlist_id;
		jQuery.get(url);
	}
	
	
	/**
	* Indicates if the player reference is lost
	*/

	this.isPlayerLost = function(){
		var result;
		try{
			result = !this.currentPlayer || !this.currentPlayer.name;
		}
		catch(err){
			result = true;	// For IE
		}

		return result;
	}
      
	this.trackNotInPlaylist = function(track_id){
		var url = baseUrl + 'flashPlayer/loadPlaylistInSession';
		var result = true;

		jQuery.ajax({
			url: url,
			success: function(data){
				if (data){
					data = data.replace(/"/g, "");
					var ids = data.split(",");
					result = !in_array(track_id, ids);
				}
			},
			async: false
		});
		  
		return result;
	}
}

var player = new Player();

function in_array (needle, haystack) {
	// Checks if the given value exists in the array  
	// 
	// version: 1103.1210
	// discuss at: http://phpjs.org/functions/in_array    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: vlado houba
	// +   input by: Billy
	// +   bugfixed by: Brett Zamir (http://brett-zamir.me)
	// *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);    // *     returns 1: true
	// *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
	// *     returns 2: false
	// *     example 3: in_array(1, ['1', '2', '3']);
	// *     returns 3: true    // *     example 3: in_array(1, ['1', '2', '3'], false);
	// *     returns 3: true
	// *     example 4: in_array(1, ['1', '2', '3'], true);
	// *     returns 4: false
	var key = '';

	for (key in haystack){
		if (haystack[key] == needle){
			return true;
		}
	}

	return false;
}

function IsNumeric(input){
	return (input - 0) == input && input.length > 0;
}

function isChrome(){
	return navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
}

/*
function checkPopUp(){
	if (!player.currentPlayer.innerHeight){
		player.currentPlayer.close();
		actions.showAlert("Please, enable pop-us in your navigator to show the<br/>player.");
	}
}
*/

