var min = 1000000;
var max = 0;

function getSettings(singleArtistArrayOfChecked)
{
	var legend_layout	= "<legend layout='hide'/>";
	var license			= "<license>ITA4V9313VFO.945CWK-2XOI1X0-7L</license>";
	var context_menu	= "<context_menu about='false' />";
	var chart_type		= "<chart_type>line</chart_type>";
	
	var chart_pref		= "<chart_pref line_thickness='3' fill_shape='false' point_size='9' connect='true' />";			
	
	if(singleArtistArrayOfChecked==undefined)
		var series_color 	= "<series_color><color>5bab33</color><color>3972cd</color><color>ff7439</color><color>cc2b41</color></series_color>";
	else
	{
		var arrOChecked = singleArtistArrayOfChecked;
		var series_color = "<series_color>";
		for(var i=0; i<arrOChecked.length; i++)
			series_color += "<color>"+getColorForService(arrOChecked[i])+"</color>";
	
		series_color += "</series_color>";
	}
	
	var chart_border	= "<chart_border top_thickness='0' bottom_thickness='0' left_thickness='0' right_thickness='0' color='d7d7d7' />";
	var chart_grid_h	= "<chart_grid_h thickness='1' type='dashed' alpha='15' />";
	
	var chart_grid_v	= "<chart_grid_v thickness='1' type='dashed' alpha='15' />";
	var axis_ticks		= "<axis_ticks category_ticks='false' />";
	var chart_label		= "<chart_label position='hide' font='arial' bold='true' size='24' color='333333' />";
	
	var axis_category	= "<axis_category skip='1' font='arial' size='12' color='555555' />";
	
	min = min -1;

	var max_len = max+'';
	max_len = max_len.length - 1;
	max = max + (Math.pow(10,max_len)/2)+'';
		
	var x_coord = 30 + ((max.length-1)*5);
	
	var g_width = 845 - ((max.length-1)*10);
	
	
	if(g_width<780)
		g_width = 770;
	
	
	if(x_coord>55)
		x_coord = 70;
	
	if(x_coord > 50)
		x_coord += 5;
	
	var chart_rect		= "<chart_rect x='"+x_coord+"' y='20' height='195' width='"+g_width+"' positive_alpha='0' negative_alpha='5' negative-color='ffffff' />";
	var axis_value		= "<axis_value alpha='90' min='"+min+"' max='"+max+"' font='arial' size='13' color='555555' steps='3' orientation='horizontal' />";
	var tooltip 		= "<tooltip size='12' duration='10' opacity='90' />";
	var scroll 			= "";
	var transition		= "<chart_transition type='none' order='all' />";
	
	if(current_range=='all_time')
	{
		var chart_pref		= "<chart_pref line_thickness='2' fill_shape='false' point_size='0' />";			
		var chart_grid_v	= "<chart_grid_v thickness='1' type='dashed' alpha='0' />";
		var skipval = Math.ceil(getRange()/12);
		var axis_category	= "<axis_category skip='"+skipval+"' font='arial' size='12' color='555555' />";
	}
	
	var combined		= license + scroll + legend_layout + context_menu + tooltip + chart_type + chart_pref + series_color + chart_border + chart_rect + chart_grid_h + chart_grid_v + axis_ticks + chart_label + axis_category + axis_value + transition;
	
	return combined;
}

var hexVals = new Hash();
function getHexValues()
{
	if(hexVals.length==0)
	{
		$.getJSON("/ajax/getHexValues", function(data){
			
			$.each(data, function(key,value){
				hexVals.setItem(value.service_name, value.hex_color);
			});
			
			//return currentActiveServices;
		});
	}
	
	return hexVals;
}
getHexValues();

function getColorForService(service)
{
	var hex = getHexValues();
	
	if(service=='MYSPACE')
		return "003399";
	
	if(hex.hasItem(service))
		return hex.getItem(service);
	else
		return "5bab33";
}


function getSingleArtistSettings(arrOChecked)
{
	return getSettings(arrOChecked);
}


function getDates()
{
	
	
	//we get got the dates!
	
	var range = getRange();
	var start = end_date - range;
	var dates = "<row><null/>";
	
	for (var d=start; d<= end_date; d++ )
	{
		var thedate = new Date((d*1000*86400));
		dates += "<string>" + thedate.format('j M') + "</string>";
	}
	
	dates += "</row>";
	
	return dates;
}

function getRange()
{
	switch(current_range)
	{
		case "week":
			return 7;
		case "month":
			return 30;
		case "all_time":
			return end_date - start_date;
		default:
			return 30;
	}
}

//This function gets the graph for one metric (mostly for compare)
//Need to create an additional function for artist breakdown

