/*		newsHeadline plugin												*/
/*		   must set 'JavaScriptSchoolID' variable before calling		*/
/*	example CSS as follows:

ul.newsReturn { float:left; height:20px; list-style:none; margin:0; padding:0; }
	li.newsItem { height:20px; margin:0; padding:0; }
		div.pubDate { display:none; }
		div.headlineNoLink { display:none; }
		a.headlineLink { display:block; font-family:Verdana; font-weight:normal; font-size:12px; color:#000000; text-decoration:underline; }
			a.headlineLink:hover { text-decoration:none; }
		p.newsBrief { display:none; padding:0; margin:0; }
		p.newsLong { display:none; padding:0; margin:0; }
		
usage: $("#myElem").newsHeadline();

default options:
			xml_path:	"/xml/default.asp",		//path to xml file
			maxNews:10,							//max number of stories
			uniqueListID:"",					//if set, will prepend list ID with a unique identifier (string value)
			linkPhotoToDetail:0,				//if 1, will wrap thumbnail and full size images in link to detail page
			charHeadline:999,					//max number of characters in headline (uses .fSplit())
			charBrief:9999,						//max number of characters in brief (uses .fSplit())
			charLong:9999,						//max number of characters in long (uses .fSplit())
			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.newsHeadline = function(options) {
		var defaults = {
			xml_path:"/xml/default.asp",
			maxNews:10,
			uniqueListID:"",
			linkPhotoToDetail:0,
			charHeadline:999,
			charBrief:9999,
			charLong:9999,
			callback:null
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var	obj = $(this),
				groupid = obj.attr("nid"),
				news = new Array();
			if(groupid.length > 0){
				$.ajax({
					type: "GET",
					url: options.xml_path+"?sid="+JavaScriptSchoolID+"&type=news&useCDATA=false&id="+groupid,
					dataType: "xml",
					success: function(xml) {
						var ncount = 0;
						$(xml).find('item').each(function(){
							news[ncount++] = {
								title:$(this).find("title").text(),
								url:$(this).find("url").text(),
								brief:$(this).find("brief").text(),
								pubDate:$(this).find("pubDate").text(),
								newsID: $(this).find("title").attr("newsID"),
								longDesc:$(this).find("full").text(),
								hasPhoto:$(this).find("photo").text(),
								thumbnail:$(this).find("image").find("tpath").text(),
									thumbHeight:$(this).find("image").find("tpath").attr("height"),
									thumbWidth:$(this).find("image").find("tpath").attr("width"),
								fullImage:$(this).find("image").find("path").text(),
									fullHeight:$(this).find("image").find("path").attr("height"),
									fullWidth:$(this).find("image").find("path").attr("width"),
								imageCap:$(this).find("image").find("cap").text()
							};
						});
					},
					error: function(request,tStatus,eThrown){ if(window.console && window.console.firebug){ console.log("newsHeadline plugin error: request='"+request+"', tStatus='"+tStatus+"', eThrown='"+eThrown+"'"); } },
					complete: function() {
						if(news.length>0){
							$AllHeadlines = $("<ul></ul>").attr("id",options.uniqueListID+"headlines"+groupid).addClass("newsReturn");
							for(var i=0; i<news.length && i<options.maxNews; i++) {
								$NewsItem = $("<li></li>").attr("id","story"+news[i].newsID).attr("numPhoto",news[i].hasPhoto).addClass("newsItem").addClass("storyNum_"+(i+1));
									$Images = $("<div></div>").addClass("imageDiv");
										$Thumb = $("<img/>")
											.attr("src",news[i].thumbnail)
											.attr("height",(news[i].thumbHeight.length>0)?news[i].thumbHeight:"")
											.attr("width",(news[i].thumbWidth.length>0)?news[i].thumbWidth:"")
											.attr("border","0")
											.attr("alt",news[i].imageCap)
											.addClass("thumb");
										$Full = $("<img/>")
											.attr("src",news[i].fullImage)
											.attr("height",(news[i].fullHeight.length>0)?news[i].fullHeight:"")
											.attr("width",(news[i].fullWidth.length>0)?news[i].fullWidth:"")
											.attr("border","0")
											.attr("alt",news[i].imageCap)
											.addClass("full");
										if(options.linkPhotoToDetail>0){
											$("<a></a>")
												.attr("href",news[i].url)
												.html($Thumb)
												.appendTo($Images);
											$("<a></a>")
												.attr("href",news[i].url)
												.html($Full)
												.appendTo($Images);
										} else { $Thumb.appendTo($Images); $Full.appendTo($Images); }
										$("<p></p>").addClass("imageCaption").html(news[i].imageCap).appendTo($Images);
									$Images.appendTo($NewsItem);
									$("<div></div>")
										.html(news[i].pubDate)
										.addClass("pubDate")
										.appendTo($NewsItem);
									$("<div></div>")
										.html(news[i].title)
										.fSplit({maxChar:options.charHeadline})
										.addClass("headlineNoLink")
										.appendTo($NewsItem);
									$("<a></a>")
										.attr("href",news[i].url)
										.html(news[i].title)
										.fSplit({maxChar:options.charHeadline})
										.addClass("headlineLink")
										.appendTo($NewsItem);
									$("<p></p>")
										.addClass("newsBrief")
										.html(news[i].brief)
										.fSplit({maxChar:options.charBrief})
										.appendTo($NewsItem);
									$("<p></p>")
										.addClass("newsLong")
										.html(news[i].longDesc)
										.fSplit({maxChar:options.charLong})
										.appendTo($NewsItem);
									$("<div></div>")
										.css("clear","both")
										.appendTo($NewsItem);
								$NewsItem.appendTo($AllHeadlines);
							}
							obj.html($AllHeadlines);
						}
						else { if(window.console && window.console.firebug){ console.log("newsHeadline plugin error: news array empty"); } }
						if($.isFunction(options.callback)){ options.callback(options.uniqueListID+"headlines"+groupid); }
					}
				});
			}else{ if(window.console && window.console.firebug){ console.log("newsHeadline 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);
