// wait for the DOM to be loaded 
$(document).ready(function() {
	
    //-- only execute this if the link is present --//
    if( $('#pointsLink').length > 0 ) {
    	if($("#cigAvailablePoints").length>0){
    	var $cigPointsId = $("#cigAvailablePoints");
    	$("#cigAvailablePoints").remove();
    	$("#container").prepend($cigPointsId);
    	}
        function loadAvailPointsTools() {
        	
            $.ajax({
                type: "POST",
                url: $('#pointsLink').attr('href'),
                dataType: "html",
                async: false,
                success: function(data) {
                    // set the form data
                    $(".contentWrap_availablePointsTool").html(data);
                    
                    //-- BEGIN: this content moved from availablePointsTool.js --//
                    $( "#datepicker" ).datepicker({
                        minDate: 0,
                        maxDate: "+25Y",
                        showOn: "button",
                        buttonImage: "/images/icon_calendar.gif"
                    });
                    
                    var myDate = new Date();
                    var month = myDate.getMonth() + 1;
                    var prettyDate = month + '/' + myDate.getDate() + '/' + myDate.getFullYear();
                    
                    $("#datepicker").val(prettyDate);
                    
                    $("#datepicker").change(function() {
                        
                        var dateparm = $('[name="datepicker"]').val();
                        var programCode = $('[name="programCode"]').val();
                        
                        if (programCode == 'CIG') {
                        	setIntervalPoints(programCode, dateparm);
                  
                        } else{
                        	
                           	setIntervalPoints(programCode, dateparm);
                           	
                           //	alert($('#intervalPoints').text());
                            $.getJSON("/web/my/jsonlookup/getAvailableExternalPoints", { programCode: programCode, queryDate: dateparm  }, function(data2) {
                               	if (data2 == null) {
									$("#totalBox").hide();
									$("#shellArea").hide();
									$("#serviceDown").show();
									return;
								}
								$("#serviceDown").hide();
                            	var totalSavedPoints = data2.availableSavedPoints;
                               	var totalSVCPoints = data2.totalAvailableExternalPoints;
                               	var grandTotal = totalSavedPoints + totalSVCPoints;
                               	var tbodyHtml = "";
                               	$('#grandTotal').text(formatNumber(grandTotal));
                               	
                               	
                                	$.each(data2, function(key, value){
                                		if (key == 'availableExternalPoints') {
											var ExternalPoint = value;
		                               		var firsttime = true;

		                               		$.each(ExternalPoint, function(i, item){
			                               		var clubPoint1 = item.clubPoints;
			                               		var clubname = true;
			                               		
			                               		if (firsttime != true) {
				                               		tbodyHtml += '<tr><td colspan="3" valign="top" class="spacer_row">&nbsp;</td><tr>';
												}
			                               		
			                               		tbodyHtml += '<tr><td valign="top" class="row_shaded"><strong>'+item.clubName+'</strong></td>';

			                               		$.each(clubPoint1, function(i, item2){
			                               			var clubPoint = item2;
			                               			if (clubname == false) {
			                               				tbodyHtml += '<td valign="top">&nbsp;</td>';
													}
				                               		tbodyHtml += '<td valign="top" class="row_shaded">'+formatNumber(item2.pointsBalance)+'</td>'+
													'<td valign="top" class="expDate">'+dateFormat(item2.expirationDate, "mmm dd yyyy")+'</td></tr>';
				                               		
			            			               clubname = false;
			                               		});
			                               		
			                               		firsttime = false;

			                               	});
		                               		
											$("#shellPoints tbody").html(tbodyHtml);
											
											//highlight dates
				                        	$('.expDate').each(function() {
				                                var expDate = Date.parse($(this).text());
				                                var pickedDate = Date.parse(dateparm);
				                                if (expDate < pickedDate) {
				                                    $(this).parent().css('backgroundColor', '#EFEF00');
				                                } else {
				                                    $(this).parent().css('backgroundColor', '#FFFFFF');
				                                }
				                            });
			                                   
										}
                                	});
                                
                            });                     	
                        }
                    });
                    //-- END: this content moved from availablePointsTool.js --//
                    
                    function setIntervalPoints(programCode, dateparm) {
                        $.getJSON("/web/my/jsonlookup/getAvailablePoints", { programCode: programCode, queryDate: dateparm  }, function(data) {
                          if(data.length > 0) {
	                        	if (programCode == 'CIG') {
		                            $('#totalPointsAmount').text(data);
								}

	                        	$('.expDate').each(function() {
	                                var expDate = Date.parse($(this).text());
	                                var pickedDate = Date.parse(dateparm);
	                                if (expDate < pickedDate) {
	                                    $(this).parent().css('backgroundColor', '#EFEF00');
	                                } else {
	                                    $(this).parent().css('backgroundColor', '#FFFFFF');
	                                }
	                            });
	                        }
	                    });	
                    }
                    
                    // format number
                    function formatNumber(num) {
                    	//num = (num==null)?0:num;
                		num = num.toString().replace(/\$|\,/g,'');
                		if(isNaN(num))
                		num = "0";
                		sign = (num == (num = Math.abs(num)));
                		num = Math.floor(num*100+0.50000000001);
                		cents = num%100;
                		num = Math.floor(num/100).toString();
                		if(cents<10)
                		cents = "0" + cents;
                		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
                		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
                		return num;
                		
                		}
                    //-- attach click event handlers --//
                	$('#details_ii_points').click(function (event) {
                		event.preventDefault();
                		if($('#point_buckets_ii').hasClass('display_block')) {
                			$(this).removeClass('icon_expanded').addClass('icon_expand');
                			$('#point_buckets_ii').removeClass("display_block");
                			$('#point_buckets_ii').toggleClass("display_none");
                		} else {
                			$(this).removeClass('icon_expand').addClass('icon_expanded');
                			$('#point_buckets_ii').toggleClass("display_none");
                			$('#point_buckets_ii').toggleClass("display_block");
                		}
                	});
                	$('#details_svc_points').click(function (event) {
                		event.preventDefault();
                		if($('#point_buckets_svc').hasClass('display_block')) {
                			$(this).removeClass('icon_expanded').addClass('icon_expand');
                			$('#point_buckets_svc').toggleClass("display_block");
                			$('#point_buckets_svc').toggleClass("display_none");
                		} else {
                			$(this).removeClass('icon_expand').addClass('icon_expanded');
                			$('#point_buckets_svc').toggleClass("display_none");
                			$('#point_buckets_svc').toggleClass("display_block");
                		}
                	});
                    
                },
                error: function(x, y, z) {
                    /* debugger;
                    alert("error"); */
                }
            });
        }
        //-- initialize the data, and the overlay --//
        loadAvailPointsTools();
        
        overlay = $("#overlay_availablePointsTool").overlay({
            top: 'center',
            expose: 'black',
            closeOnClick: false,
            api: true,
            onBeforeLoad: function(event) {
                $("#apt_wrapper").html('<p class="please_wait">Loading, Please Wait...</p>');
            },
            onLoad: function(event) {
            	this.getOverlay().insertAfter('#exposeMask');
            	
                loadAvailPointsTools();
                
                $('#closeButton').click( function(event) {
                	
                    overlay.close();
                    event.preventDefault();
                });
            }
        });
        
        $("#pointsLink").click(function(event){
        	
            overlay.load();
            event.preventDefault();
        });
        
    }
    
    
    //format date Long format -- MMM dd yyy
    // documentation: http://blog.stevenlevithan.com/archives/date-time-format
    var dateFormat = function () {
    	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
    		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
    		timezoneClip = /[^-+\dA-Z]/g,
    		pad = function (val, len) {
    			val = String(val);
    			len = len || 2;
    			while (val.length < len) val = "0" + val;
    			return val;
    		};

    	// Regexes and supporting functions are cached through closure
    	return function (date, mask, utc) {
    		var dF = dateFormat;

    		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
    		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
    			mask = date;
    			date = undefined;
    		}

    		// Passing date through Date applies Date.parse, if necessary
    		date = date ? new Date(date) : new Date;
    		if (isNaN(date)) throw SyntaxError("invalid date");

    		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

    		// Allow setting the utc argument via the mask
    		if (mask.slice(0, 4) == "UTC:") {
    			mask = mask.slice(4);
    			utc = true;
    		}

    		var	_ = utc ? "getUTC" : "get",
    			d = date[_ + "Date"](),
    			D = date[_ + "Day"](),
    			m = date[_ + "Month"](),
    			y = date[_ + "FullYear"](),
    			H = date[_ + "Hours"](),
    			M = date[_ + "Minutes"](),
    			s = date[_ + "Seconds"](),
    			L = date[_ + "Milliseconds"](),
    			o = utc ? 0 : date.getTimezoneOffset(),
    			flags = {
    				d:    d,
    				dd:   pad(d),
    				ddd:  dF.i18n.dayNames[D],
    				dddd: dF.i18n.dayNames[D + 7],
    				m:    m + 1,
    				mm:   pad(m + 1),
    				mmm:  dF.i18n.monthNames[m],
    				mmmm: dF.i18n.monthNames[m + 12],
    				yy:   String(y).slice(2),
    				yyyy: y,
    				h:    H % 12 || 12,
    				hh:   pad(H % 12 || 12),
    				H:    H,
    				HH:   pad(H),
    				M:    M,
    				MM:   pad(M),
    				s:    s,
    				ss:   pad(s),
    				l:    pad(L, 3),
    				L:    pad(L > 99 ? Math.round(L / 10) : L),
    				t:    H < 12 ? "a"  : "p",
    				tt:   H < 12 ? "am" : "pm",
    				T:    H < 12 ? "A"  : "P",
    				TT:   H < 12 ? "AM" : "PM",
    				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
    				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
    				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
    			};

    		return mask.replace(token, function ($0) {
    			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
    		});
    	};
    }();

    // Some common format strings
    dateFormat.masks = {
    	"default":      "ddd mmm dd yyyy HH:MM:ss",
    	shortDate:      "m/d/yy",
    	mediumDate:     "mmm d, yyyy",
    	longDate:       "mmmm d, yyyy",
    	fullDate:       "dddd, mmmm d, yyyy",
    	shortTime:      "h:MM TT",
    	mediumTime:     "h:MM:ss TT",
    	longTime:       "h:MM:ss TT Z",
    	isoDate:        "yyyy-mm-dd",
    	isoTime:        "HH:MM:ss",
    	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
    };

    // Internationalization strings
    dateFormat.i18n = {
    	dayNames: [
    		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
    		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    	],
    	monthNames: [
    		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
    		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    	]
    };

    // For convenience...
    Date.prototype.format = function (mask, utc) {
    	return dateFormat(this, mask, utc);
    };
    
    
	
});