function showTheGraph()
{
	min = 1000000;
	max = 0;
	
	var dates = getDates();
	var artist_data ="";
	if(current_bands.length==1)
	{		
		if(all_bands.hasItem(current_bands[0]))
		{
			for(var j=0; j<array_of_checked.length; j++)
			{
				var data = all_bands.getItem(current_bands[0]);
				var band_data = data.metrics;
				var cur_metric = band_data.getItem(current_metric);
				
				if(cur_metric.hasItem(array_of_checked[j]))
				{
					artist_data += singleDataToXML(cur_metric.getItem(array_of_checked[j]), array_of_checked[j], data.name);
				}
			}
			settings = getSingleArtistSettings(array_of_checked);
		}
		
		
	}
	else
	{
		for(var i =0; i< current_bands.length; i++)
		{
			if(all_bands.hasItem(current_bands[i]))
			{
				var data = all_bands.getItem(current_bands[i]);
				artist_data += dataToXML(data);
			}
		}
		settings = getSettings();
	}
	
	//var flags = getProfileStartDates();
	
	//alert("<chart>" + settings + "<chart_data>" + dates + artist_data + "</chart_data></chart>");
	
	var blankdata = "<row><number>0</number></row>";
	
	if(artist_data=='')
		return "<chart></chart>";
	else	
		return "<chart>" + settings + "<chart_data>" + dates +  artist_data + "</chart_data></chart>";
}

function singleDataToXML(data, service, name)
{
	var artist_data = "<row>";
	artist_data += "<string>" + name + "</string>";
	
	var range = getRange();
	var start = end_date - range;
	var flag_count=1;
	
	//alert(range);
	var nullvals = 0;
	for (var d=start; d<= end_date; d++ )
	{
		//let's get the tooltips later
		if(data.hasItem(d))
		{
			if(data.getItem(d) < min && (current_metric !='delta_plays' && current_metric !='delta_views'))
				min = data.getItem(d);
					
			if(data.getItem(d) > max)
				max = data.getItem(d);
	
			var tooltip = name + " - " + getPrettyService(service) + "\n";
			tooltip += getToolTipBreakDownSingle(service, data, d);
			
			if(data.getItem(d) >=0 || current_range =='week')
			{
				if(current_range == 'week' && data.getItem(d) <=0)
					artist_data += "<number tooltip='" + tooltip + "'>0</number>";
				else
				{
					artist_data += "<number tooltip='" + tooltip + "'>" + data.getItem(d) + "</number>";
					
					if(data.getItem(d) < min)
						min = data.getItem(d);
					
					if(data.getItem(d) > max)
						max = data.getItem(d);
				}			
			}
			else if(isNaN(data.getItem(d)) || (current_metric=='delta_plays' || current_metric == 'delta_views'))
			{
				artist_data += "<null/>";
			}
			else
				artist_data += "<number tooltip='" + tooltip + "'>" + data.getItem(d) + "</number>";
		
		}
		else if(isNaN(data.getItem(d)))
		{
			//nullvals++;
			artist_data += "<number tooltip='"+ getPrettyService(service) + "\n{No Data}'>0</number>";
		}	
		else
			artist_data += "<number>0</number>";
	}
	
	artist_data += "</row>";
	
	if(nullvals>range)
		return '';
	else
		return artist_data;
}

function dataToXML(data)
{
	var artist_data = "<row>";
	artist_data += "<string>" + data.name + "</string>";
	
	var metrics = data.metrics;
	
	if(metrics.hasItem(current_metric))
	{
		var cur_metric = metrics.getItem(current_metric);
		var total = cur_metric.getItem('TOTAL');
		
		//Let's grab all the data possible going back to June 6, 2009
		
		var range = getRange();
		var start = end_date - range;
		
		for (var d=start; d<= end_date; d++ )
		{
			//let's get the tooltips later
			if(total.hasItem(d))
			{
				
				if(total.getItem(d) < min && (current_metric !='delta_plays' && current_metric !='delta_views'))
					min = total.getItem(d);
					
				if(total.getItem(d) > max)
					max = total.getItem(d);
				
				var tooltip = getToolTipBreakdownMonth(cur_metric, d);
				
				if(current_range=='all_time')
					var tooltip = getToolTipBreakdownAllTime(cur_metric, d);

				tooltip = data.name + "\n" + tooltip;
				
				if(total.getItem(d) >=0 || current_range =='week')
				{
					if(current_range == 'week' && total.getItem(d) <=0)
						artist_data += "<number tooltip='" + tooltip + "'>0</number>";
					else
					{
						artist_data += "<number tooltip='" + tooltip + "'>" + total.getItem(d) + "</number>";
						
						if(total.getItem(d) < min)
							min = total.getItem(d);
					
						if(total.getItem(d) > max)
							max = total.getItem(d);
					
					}
				
				}
				else if(total.getItem(d)== "null" || (current_metric=='delta_plays' || current_metric == 'delta_views'))
					artist_data += "<null/>";//artist_data += "<number tooltip='" + tooltip + "'>null</number>";
				else
					artist_data += "<number tooltip='" + tooltip + "'>" + total.getItem(d) + "</number>";
			}
			else
				artist_data += "<number>0</number>";
		}
	}
	
	artist_data += "</row>";
	return artist_data;
}


