// Name-spaced global object
var AF = AF || {};
AF.debug = [];
AF.counter = 1;
AF.activeDialogs = [];
AF.ie6 = ($.browser.msie && $.browser.version < 7) ? true: false;
AF.dateStrings = {
  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
};

// var firebug = firebug || document.createElement('script');

(function($){
	// Positioned dialog (tooltip (different from AF.dialogs))
  // Used on large calendar pages
	$.fn.openDialogPositioned = function(options) {
		var coords = options.coords,
				offset = options.offset;
    
		if($(window).scrollTop()) coords.top -= $(window).scrollTop();
		
		return this.each(function(i, el) {
			var that					= $(this),
					documentWidth = $('body').eq(0).width(),
					popupdims			= {},
					popupcoords		= {},
					diff, farRight, farLeft;
			
			that.dialog('open');
			popupcoords.top 	= Math.round(coords.top + offset.top);
			popupcoords.left 	= Math.round(coords.left + offset.left);
			farRight = popupcoords.left + that.width() - offset.left;
			
      if (farRight > documentWidth) {
        diff = documentWidth - farRight;
        popupcoords.left += diff;
      }
      
			if ((popupcoords.left + offset.left) < 0) popupcoords.left = 10;
			
			that.dialog('option', 'position', [popupcoords.left, popupcoords.top]);
			that.find('a.close').bind('click', function(e) {
			  e.stopPropagation();
			  that.dialog('close');
			  return false;
			});
		});
	};
  
  (function(global, $) {
    // Overwriting default create buttons function
    $.extend($.ui.dialog.prototype, (function(orig){
      return {
        _createButtons: function(buttons) {
          var self = this,
            hasButtons = false,
            uiDialogButtonPane = $('<div></div>')
              .addClass(
                'ui-dialog-buttonpane ' +
                'ui-widget-content ' +
                'ui-helper-clearfix'
              );

          // if we already have a button pane, remove it
          this.uiDialog.find('.ui-dialog-buttonpane').remove();

          (typeof buttons == 'object' && buttons !== null &&
            $.each(buttons, function() { return !(hasButtons = true); }));
          if (hasButtons) {
            $.each(buttons, function(name, fn) {
              $('<button type="button"></button>')
                .addClass(
                  'ui-state-default ' +
                  'ui-corner-all ' +
                  'btn ' +
                  'btn-' + name.split('|')[1]
                )
                .html('<span>'+name.split('|')[0]+'</span>')
                .click(function() { fn.apply(self.element[0], arguments); })
                // .click(function() { var args = [].slice.apply(arguments, 0); args.push(link); fn.apply(self, args); })
                // .hover(
                //  function() {
                //    $(this).addClass('ui-state-hover');
                //  },
                //  function() {
                //    $(this).removeClass('ui-state-hover');
                //  }
                // )
                // .focus(function() {
                //  $(this).addClass('ui-state-focus');
                // })
                // .blur(function() {
                //  $(this).removeClass('ui-state-focus');
                // })
                .appendTo(uiDialogButtonPane);
            });
            uiDialogButtonPane.appendTo(this.uiDialog);
          }
        }
      }
    })($.ui.dialog.prototype['_createButtons']));

    $.fn.afdialog = function(options) {
      options = $.extend({
        autoOpen: false,
        bgiframe: true,
        resizable: false,
        minHeight: 60,
        modal: true,
        width: 334,
        dialogClass: 'generic' || options.dialogClass,
        buttons: {
          'Cancel|red': function() {
            $(this).dialog('close');
          },
          'Change|blue': function() {
            $(this).dialog('close');
          }
        }
      }, options);

      return this.each(function(i, el) {
        options.that = this;
        var contentId = this.hash || options.contentId,
        activeDialog = $(contentId).dialog(options);
        activeDialog.bind('dialogopen', function(event, ui) {
          $('.'+options.dialogClass).prev('.ui-widget-overlay').css({
            backgroundColor: '#000',
            backgroundImage: 'none',
            opactiy: 0.5
          });
        });
        
        $(el).bind('click', function() {
          activeDialog.dialog('open');
          return false;
        });
        
        return el;
      });
    };
  })(this, jQuery);
	
	$.formatNumber = function(num, len){
		var str = ''+parseInt(num),
			zeros = '',
		  len = parseInt(len),
		  num = parseInt(num);
		if (str.length < len) {
			var times = len - str.length;
			for (var i = 0; i < times;i++) {
				zeros += '0';
			}
		}
		return zeros+num;
	};
	
	$.fn.center = function(options) {
    var that = $(this),
        dada = that.parent(),
        cent = (dada.outerWidth() / 2) - (that.width() / 2);
    that.css('left', cent);
    return that;
  };
	
	$.fn.replaceClass = function(replace, withthis) {
    return this.removeClass(replace).addClass(withthis);
	};
	
  // Plugin for generic use on expandable panes/toggleable elements
  // Pass in selectors and class names for desired behavior
	$.fn.expandable = function(options) {
	  var defaults = {
	        pane: '.pane' || options.pane,                    // Selector for expandable area
	        trigger: '.trigger' || options.trigger,           // Selector that triggers visibility of expandable area
	        expandedClass: 'open' || options.expanededClass   // Class name applied to expandable unit when expandable area is open
	      },
        opts = $.extend({}, defaults, options);
        
	  return this.each(function() {
      var self    = $(this),
          trigger = self.find(opts.trigger+":eq(0)"),
          pane    = self.find(opts.pane+":eq(0)"),
          open    = false;
      
      // if (pane.css('display')) self.addClass(opts.expandedClass);
      
      trigger.bind('click', function() {
        pane.slideToggle(500, function() {
          self.trigger('toggleFinish', {    // Broadcasting toggleFinish event
            pane: pane,
            open: open
          });
        });
        self
          .toggleClass(opts.expandedClass)
            .trigger('toggling', {          // Broadcasting toggling event--use .bind('toggling', function(){ ... }) to tie into event
              self: self,
              trigger: trigger,
              pane: pane,
              open: (open) ? open = false : open = true
            });
        return false;
      });
	  });
	};
	
  // Call this on the hover/trigger area--where the mouse will be when you want the actions to show up
	$.fn.hoverActions = function(options) {
	  var opts = $.extend({
	    actionsContainer: '.actions'
	  }, options);
	  return this.each(function(el, i) {
  	  $(this).hover(
        function() { $(this).find(opts.actionsContainer).show(); },
        function() { $(this).find(opts.actionsContainer).hide(); }
      );
	  });
	}
	  
})(jQuery);

