(function($){
	$.fn.bulletin = function(options) {
		
		var defaults = {
			xml_path:"/xml/default.asp",
			emButtonPosition:"right",
			emButton:false,
			debug:false
		};
		var dataStore = {
			emState:true,
			cookieID:0
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			var $obj = $(this);
			if(options.sid != undefined){
				if(options.gid != undefined){
					buildBulletin();
				}else{
					if(options.debug){$.log("Please set the group id");}
				}
			}else{
				if(options.debug){$.log("PLease set the school id");}
			}
			
			function buildBulletin(){
				$.ajax({
					type: "GET",
					url: options.xml_path+"?sid="+options.sid+"&type=news&id="+options.gid+"&useCDATA=false&backLink="+window.location,
					dataType: "xml",
					success: function(xml) {
						$(xml).find('item:first').each(function(){
							dataStore.cookieID = $(this).find('id').text();
							var cookieVal = getCookie("emBulletin");
							
							if(options.debug){$.log(parseInt(cookieVal) + ":" + parseInt(dataStore.cookieID));}
							if(parseInt(cookieVal) == parseInt(dataStore.cookieID)){
								dataStore.emState = false;
							}
							
							if(options.debug){$.log("cookie = " + cookieVal);}
							if(options.debug){$.log("headline : "+ $(this).find('title').text());}
							
							var $bg= $(document.createElement("div"))
										.addClass("em-bulletinbg")
										.attr("id","embulletinbg")
										.css({'position':'absolute','top':'0','left':'0','display':'none'});
							
							$obj.append($bg);
							var $box = $(document.createElement("div"))
										.addClass("em-box")
										.attr("id","embox")
										.css({'position':'absolute','display':'none'});
												
							$obj.append($box);
							
							//build and append containers for design elements.
							var $outerBorder = $(document.createElement("div"))
												.attr("id","outer-border");
							
							var $innerBorder = $(document.createElement("div"))
												.attr("id","inner-border");
							
							$box.append($outerBorder.append($innerBorder));
							
							var $logoTop = $(document.createElement("div")).attr("id","logo-top");
							
							//close button
							var $closeLeft = $(document.createElement("div")).attr("id","close-left");
							var $closeSep = $(document.createElement("div")).attr("id","close-sep");
							var $closeBtn = $(document.createElement("div")).attr("id","close-button");
							
							$closeBtn.append($(document.createElement("a")).attr("href","javascript:void(0);").html("x"));
							var $closeBottom = $(document.createElement("div")).attr("id","close-bottom");
							
							var $text = $(document.createElement("div")).attr("id","story-holder");
	
							$innerBorder.append($closeLeft).append($closeSep).append($closeBtn).append($closeBottom).append($logoTop).append($text);
							
							var $headline = $(document.createElement("div"))
											.attr("id","em-headline")
											.html("<a href='"+$(this).find('url').text()+"'>"+$(this).find('title').text()+"</a>");
							
							var $brief = $(document.createElement("div")).attr("id","em-brief").html($(this).find('brief').text());
							var $readmore = $(document.createElement("div")).attr("id","em-readmore").html("<a href='"+$(this).find('url').text()+"' id='btn-readmore'>read more</a>");
							
							$text.append($headline).append($brief).append($readmore);
							
							var $logoBottom = $(document.createElement("div")).attr("id","logo-bottom");
							
							$innerBorder.append($logoBottom);
							
							
							if(options.emButton){
								//build em button
								var $embutton = $(document.createElement("div"))
											.attr("id","em-button")
											.css({"display":"block","position":"absolute"})
											.html("<a href='javascript:void(0);'>emergency notice</a>");
							
								$obj.append($embutton);
							}else{
								//build the emBar
								var $emBarBottom = $(document.createElement("div")).attr("id","em-bar-bottom");
								var $emBarText = $(document.createElement("div"))
												.attr("id","em-bar-text")
												.html("<span id='text'>"+$(this).find('title').text()+"</span><a href='"+$(this).find('url').text()+"'>read more</a>");
												//.html("<div id='icon'></div><div id='text'>"+$(this).find('title').text()+"</div><a href='"+$(this).find('url').text()+"'>read more</a>");
								var $emBar = $(document.createElement("div"))
											.attr("id","em-bar")
											.append($emBarText)
											.append($emBarBottom)
											.css("display","none")
											.prependTo($obj);
							}
							
							//set up the events and position and stuff
												
							buildPageActions();
							
						});
					},
					complete:function(){
						if(options.debug){$.log("complete run!");}
						initBulletin();	
					},
					error: function(request,tStatus,eThrown){
						if(options.debug){$.log("Error loading XML: "+eThrown);}
					}
				});
			}
			
			function initBulletin(){
				var top = $(window).height()/2;
				var left = $obj.width()/2;
				var $box = $("#embox");
				$box.css({'top':top-$box.height()/2,'left':left-$box.width()/2});
				
				if(options.emButton){
					var $button = $("#em-button");
					if(options.emButtonPosition == "left"){
						$button.css({'top':0,'left':0-$button.width()});
					}else{
						$button.css({'top':0,'left':$obj.width()-$button.width()});
					}
				}
				setBgHeight();
				
				if(dataStore.emState){
					positionBox();
			    }else{
			    	if(options.emButton){
			    		animateButtonIn();
			    	}else{
			    		//animate in bar
			    		animateBarIn();
			    		
			    	}
			    }
			}
			
			function buildPageActions(){
				var $bg = $("#embulletinbg");
				var $closebtn = $("#close-button a");
				$bg.click(function(){
					hideEM();
				});
				$closebtn.click(function(){
					hideEM();
				});
				
				var $embutton = $("#em-button");
				$embutton.click(function(){
					showEM();
				});
				$(window).scroll(function() { 
  					if(dataStore.emState){
  						positionBox();
  						setBgHeight();
  					}else{
  						if(options.emButton){
  							animateButtonIn();
  						}else{
  							
  						}
  					}	
  				});
  				$(window).resize(function(){					
  					if(dataStore.emState){
  						positionBox();
  						setBgHeight();
  					}else{
  						if(options.emButton){
  							animateButtonIn();
  						}else{
  							
  						}
  					}
  				});
  				$("#btn-readmore").click(function(){
  					readMoreEM();
  				});
  				$("#em-headline a").click(function(){
  					readMoreEM();
  				});
			}
			
			function readMoreEM(){
				if(options.debug){$.log("readmore run");}
				//write cookie
				setCookie("emBulletin",dataStore.cookieID,1);
			}
			
			function hideEM(){
				var $bg = $("#embulletinbg");
				var $box = $("#embox");
				$box.css("display","none");
				$bg.css("display","none");
				if(options.emButton){
  					animateButtonIn();
  				}else{
  					animateBarIn()		
  				}
				
				dataStore.emState = false;
				setCookie("emBulletin",dataStore.cookieID,1);
				
				
			}
			function showEM(){
				var $bg = $("#embulletinbg");
				var $box = $("#embox");
				$box.css("display","block");
				$bg.css("display","block");
				animateButtonOut();
				dataStore.emState = true;
				positionBox();
  				setBgHeight();
			}
			
			function animateBarIn(){
				var $bar = $("#em-bar");
				$bar.slideDown("slow");
			}
			
			function animateButtonIn(){
				var $button = $("#em-button");
				var topOffset = $(document).scrollTop();
				if(options.debug){$.log("button: "+options.emButtonPosition);}
				if(options.emButtonPosition == "left"){
					var leftOffset = 0;
				}else{
					var leftOffset = ($obj.width()-$button.width()) + $(document).scrollLeft();
				}				
				$button.animate({top:topOffset,left:leftOffset},{duration:500,queue:false});
			}
			function animateButtonOut(){
				var $button = $("#em-button");
				var topOffset = $(document).scrollTop()-$button.height();
				
				if(options.emButtonPosition == "left"){
					var leftOffset = 0;
				}else{
					var leftOffset = ($obj.width()-$button.width()) + $(document).scrollLeft();
				}
				$button.animate({top:topOffset,left:leftOffset},{duration:500,queue:false});				
			}
			function setBgHeight(){
				var $bg = $("#embulletinbg");
				$bg.css({'height':$(document).height(),'width':($obj.width()+$(document).scrollLeft())});
			}
			function positionBox(){
				var $box = $("#embox");
				var $bg = $("#embulletinbg");
  				var top = $(window).height()/2;	
  				var left = $obj.width()/2;		
				var topOffset = (top-$box.height()/2) + $(document).scrollTop();
				var leftOffset = (left-$box.width()/2) + $(document).scrollLeft();
				
				$box.css("display","block");
				$box.animate({top:topOffset,left:leftOffset},{duration:250,queue:false});
				if(options.emButton){
  					var $button = $("#em-button");
  					if(options.emButtonPosition == "left"){
						$button.css({"top":0-$button.height(),"left":0});
					}else{
						$button.css({"top":0-$button.height(),"left":$obj.width()-$button.width()});
					}		
  				}else{
  							
  				}
				
				$bg.css("display","block");
			}
			
			//cookie functions
			function setCookie(c_name,value,expiredays){
				var exdate=new Date();
				exdate.setDate(exdate.getDate()+expiredays);
				document.cookie=c_name+ "=" +escape(value)+
					((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+"; path=/";
			}
			function getCookie(c_name){
				if (document.cookie.length>0){
					c_start=document.cookie.indexOf(c_name + "=");
					if(c_start!=-1){ 
						c_start=c_start + c_name.length+1; 
						c_end=document.cookie.indexOf(";",c_start);
						if (c_end==-1) c_end=document.cookie.length;
						return unescape(document.cookie.substring(c_start,c_end));
					} 
				}
				return "";
			}
			
		});
	};
})(jQuery);

//for debug/log stuff
jQuery.log = function(message) {
 if(window.console && $.browser.mozilla) {
    console.debug(message);
 }
};