function getToolTipBreakDownSingle(service, metric, day)
{
	if(current_metric == 'delta_fans')
		var removeOrLost = 'Lost ';
	else
		var removeOrLost = 'Removed ';
	
	if(metric.getItem(day) <0)
		var tool = removeOrLost + commaCoder(metric.getItem(day)*-1) + " " + getMetricByNetwork(current_metric, service) + " \n";
	else
		var tool = commaCoder(metric.getItem(day)) + " New " + getMetricByNetwork(current_metric, service) + " \n";
	
	var thedate = new Date((day*1000*86400));


	return tool + thedate.format('D M j Y');
}


function getToolTipBreakdownAllTime(metric, day)
{
	var total = metric.getItem('TOTAL');
	
	if(current_metric == 'delta_fans')
		var removeOrLost = 'Lost';
	else
		var removeOrLost = 'Removed';
	
	if(total.getItem(day) <0)
	{
		if(removeOrLost =='Lost')
			var tool = 'Lost ' + commaCoder(total.getItem(day)*-1) + " " + getPrettyMetric() + " \n";
		else
			var tool = commaCoder(total.getItem(day)*-1) + " Removed " + getPrettyMetric() + " \n";
			
	}
	else
		var tool = commaCoder(total.getItem(day)) + " New " + getPrettyMetric() + " \n";
	var thedate = new Date(day*1000*86400);

	return tool + thedate.format('D M j Y');
}

/*
	This function returns the tooltip information for the metric and a given day. 
	Month view uses this.
*/

function getToolTipBreakdownMonth(metric, day)
{
	var total = metric.getItem('TOTAL');
	
	var active_services = getCurrentActiveServices();
	var services = active_services[0]; 
	var services_pretty = active_services[1]; 
	
	if(current_metric == 'delta_fans')
		var removeOrLost = 'Lost ';
	else
		var removeOrLost = 'Removed ';
	
	
	if(total.getItem(day) <0)
	{
		if(removeOrLost =='Lost')
			var tool = 'Lost ' + commaCoder(total.getItem(day)*-1) + " " + getPrettyMetric() + " \n";
		else
			var tool = commaCoder(total.getItem(day)*-1) + " Removed " + getPrettyMetric() + " \n";
			
	}
	else
		var tool = commaCoder(total.getItem(day)) + " New " + getPrettyMetric() + " \n";
	
	for(var i=0; i< services.length; i++)
	{
		if(metric.hasItem(services[i]))
		{
			var service = metric.getItem(services[i]);
			var per = Math.round(100*(service.getItem(day)/total.getItem(day)));
			
			//if(total.getItem(day) > 0 && service.getItem(day) > 0)
			
			if(per>=100)
				per=100
			
			if(per>0)
				tool += per + "% " + services_pretty[i] + "\n";
			
		}
	}
	
	var thedate = new Date((day*1000*86400));
	return tool + thedate.format('D M j Y');
		
}

function getPrettyMetric(metric)
{
	if(metric==undefined)
		metric = current_metric;

	switch(metric)
	{
		case "delta_plays":
			return "Plays";
		case "delta_fans":
			return "Fans";
		case "delta_views":
			return "Views";
		case "delta_comments":
			return "Comments";
		default:
			return "Unknown Metric";
	}
}

var prettyNames = new Hash();
function getPrettyService(service_name)
{
	var active_services = getCurrentActiveServices();
	var services = active_services[0]; 
	var services_pretty = active_services[1]; 
	
	if(prettyNames.length ==0)
		for(var i=0; i<services.length; i++)
			prettyNames.setItem(services[i], services_pretty[i]);
	
	if(prettyNames.hasItem(service_name))
		return prettyNames.getItem(service_name);
	else
		return ucwords(service_name.toLowerCase());
}

function commaCoder(num)
{
	num += '';
	x = num.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
	
}

function ucwords(str) {
    // Uppercase the first character of every word in a string  
    // 
    // version: 1003.2411
    // discuss at: http://phpjs.org/functions/ucwords
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Waldo Malqui Silva
    // +   bugfixed by: Onno Marsman
    // +   improved by: Robin
    // *     example 1: ucwords('kevin van zonneveld');
    // *     returns 1: 'Kevin Van Zonneveld'
    // *     example 2: ucwords('HELLO WORLD');
    // *     returns 2: 'HELLO WORLD'
    return (str + '').replace(/^(.)|\s(.)/g, function ($1) {
        return $1.toUpperCase();
    });
}















