(function($){
    $.annualfund = function(el, options, data){
        var base = this;
        
        base.$el = $(el);
        base.el = el;
        
        base.$el.data("annualfund", base);
        
        base.init = function(){
            base.options = $.extend({},$.annualfund.defaultOptions, options);
            data = "";
            base.options.id = base.$el.html();
            if(base.options.id.length > 0){
            	base.$el.html("");
            	willow.getAF(base.options.id,function(d){
					data = d;
					base.writeHTML();
          		 	base.setBar();
				}); 
            }
                    
            
            
        };
        
        base.writeHTML = function(){
        	var astring = "<div class='annual-fund'>";
        	astring += "<div class='scale'></div>";
        	astring += "<div class='bar'></div>";
        	astring += "<div class='annual-fund-content'>";
        	astring += "<ul class='af-data'>";
        	if(data.af.goal.length > 0){
        		astring += "<li class='afGoal'><span>Goal:</span> "+base.dollarAmount(data.af.goal)+"</li>";
        	}
        	if(data.af.current.length > 0){
        		astring += "<li class='afCurrent'><span>Current:</span> "+base.dollarAmount(data.af.current)+"</li>";				
        	}
			if(data.af.asof.length > 0){
        		astring += "<li class='afAsOfDate'><span>As of Date:</span> "+data.af.asof+"</li>";
        	}
			if(data.af.current.length > 0){
				if(data.af.goal.length > 0){
					var amtStillNeed = data.af.goal-data.af.current;
					astring += "<li class='afStillNeed'><span>Still Needed:</span> "+base.dollarAmount(amtStillNeed.toString())+"</li>"
				}
			}
        	if(data.af.start.length > 0){
        		astring += "<li class='afStartDate'><span>Start Date:</span> "+data.af.start+"</li>";
        	}
        	if(data.af.end.length > 0){
        		astring += "<li class='afEndDate'><span>End Date:</span> "+data.af.end+"</li>";
        		var start = new Date(),end = new Date(data.af.end),one_day=1000*60*60*24;
        		var daysLeft = Math.ceil((end.getTime()-start.getTime())/(one_day));
        		astring += "<li class='afDaysRemaining'><span>Days Remaining:</span> "+daysLeft+"</li>";
        	}
        	        	
        	astring += "</ul></div></div>";
        	
        	base.$el.append(astring);
        };
        
        base.setBar = function(){
        	var $bar = base.$el.children(".annual-fund").children(".bar");
        	if(data.af.current >= data.af.goal){
        		$bar.height(base.options.bar_height);
        	}else{
        		var midHeight = base.options.bar_height * (data.af.current/data.af.goal);
        		$bar.height(midHeight).css("margin-top",base.options.bar_height-midHeight);
        	}
        }
        
        base.checkNum = function(data){ 
			var valid = "0123456789.";
			var ok = 1; var checktemp;
			for (var i=0; i<data.length; i++) {
				checktemp = "" + data.substring(i, i+1);
				if (valid.indexOf(checktemp) == "-1") return 0;}
				return 1;
		}
        
        base.dollarAmount = function(Num) {
			dec = Num.indexOf(".");
			end = ((dec > -1) ? "" + Num.substring(dec,Num.length) : ".00");
			Num = "" + parseInt(Num);
			var temp1 = "";
			var temp2 = "";
			if (base.checkNum(Num) == 0) {
				alert("This does not appear to be a valid number.  Please try again.");
			}else{ 
				if (end.length == 2) end += "0";
				if (end.length == 1) end += "00";
				if (end == "") end += ".00";
				var count = 0;
				for (var k = Num.length-1; k >= 0; k--) {
					var oneChar = Num.charAt(k);
					if (count == 3) {
						temp1 += ",";
						temp1 += oneChar;
						count = 1;
						continue;
					}else{
						temp1 += oneChar;
						count ++;
					}
				}
				for (var k = temp1.length-1; k >= 0; k--) {
					var oneChar = temp1.charAt(k);
					temp2 += oneChar;
				}
				temp2 = "$" + temp2;// + end; //dropping the .00 off the end of the numbers
				return temp2;
			}
		}
        
        base.init();
    };
    
    $.annualfund.defaultOptions = {
    	bar_height:238
    };
    
    $.fn.annualfund = function(data,options){
        return this.each(function(){
            (new $.annualfund(this, options, data));
        });
    };
    
})(jQuery);
