/*		grabMedia plugin												*/
/*		   must set 'JavaScriptSchoolID' variable before calling		*/
/*	example CSS as follows:

ul.mediaReturn {}
	li#album_XXXXX, li.mediaAlbum, li.albumNum_X {}
		.mediaAlbum ul {}
			li#file_XXXXX, li.mediaFile, li.fileNum_X, li.featured, li.audio, li.video, li.photos {}
				div.mediaDiv {}
					img.thumb, img.large {}
					a.detailLink {}
						a.detailLink img.thumb, a.detailLink img.large {}
					a.playerLink {}
						a.playerLink img.thumb, a.playerLink img.large {}
					div {}
				div.pubDate {}
				div.titleDiv {}
					p.titleText {}
					a.detailLink {}
						a.detailLink p.titleText {}
					a.playerLink {}
						a.playerLink p.titleText {}
				div.descDiv {}
					p.descText {}
					a.detailLink {}
						a.detailLink p.descText {}
					a.playerLink {}
						a.playerLink p.descText {}
	
usage: $("#myElem").grabMedia();

default options:
			xml_path:	"/xml/default.asp",		//path to xml file
			maxAlbums:5,						//max # albums to return
			maxFilesPerAlbum:1,					//max # files per album
			maxTotalReturn:99,					//max total # of files to return in XML - try to set this as low as possible to reduce server load
			uniqueListID:"",					//if set, will prepend list ID with a unique identifier (string value)
			returnFeatured:0,					//if 1, will only return featured items
			returnAudio:1,						//if 0 does not return audio media - default 1
			returnImages:1,						//if 0 does not return image media - default 1
			returnVideo:1,						//if 0 does not return video media - default 1
			charTitle:9999,						//max number of characters in title
			charDesc:9999,						//max number of characters in description
			detailNewWindow:1,					//if 1, will open the media detail links in a new window (target=_blank)
			callback:null						//callback function, passes unique id of parent (ul) - called immediately after data written to page (this is where you should call .cycle())
*/