$(document).ready( function (){
	
  if ($('input:radio, input:checkbox').length) {
    $('input:radio, input:checkbox').customInput();
  }

	$('.ui-widget-overlay').live('click', function(event) {
		$.each(AF.activeDialogs, function(index, item){
			$(item).dialog('close');
			AF.activeDialogs.shift();
		});
	});
	
	$('.fc-event a').live('click', function(event){
		if($(this).attr('href') === '#') event.preventDefault();
	});
	
	if ($('.page-help, .legal-help').length) {
	  $('.page-help, .legal-help').click(function(){
	    var link = $(this),
	        src  = link.attr('href') || 'about:blank';
	    $(document.body).append('<div id="External" style="display:none"><a href="#Close" class="close-help">Close</a><iframe src="'+ src +'" width="850" height="500" frameborder="0"></iframe></div>');
  	  link.afdialog({
  	    autoOpen: true,
        contentId: '#External',
        width: 850,
        height: 550,
        buttons: {},
        open: function() {
          var self = $(this),
              cobj = {
                'display': 'inline-block',
                'float': 'right',
                'padding': '3px 7px',
                'font-weight': 'bold',
                'font-size': '12px',
                'text-align': 'center',
                'text-decoration': 'none'
              };
              
            self.css('background', '#fbfbfb').closest('.ui-dialog').prev('.ui-widget-overlay').click(function(){
            self.dialog('close');
            return false;
          });
          self.find('.close-help').css(cobj).click(function(){
            self.dialog('close');
            return false;
          });
        }, 
        close: function() {
          $(this).dialog('destroy');  
          $('#External').remove();   
        }  
      });
      return false;
	  });
	}
	
});

