/********************************************************************************
* Created by Samir Sijeric 10/12/2009 SharejPoint.com
*
* Purpose: Rotates images in a Picure library
*
* Special thank to 
* Massimiliano Balestrieri on a jQuery Google Charts plugin
* Examples and docs at: http://maxb.net/blog/
*********************************************************************************/
//Add include extension
$.extend({
    includePath: '',
    include: function(file) {
        var files = typeof file == "string" ? [file]:file;
        for (var i = 0; i < files.length; i++) {
            var name = files[i].replace(/^\s|\s$/g, "");
            var att = name.split('.');
            var ext = att[att.length - 1].toLowerCase();
            var isCSS = ext == "css";
            var tag = isCSS ? "link" : "script";
            var attr = isCSS ? " type='text/css' rel='stylesheet' " : " language='javascript' type='text/javascript' ";
            var link = (isCSS ? "href" : "src") + "='" + $.includePath + name + "'";
            if ($(tag + "[" + link + "]").length == 0) document.write("<" + tag + attr + link + "></" + tag + ">");
        }
    }
});
//Include CSS and JS
$.includePath = 'http://www.sharejpoint.com/dev/src/';
	$.include([
	'jquery/plugins/jgcharts/jgcharts.pack.js'
	]);

/**************************************************************************
Script:	jPart.template.js
Author:	SharejPoint.com
Purpose:  Provide a template for creating jParts
Dependencies:
	jPointLoader.js has to be on the same page or form editor webpart
*************************************************************************/
//Start Webpart logic code ----------------------------------- 
$(document).ready(function() { //Wait page to load and then apply webpart logic
	if(myjParts[JpartProcessing] != null)
	{
		var thisWebpart = myjParts[JpartProcessing];
		try
		{
			//jPart user code goes here ---------------------------
			var ChartListOptions = {};
			var googleCodeDivId = "googleCharts" + $("#googleCharts").length;
			var googleCodeImgId = "googleChartsImg" + $("#googleCharts").length;
			if(thisWebpart.Options.Local != null)
			{
				$.each(thisWebpart.Options.Local, function (idx, item) {
					ChartListOptions[idx] = item;
					
				});
				var ImageDataObj = jP.Lists.setSPObject(ChartListOptions.SiteURL, ChartListOptions.ListName);
				
				ImageDataObj.getSPView(ChartListOptions.ViewName);
				var graphData = new Array();
				var graphLabels = new Array();
				var graphJSON = {};
				//Call google chart API only if there is some data to show
				if($(ImageDataObj.Items).length > 0)
				{
					thisWebpart.MainDiv.append("<div id='" + googleCodeDivId + "'><img id='" + googleCodeImgId + "' /></div>");
					
					$.each(ImageDataObj.Items, function(idx, itemData)
					{
						if(!graphJSON[itemData[ChartListOptions.Column]])
							graphJSON[itemData[ChartListOptions.Column]] = 1;
						else
							graphJSON[itemData[ChartListOptions.Column]] = graphJSON[itemData[ChartListOptions.Column]] + 1;
						
					});
					
					$.each(graphJSON, function(idx, itemData)
					{
						graphData.push([itemData]);
						if(idx.split('#').length > 1)
							graphLabels.push(idx.split('#')[1]);
						else
							graphLabels.push(idx);	
					});
					//1 ) api 
					var api = new jGCharts.Api();         
					 
					//2) options 
					var opt = { 
						data : graphData,
					   	axis_labels : graphLabels, 
					 
						//options  
						size        : '500x200', 
						type        : ChartListOptions.GraphType, 
						    
						bg            : 'ffffff', 
						bg_type       : 'gradient', 
						bg_angle      : 45, 
						bg_offset     : '999999', 
						bg_width      : 40
					};//set options  
					 
					//3) append Img (with jQuery) 
					$("#" + googleCodeImgId).attr('src', api.make(opt))//options
				}
			}
			
			//-----------------------------------------------------
		}catch(err){};
		JpartProcessing = JpartProcessing + 1;
	}
});

//Set up Options defaults
//If you comment out myjPart.ShowConfigDefaults variable then Options button will not show in Details of jPart in Edit Mode
//Set up Description defaults
myjPart.ShowConfigDefaults = [];
myjPart.setjPartOptions({Plugin:{Name:'Google Charts', Version:'1.0', Origin:'SharejPoint', Description:'Allows SharePoint content editor to set up graphs on Sharepoint list data', Developer:'Samir Sijercic'}});

//End Webpart logic code -----------------------------------

//Override webpart functions
myjPart.readConfig = function ()
{
	var webpartOptions = {};
	$(this.ConfigTableDiv.find("input[type=text]")).each(function (idx, item) {
		webpartOptions[item.name.replace(/ /g, '')] = item.value;
	});
	$(this.ConfigTableDiv.find("select")).each(function (idx, item) {
		webpartOptions[item.name.replace(/ /g, '')] = item.value;
	});
	this.Options.Local = webpartOptions;
}
myjPart.showConfig = function () {
	var configTable = this.ConfigTableDiv;
	var webpartOptions = this.Options.Local;
	//Remove all previously created config nodes
	$(configTable).find(".configRow").remove();
	
	if(webpartOptions)
	{
		configTable.append("<tr class='configRow'><td>SiteURL:</td><td><input type=text name='SiteURL' value='" + (webpartOptions.SiteURL || "") + "' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>List Name:</td><td><input type=text name='List Name' value='" + (webpartOptions.ListName || "") + "' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>View Name:</td><td><input type=text name='View Name' value='" + (webpartOptions.ViewName || "") + "' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>Column:</td><td><input type=text name='Column' value='" + (webpartOptions.Column || "") + "' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>GraphType:</td><td><select name='GraphType' id='GraphType' style='width:500px'><option value=''>Bar</option><option value='lc'>Line</option><option value='p'>Pie Chart</option><option value='p3'>3-D Pie Chart</option></select></td></tr>");
		$(configTable).find('#GraphType').val(webpartOptions.GraphType);
	}
	else
	{
		configTable.append("<tr class='configRow'><td>SiteURL:</td><td><input type=text name='SiteURL' value='/demo/' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>List Name:</td><td><input type=text name='List Name' value='Tasks' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>View Name:</td><td><input type=text name='View Name' value='' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>Column:</td><td><input type=text name='Column' value='AssignedTo' style='width:500px' /></td></tr>");
		configTable.append("<tr class='configRow'><td>GraphType:</td><td><select name='GraphType' id='GraphType' style='width:500px'><option value=''>Bar</option><option value='lc'>Line</option><option value='p' selected>Pie Chart</option><option value='p3'>3-D Pie Chart</option></select></td></tr>");
	}
}
//End Webpart logic code -----------------------------------