(function($){
	$.fn.grabMedia = function(options) {
		var defaults = {
			xml_path:"/xml/default.asp",
			maxAlbums:5,
			maxFilesPerAlbum:1,
			maxTotalReturn:9999,
			uniqueListID:"",
			returnFeatured:0,
			returnAudio:1,
			returnImages:1,
			returnVideo:1,
			charTitle:9999,
			charDesc:9999,
			detailNewWindow:1,
			maxDimension:null,
			callback:null
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var	obj = $(this),
				groupid = obj.attr("nid"),
				media = new Array();
				options.returnFeatured = (options.returnFeatured>0)?"&featured=1":"";
			if(groupid.length > 0){
				$.ajax({
					type: "GET",
					url: options.xml_path+"?sid="+JavaScriptSchoolID+"&type=media&useCDATA=false&maxDimension="+options.maxDimension+"&numRows="+options.maxTotalReturn+options.returnFeatured,
					dataType: "xml",
					success: function(xml) {
						var album=0;
						$(xml).find('item').each(function(){
							var file=0;
							media[album] = new Array();
							$(this).find("file").each(function(){
								var fileMediaType = $(this).find("filename").attr("mediaType");
								if((options.returnAudio>0 && fileMediaType=="audio") || (options.returnVideo>0 && fileMediaType=="video") || (options.returnImages>0 && fileMediaType=="photos")){
									media[album][file++] = {
										albumID: $(this).find("filename").attr("albumID"),
										fileID: $(this).find("filename").attr("fileID"),
										contentID: $(this).find("filename").attr("contentID"),
										mediaType: $(this).find("filename").attr("mediaType"),
										featured: $(this).find("filename").attr("featured"),
										filename: $(this).find("filename").text(),
										pubDate: $(this).find("pubDate").text(),
										description: $(this).find("description").text(),
										title: $(this).find("title").text(),
										thumbnail: $(this).find("thumb").text()
									};
								}
							});
							album++;
						});
					},
					error: function(request,tStatus,eThrown){ if(window.console && window.console.firebug){ console.log("grabMedia plugin error: request='"+request+"', tStatus='"+tStatus+"', eThrown='"+eThrown+"'"); } },
					complete: function() {
						if(media.length>0){
							var	$AllMedia = $("<ul></ul>").attr("id",options.uniqueListID+"_media").addClass("mediaReturn"),
								totalAlbums=0;
							for(var album=0; album<media.length && totalAlbums<options.maxAlbums; album++) {
								if(media[album][0]){
									totalAlbums++;
									var	fileCnt=0,
										$MediaAlbum = $("<li></li>")
											.attr("id","album_"+media[album][0].albumID)
											.addClass("mediaAlbum")
											.addClass("albumNum_"+(album+1));
									if(media[album][0].featured=="True"){ $MediaAlbum.addClass("featured"); }
									var $MediaAlbumUL = $("<ul></ul>");
									for(; fileCnt<media[album].length && fileCnt<options.maxFilesPerAlbum; fileCnt++){
										var $MediaFile = $("<li></li>")
												.attr("id","file_"+media[album][fileCnt].fileID)
												.attr("contentID",media[album][fileCnt].contentID)
												.addClass("mediaFile")
												.addClass("fileNum_"+(fileCnt+1))
												.addClass(media[album][fileCnt].mediaType);

											var $anchorDetail = $("<a></a>")
													.attr("href","/podium/default.aspx?t=52562&a="+media[album][fileCnt].albumID)
													.addClass("detailLink");
											if(options.detailNewWindow>0){ $anchorDetail.attr("target","_blank"); }
											var $anchorPlayer =  $("<a></a>")
													.attr("href","/podium/tools/"+((media[album][fileCnt].mediaType=="audio")?"AudioPlay":"SlideShow")+".aspx?a="+media[album][fileCnt].albumID+"&ttl="+media[album][fileCnt].title.replace(" ","+"))
													.addClass("playerLink")
													.attr("target","_blank");
											var $mediaDiv = $("<div></div>").addClass("mediaDiv");
												if(media[album][fileCnt].thumbnail.length>0){
													var $thumb = $("<img />")
															.attr("src",media[album][fileCnt].thumbnail)
															.attr("border","0")
															.addClass("thumb");
													$mediaDiv.append($anchorDetail.clone().html($thumb.clone()));
													$mediaDiv.append($anchorPlayer.clone().html($thumb.clone()));
													$mediaDiv.append($thumb);
												}
												if(media[album][fileCnt].filename.length>0 && media[album][fileCnt].mediaType=="photos"){
													var $large = $("<img />")
															.attr("src",media[album][fileCnt].filename)
															.attr("border","0")
															.addClass("large");
													$mediaDiv.append($anchorDetail.clone().html($large.clone()));
													$mediaDiv.append($anchorPlayer.clone().html($large.clone()));
													$mediaDiv.append($large);
												}
												if(media[album][fileCnt].mediaType!="photos"){
													$("<div></div>").attr("filename",media[album][fileCnt].filename).appendTo($mediaDiv);
												}
											$mediaDiv.appendTo($MediaFile);
											$("<div></div>").addClass("pubDate").html(media[album][fileCnt].pubDate).appendTo($MediaFile);
											var $titleDiv = $("<div></div>").addClass("titleDiv");
												var $titleText = $("<p></p>")
														.addClass("titleText")
														.html(media[album][fileCnt].title)
														.fSplit({maxChar:options.charTitle});
												$anchorDetail.clone().html($titleText.clone()).appendTo($titleDiv);
												$anchorPlayer.clone().html($titleText.clone()).appendTo($titleDiv);
												$titleText.appendTo($titleDiv);
											$titleDiv.appendTo($MediaFile);
											var $descDiv = $("<div></div>").addClass("descDiv");
												var $descText = $("<p></p>")
														.addClass("descText")
														.html(media[album][fileCnt].title)
														.fSplit({maxChar:options.charDesc});
												$anchorDetail.clone().html($descText.clone()).appendTo($descDiv);
												$anchorPlayer.clone().html($descText.clone()).appendTo($descDiv);
												$descText.appendTo($descDiv);
											$descDiv.appendTo($MediaFile);
											$("<div></div>").addClass("clear").appendTo($MediaFile);
										$MediaFile.appendTo($MediaAlbumUL);
									}
									$MediaAlbum.append($MediaAlbumUL);
									$AllMedia.append($MediaAlbum);
								}
							}
							$AllMedia.children().each(function(){if($(this).children().children().length<1){$(this).remove();}});
							obj.html($AllMedia);

							if($.isFunction(options.callback)){ options.callback(options.uniqueListID+"headlines"+groupid); }
						}
						else { if(window.console && window.console.firebug){ console.log("grabMedia plugin error: newsmedia array empty"); } }
					}
				});
			}else{ if(window.console && window.console.firebug){ console.log("grabMedia plugin error: no or bad group id passed"); } }
		});
	};
})(jQuery);

(function($){
	$.fn.fSplit = function(options) {
		var	defaults = { maxChar:999999 },
			options = $.extend(defaults, options);
		return this.each(function() {
			var	strDummy=this.innerHTML, strOut="", strArray=strDummy.split(" ");
			if(strDummy.length>options.maxChar) {
				for(var i=0; i<strArray.length; i++) {
					if((strOut.length + strArray[i].length + 1) < options.maxChar) {
						if(i==0){ strOut = strArray[0]; }
						else{ strOut = strOut + " " + strArray[i]; }
					}
					else { strOut = strOut + "..."; i=9999999; }
				}
			} else { strOut = strDummy; }
			$(this).html(strOut);
		});
	};
})(jQuery);