/*						linksList plugin					*/
/*	must set 'JavaScriptSchoolID' variable before calling	*/
/*	example CSS as follows:

ul.linksReturn { list-style:none; margin:0; padding:0; }
ul#linksList_XXXXXX {}
	li.linkItem { margin-bottom:5px; }
	li.linkItemNum_X {}
		a.linkA, a.linkA:hover {}
		a.linkTitle, a.linkTitle:hover {}
		a.imgLink, a.imgLink:hover {}
			a.linkTitle span, a.linkTitle:hover span { padding: 0 5px 3px 12px; }
			a.imgLink img, a.imgLink:hover img
		img.linkImg {}
		p.linkDesc {}
	
usage: $("#myElem").linksList();

default options:
			xml_path:	"/xml/default.asp",		//path to xml file
			linkImage:0,						//set to 1 to set any images as links
			uniqueListID:"",					//if set, will prepend list ID with a unique identifier (string value)
			maxLinks:999,						//max # of links to return
			maxTitle:9999,						//max characters in link title text (fsplit style)
			maxDesc:9999,						//max characters in link description text (fsplit style)
			setTitleToImage:1,					//if 1, pulls title to alt/title attributes of image
			setDescToImage:0,					//if 1, pulls description to alt/title attributes of image
			hardPhotoWidth:0,					//if greater than 1, sets photo width attribute to specified width (overrides hardPhotoHeight)
			hardPhotoHeight:0,					//if greater than 1, sets photo height attribute to specified height (overridden by hardPhotoWidth)
			callback:null						//callback function, passes back total # of links and list ID - called after all data written to page
*/

(function($){
	$.fn.linksList = function(options) {
		var defaults = {
			xml_path:"/xml/default.asp",
			maxLinks:999,
			linkImage:0,
			uniqueListID:"",
			maxTitle:9999,
			maxDesc:9999,
			setTitleToImage:1,
			setDescToImage:0,
			hardPhotoWidth:0,
			hardPhotoHeight:0,
			callback:null
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var	obj = $(this),
				groupid = obj.attr("linkid"),
				links = new Array();
			if(groupid.length > 0){
				$.ajax({
					type: "GET",
					url: options.xml_path+"?sid="+JavaScriptSchoolID+"&type=link&useCDATA=false&id="+groupid,
					dataType: "xml",
					success: function(xml) {
						var linkCount = 0;
						$(xml).find('item').each(function(){
							links[linkCount]= {
								title:$(this).find("title").text(),
								url:$(this).find("url").text(),
								desc:$(this).find("desc").text(),
								target:$(this).find("target").text(),
								imgPath:$(this).find("image").find("path").text(),
								height:$(this).find("image").find("height").text(),
								width:$(this).find("image").find("width").text()
							};
							linkCount++;
						});
					},
					error: function(request,tStatus,eThrown){ if(window.console && window.console.firebug){ console.log("linksList plugin error: request='"+request+"', tStatus='"+tStatus+"', eThrown='"+eThrown+"'"); } },
					complete: function() {
						if(links.length>0){
							var	$AllLinks = $("<ul></ul>").attr("id",options.uniqueListID+"linksList_"+groupid).addClass("linksReturn");
							for(var linkCount=0;linkCount<links.length;linkCount++){
								$linkItem = $("<li></li>").addClass("linkItem").addClass("linkItemNum_"+(linkCount+1));
								linkURL = (links[linkCount].url.indexOf("http")<0)?"http://"+links[linkCount].url:links[linkCount].url;
								$AnchorBlank = $("<a></a>")
										.addClass("linkA")
										.attr("href",linkURL)
										.attr("target",(links[linkCount].target>0 || links[linkCount].target=="true")?"_blank":"");
								$AnchorTitle = $AnchorBlank.addClass("linkTitle");
									$("<span></span>").html(links[linkCount].title).fSplit({maxChar:options.maxTitle}).appendTo($AnchorTitle);
									$AnchorTitle.appendTo($linkItem);
								if(links[linkCount].imgPath.length>0){
									$Image = $("<img />")
												.addClass("linkImg")
												.attr("src",links[linkCount].imgPath)
												.attr("border","0");
									if(options.hardPhotoWidth>0){ $Image.attr("width",options.hardPhotoWidth); }
									else if(options.hardPhotoHeight>0){ $Image.attr("height",options.hardPhotoHeight); }
									else{
										if(links[linkCount].width>0){$Image.attr("width",links[linkCount].width);}
										if(links[linkCount].height>0){$Image.attr("height",links[linkCount].height);}
									}
									if(options.setTitleToImage>0){$Image.attr("alt",links[linkCount].title).attr("title",links[linkCount].title);}
									if(options.setDescToImage>0){$Image.attr("alt",links[linkCount].desc).attr("title",(links[linkCount].desc).replace(/<br \/>/g,""));}
									if(options.linkImage>0){$ImageLink = $AnchorBlank.addClass("imgLink").append($Image).appendTo($linkItem);}
									else{$Image.appendTo($linkItem);}
								}
								$("<p></p>").html(links[linkCount].desc).addClass("linkDesc").fSplit({maxChars:options.maxDesc}).appendTo($linkItem);
								$linkItem.appendTo($AllLinks);
								if(linkCount>=(options.maxLinks-1)){
									linkCount=9999;
								}
							}
							obj.append($AllLinks);
						}
						else{ if(window.console && window.console.firebug){ console.log("linksList plugin error: no links in array"); } }
						if($.isFunction(options.callback)){ options.callback(links.length,options.uniqueListID+"linksList_"+groupid); }
					}
				});
			}else{ if(window.console && window.console.firebug){ console.log("linksList plugin error: no or bad groupid 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);
