(function($){
	$.fn.atoz = function(options) {
		
		var defaults = {
			xml_path:"/xml/default.asp",
			buttonID:"atoz",
			atozContainer:"az",
			hoffset:0,
			debug:false
		};
		
		var letters = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
		
		var data = {
			timeout:"",
			links:"",
			isLetter:new RegExp(/^[a-zA-Z]+$/)
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var $az = $(this);
			if(options.debug){$.log("building az");}
			//load data
			$.ajax({
				type: "GET",
				url: "/xml/default.asp?sid="+options.schoolid+"&type=atoz&id="+options.groupid,
				dataType: "xml",
				success: function(xml) {
					//get json object (and print out the html so i can see it)
					data.links = xml;
					if(options.debug){"links = " + $.log(data.links);}
					
					buildContainer();
				},
				error: function(request,tStatus,eThrown){
					if(options.debug){$.log("error getting xml..." + eThrown);}
				}
			});
			
			function buildContainer(){
				//add elements to the banner
				var $azmenu = $(document.createElement("div"))
								.attr("id","az-menu");
								
				for(var i = 0; i < 6; i++){
					var $azletter = $(document.createElement("a"))
									.attr("id","azbutton_"+i)
									.addClass("azbutton");
					$azmenu.append($azletter);
				}				
				
				
				var $azfastfind = $(document.createElement("div"))
								.attr("id","az-search-cont")
								.html("<div id='az-search'><div id='fast-find-label'>Fast Find</div><input type='text' id='azff' value='Fast Find'/><a href='javascript:void(0);' id='az-clear'>clear</a></div>")
								.css({"float":"left"});
				
				$az.append($azmenu).append($azfastfind).append($(document.createElement("div")).addClass("clear").html("<!-- -->"));
				
				
				
				
				
				
				//create container and position it...
				var $azbox = $(document.createElement("div"))
							.attr("id",options.atozContainer)
							.css({"display":"none"});
							
				var $azheader = $(document.createElement("div"))
								.attr("id","az-header")
								.html("<!-- -->");
								
				var $azfooter = $(document.createElement("div"))
								.attr("id","az-footer");
								
				var $azmid = $(document.createElement("div"))
								.attr("id","az-mid");
				
				var buttonOffset = $az.getTopLeftFromBody();
				
				//if(options.debug){$.log("top:" + buttonOffset.top+", left: "+buttonOffset.left+", hoffset: " + options.hoffset);}
				$azbox.css({"top":buttonOffset.top+$az.height(),"left":buttonOffset.left+options.hoffset});
				
				$("body").append($azbox);
				$azbox.append($azheader).append($azmid).append($azfooter);
				
				var $aztop = $(document.createElement("div"))
								.attr("id","az-top");
								
				$azmid.append($aztop);
								
				
								
				/*
				var $aztopright = $(document.createElement("div"))
								.attr("id","az-top-right")
								.css({"float":"left"})
								.html("<div id='search-text'>To find a page, simply type the title into the search feature to the left or select a letter of the alphabet.</div>");
				
				
								
				var $azmenu = $(document.createElement("div"))
								.attr("id","az-menu");
								
				$azmid.append($azmenu);
				
				for(var i = 0; i < 26; i++){
					var $azletter = $(document.createElement("a"))
									.attr("id","l_"+i)
									.addClass("letter");
					if(i == 0){$azletter.addClass("on");}
					$azmenu.append($azletter);
				}
				
				
				var $sitemap = $(document.createElement("a"))
								.attr("id","sitemap")
								.attr("href","/podium/default.aspx?t=121444")
								.html("sitemap");
								
				$azmenu.append($sitemap);
				
				$azmenu.append($(document.createElement("div")).addClass("clear").html("<!-- -->"));
				
				*/
				
				
				var $azlinkscont = $(document.createElement("div"))
								.attr("id","az-links-cont");
								
				var $azlinks = $(document.createElement("div"))
								.attr("id","az-links");
				
				$azmid.append($azlinkscont);
				
				var $azsearchheader = $(document.createElement("div"))
									.attr("id","az-link-header");
				
				$azlinkscont.append($azsearchheader).append($azlinks);
				
				//add links to the div...
				//firstLoad();
				
				buildActions();
			}
				
			function buildActions(){
				//hover for button to show the box.
				/*
				var $azbox = $("#"+options.atozContainer);
				$button.hover(function(){
					if(options.debug){$.log("button hover");}
					var buttonOffset = $(this).getTopLeftFromBody();
					$azbox.css({"top":buttonOffset.top+$button.height(),"left":buttonOffset.left+options.hoffset});
					
					$azbox.show("fast");
					$(this).addClass("on");
					
				},function(){
					data.timeout = setTimeout(function(){whHideBox()},50);
				});
				*/
				var $azbox = $("#" + options.atozContainer);
				//hover for the azbox
				$(".azbutton").hover(function(){
					clearTimeout(data.timeout);
					if(options.debug){$.log("hover");}
					var buttonOffset = $az.getTopLeftFromBody();
					$azbox.css({"top":buttonOffset.top+$az.height(),"left":buttonOffset.left+options.hoffset});
					
					$azbox.slideDown();
					$(".azbutton").removeClass("on");
					$(this).addClass("on");
					var myValue = "";
					switch(parseInt($(this).attr("id").split("_")[1])){
						case 0:
							myValue = "a-c";
							break;
						case 1:
							myValue = "d-f";
							break;
						case 2:
							myValue = "g-m";
							break;
						case 3:
							myValue = "n-q";
							break;
						case 4:
							myValue = "r-t";
							break;
						case 5:
							myValue = "u-z";
							break;				
					}
					if(options.debug){$.log("myValue = " + myValue);}
					$("#azff").val(myValue);
					azsearch();
					
				},function(){
					var $myButton = $(this);
					data.timeout = setTimeout(function(){
						$.log($myButton);
						whHideBox($myButton);
					},50);
				});
				
				$azbox.hover(function(){
					clearTimeout(data.timeout);
				},function(){
					var $myButton = $(this);
					data.timeout = setTimeout(function(){
						jmhHideBox();
					},50);
				});
				
				
				$("#azff").focus(function(){$(this).val("");});
				
				
				function jmhHideBox(){
					var $azbox = $("#" + options.atozContainer);
					$(".azbutton").removeClass("on");
					$azbox.slideUp();
					$("#azff").val("");
				}
				function whHideBox($azbutton){
					var $azbox = $("#" + options.atozContainer);
					$azbutton.removeClass("on");
					$azbox.slideUp();
					$("#azff").val("");
				}	
				
				//click for the clear
				$("#az-clear").click(function(){
					$("#azff").val("");
					$azbox.slideUp();
				});
				
				//click for letters
				$(".letter").click(function(){
					//remove the on state from w/e is on
					$(".letter").removeClass("on");
					$(this).addClass("on");
					$("#azff").val(letters[$(this).attr("id").split("_")[1]]);
					//run search
					azsearch();
				});
				
				$("#azff").keyup(function(event){
					$(".letter").removeClass("on");
					if($(this).val().search(data.isLetter) != -1){
						azsearch();
						$azbox.slideDown();
					}else{
						$azbox.slideUp();
					}
					
				});
			
			}
			
			//add a's function
			function firstLoad(){
				$("#azff").val("a-c");
				//$("#azbutton_0").addClass("on");
				//azsearch();
			}
			
			function checkSearchVal(sv){
				switch(sv.toLowerCase()){
					case "a-c":
						return true;
						break;
					case "d-f":
						return true;
						break;
					case "g-m":
						return true;
						break;
					case "n-q":
						return true;
						break;
					case "r-t":
						return true;
						break;
					case "u-z":
						return true;
						break;
					default:
						return false;
						break;
				}
			}
			//search function
			function azsearch(){
				if(options.debug){$.log("RUN SEARCH!");}
				clearResults();
				var searchVal = $("#azff").val();
				var $azlinks = $("#az-links");
				
				var $azlinkheader = $("#az-link-header");
				$azlinkheader.html(searchVal);
				
				var lcount = 0;
				var foundlinks = false;
				if(options.debug){$.log(checkSearchVal(searchVal));}
				if(!checkSearchVal(searchVal)){
					if(options.debug){$.log("REG EXP TIME!");}
					var searchExp = new RegExp(searchVal,"i");
					$(data.links).find('group').each(function(){
						$(this).find("item").each(function(){
							if($(this).find("title").text().search(searchExp) != -1){
								var target = "";
								if($(this).find("target").text() == "true"){
									target = "target='_blank'";
								}
								$azlinks.append("<div><a href='"+$(this).find("url").text()+"' "+target+">"+$(this).find("title").text()+"</a></div>");
								foundlinks = true;
								if(lcount == 3){
									lcount = 0;
								}else{
									lcount++;
								}
							}
						});
					});
				}else{
					if(options.debug){$.log("find and print one letter");}
					//turn on letter
					$(data.links).find('group').each(function(){
						if($(this).attr("title").toLowerCase() == searchVal.toLowerCase()){
							$(this).find("item").each(function(){
								var target = "";
								if($(this).find("target").text() == "true"){
									target = "target='_blank'";
								}
								$azlinks.append("<div><a href='"+$(this).find("url").text()+"' "+target+">"+$(this).find("title").text()+"</a></div>");
								foundlinks = true;
								if(lcount == 3){
									lcount = 0;
								}else{
									lcount++;
								}
							});
						}
					});
				}
				
				if(!foundlinks){
					$azlinks.append("<div>No pages match your search.  Please try again later.</div>");
				}else{
					checkColumns();
				}
			}	
			
			function clearResults(){
				$("#az-links").html("");
				$("#az-link-header").html("");
			}
			
			function checkColumns(){
				if(options.debug){$.log("CHECK COLUMNS");}
				var $azlinks = $("#az-links");
				var $linkKids = $azlinks.children();
				
				if(options.debug){$.log("kids = " + $azlinks.children().length);}
				var divCount = 0;
				if($linkKids.length%4 == 0){
					divCount = parseInt($linkKids.length/4);
				}else{
					divCount = parseInt($linkKids.length/4)+1;
				}				
				
				$linkKids.slice(0,divCount).wrapAll("<div class='linkcol'></div>");
				$linkKids.slice(divCount,divCount*2).wrapAll("<div class='linkcol'></div>");
				$linkKids.slice(divCount*2,divCount*3).wrapAll("<div class='linkcol'></div>");
				$linkKids.slice(divCount*3).wrapAll("<div class='linkcol'></div>");

			}
			
		});
		
	};
	
})(jQuery);

//for debug/log stuff
jQuery.log = function(message) {
 if(window.console && $.browser.mozilla) {
    console.debug(message);
 }
};