/* 
* CenterIt (v.1.1.5)
* by James Studdart (www.jamesstuddart.co.uk)
* james@studdart.co.uk
*
* Copyright (c) 2009-2010 James Studdart
* Licensed under the GPL license. 
*
*
* NOTE: Requires jQuery framework (www.jquery.com)
*	Developed for: jQuery 1.4.2
*
* Special Thanks to James Parker and Michael Collins
*
*/
/*
UPDATE: CenterIt (v.1.1.5) 
by Michael Collins - mike@intervalia.com (20/09/2010)
- Corrected the detection of IE Quirks mode to use position:absolute and not position:fixed.
- Fixed bug that was overwriting the object's width and height even if it was not calculating it.
- Return the 'this' pointer at the end of all functions to allow proper jQuery chainging.
*/
/*
UPDATE: CenterIt (v.1.1.4) 
by James Studdart (23/06/2010)
- Added property showPopup to ensure items are shown when using centerIt (if required, set to true by default)
*/
/*
UPDATE: CenterIt (v.1.1.3) 
by James Parker (09/06/2010)
- fix bug with calculating padding and margins
*/
/*
UPDATE: CenterIt (v.1.1.2) 
by James Studdart (25/02/2010)
- fix for IE6 and below centering, as IE6 and below do not support fixed positioning
*/
/*
UPDATE: CenterIt (v.1.1.1) 
by James Studdart (21/02/2010)
- Added control.show() to ensure chosen element that will be centred is shown, otherwise centreIt does nothing 
*/
/*
UPDATE:  CenterIt (v.1.1.0)
by James Studdart
- Added code to check for NaN on padding and margins
*/


(function($)
{
  $.fn.CenterIt = function(options)
  {
    var defaults = {
      ignorechildren: true,
      showPopup: true
    };
    var settings = $.extend({}, defaults, options);

    var control = $(this);

    if (settings.showPopup)
    {
      control.show();
    }

    $(document).ready(function() { CenterItem(); });
    $(window).resize(function() { CenterItem(); });

    function CenterItem()
    {
      var controlHeight = 0;
      var controlWidth = 0;

      if (settings.ignorechildren)
      {
        controlHeight = control.height();
        controlWidth = control.width();
      } else
      {

        var children = control.children();

        for (var i = 0; i < children.length; i++)
        {
          if (children[i].style.display != 'none')
          {
            controlHeight = children[i].clientHeight;
            controlWidth = children[i].clientWidth;
          }
        }
      }

      var controlMarginCSS = control.css("margin");
      var controlPaddingCSS = control.css("padding");


      if (controlMarginCSS != null)
      {
        //Work out Margins
        controlMarginCSS = controlMarginCSS.replace(/auto/gi, '0');
        controlMarginCSS = controlMarginCSS.replace(/px/gi, '');
        controlMarginCSS = controlMarginCSS.replace(/pt/gi, '');
      }

      var totalMargin = "";

      if (controlMarginCSS != "" && controlMarginCSS != null)
      {
        var totalMarginArray = controlPaddingCSS.split(' ');
        if (totalMarginArray.length == 1)
        {
          var margin = parseInt(totalMarginArray[0]);
          totalMargin = new Array(margin, margin, margin, margin);
        }
        else if (totalMarginArray.length == 2)
        {
          var verticalMargin = parseInt(totalMarginArray[0]);
          var horizontalMargin = parseInt(totalMarginArray[1]);
          totalMargin = new Array(verticalMargin, horizontalMargin, verticalMargin, horizontalMargin);
        }
        else if (totalMarginArray.length == 3)
        {
          var topMargin = parseInt(totalMarginArray[0]);
          var rightMargin = parseInt(totalMarginArray[1]);
          var bottomMargin = parseInt(totalMarginArray[2]);
          totalMargin = new Array(topMargin, rightMargin, bottomMargin, rightMargin);
        }
        else if (totalMarginArray.length == 4)
        {
          var topMargin = parseInt(totalMarginArray[0]);
          var rightMargin = parseInt(totalMarginArray[1]);
          var bottomPMargin = parseInt(totalMarginArray[2]);
          var leftMargin = parseInt(totalMarginArray[3]);
          totalMargin = new Array(topMargin, rightMargin, bottomMargin, leftMargin);
        }
      }

      var horizontalMargin = 0;
      var verticalMargin = 0;

      if (totalMargin != "NaN")
      {
        if (totalMargin.length > 0)
        {
          horizontalMargin = totalMargin[1] + totalMargin[3];
          verticalMargin = totalMargin[0] + totalMargin[2];
        }
      }


      if (controlPaddingCSS != null)
      {
        //Work out Padding
        controlPaddingCSS = controlPaddingCSS.replace(/auto/gi, '0');
        controlPaddingCSS = controlPaddingCSS.replace(/px/gi, '');
        controlPaddingCSS = controlPaddingCSS.replace(/pt/gi, '');
      }
      var totalPadding = "";

      if (controlPaddingCSS != "" && controlPaddingCSS != null)
      {
        var totalPaddingArray = controlPaddingCSS.split(' ');
        if (totalPaddingArray.length == 1)
        {
          var padding = parseInt(totalPaddingArray[0]);
          totalPadding = new Array(padding, padding, padding, padding);
        }
        else if (totalPaddingArray.length == 2)
        {
          var verticalPadding = parseInt(totalPaddingArray[0]);
          var horizontalPadding = parseInt(totalPaddingArray[1]);
          totalPadding = new Array(verticalPadding, horizontalPadding, verticalPadding, horizontalPadding);
        }
        else if (totalPaddingArray.length == 3)
        {
          var topPadding = parseInt(totalPaddingArray[0]);
          var rightPadding = parseInt(totalPaddingArray[1]);
          var bottomPadding = parseInt(totalPaddingArray[2]);

          totalPadding = new Array(topPadding, rightPadding, bottomPadding, rightPadding);
        }
        else if (totalPaddingArray.length == 4)
        {
          var topPadding = parseInt(totalPaddingArray[0]);
          var rightPadding = parseInt(totalPaddingArray[1]);
          var bottomPadding = parseInt(totalPaddingArray[2]);
          var leftPadding = parseInt(totalPaddingArray[3]);
          totalPadding = new Array(topPadding, rightPadding, bottomPadding, leftPadding);
        }
      }

      var horizontalPadding = 0;
      var verticalPadding = 0;

      if (totalPadding != "NaN")
      {
        if (totalPadding.length > 0)
        {
          horizontalPadding = totalPadding[1] + totalPadding[3];
          verticalPadding = totalPadding[0] + totalPadding[2];
        }
      }

      if (verticalMargin == "NaN" || isNaN(verticalMargin))
      { verticalMargin = 0; }
      if (verticalPadding == "NaN" || isNaN(verticalPadding))
      { verticalPadding = 0; }

      //Apply  CSS
      var windowHeight = $(window).height();
      var windowWidth = $(window).width();

      if ($.browser.msie && document.documentMode < 7)
      {
        //IE Quirks Mode HACK as IE in Quirks Mode does not support fixed positioning
        control.css("position", "absolute");
      }
      else
      {
        control.css("position", "fixed");
      }

      if (!settings.ignorechildren)
      {
        control.css("height", controlHeight + "px");
        control.css("width", controlWidth + "px");
      }

      control.css("top", ((windowHeight - (controlHeight + verticalMargin + verticalPadding)) / 2) + "px");
      control.css("left", ((windowWidth - (controlWidth + horizontalMargin + horizontalPadding)) / 2) + "px");

      return this;
    }

    return this;
  }
})(jQuery);

/*
 * jQuery Timer Plugin
 * http://www.evanbot.com/article/jquery-timer-plugin/23
 *
 * @version      1.0
 * @copyright    2009 Evan Byrne (http://www.evanbot.com)
 */ 

jQuery.timer = function(time,func,callback){
	var a = {timer:setTimeout(func,time),callback:null}
	if(typeof(callback) == 'function'){a.callback = callback;}
	return a;
};

jQuery.clearTimer = function(a){
	clearTimeout(a.timer);
	if(typeof(a.callback) == 'function'){a.callback();};
	return this;
};


/* Popup window http://swip.codylindley.com/popupWindowDemo.html */

(function($){ 		  
	$.fn.popupWindow = function(instanceSettings){
		
		return this.each(function(){
		
		$(this).click(function(){
		
		$.fn.popupWindow.defaultSettings = {
			centerBrowser:1, // center window over browser window? {1 (YES) or 0 (NO)}. overrides top and left
			centerScreen:0, // center window over entire screen? {1 (YES) or 0 (NO)}. overrides top and left
			height:900, // sets the height in pixels of the window.
			left:0, // left position when the window appears.
			location:0, // determines whether the address bar is displayed {1 (YES) or 0 (NO)}.
			menubar:0, // determines whether the menu bar is displayed {1 (YES) or 0 (NO)}.
			resizable:0, // whether the window can be resized {1 (YES) or 0 (NO)}. Can also be overloaded using resizable.
			scrollbars:1, // determines whether scrollbars appear on the window {1 (YES) or 0 (NO)}.
			status:0, // whether a status line appears at the bottom of the window {1 (YES) or 0 (NO)}.
			width:700, // sets the width in pixels of the window.
			windowName:null, // name of window set from the name attribute of the element that invokes the click
			windowURL:null, // url used for the popup
			top:0, // top position when the window appears.
			toolbar:0 // determines whether a toolbar (includes the forward and back buttons) is displayed {1 (YES) or 0 (NO)}.
		};
		
		settings = $.extend({}, $.fn.popupWindow.defaultSettings, instanceSettings || {});
		
		var windowFeatures =    'height=' + settings.height +
								',width=' + settings.width +
								',toolbar=' + settings.toolbar +
								',scrollbars=' + settings.scrollbars +
								',status=' + settings.status + 
								',resizable=' + settings.resizable +
								',location=' + settings.location +
								',menuBar=' + settings.menubar;

				settings.windowName = this.name || settings.windowName;
				settings.windowURL = this.href || settings.windowURL;
				var centeredY,centeredX;
			
				if(settings.centerBrowser){
						
					if ($.browser.msie) {//hacked together for IE browsers
						centeredY = (window.screenTop - 120) + ((((document.documentElement.clientHeight + 120)/2) - (settings.height/2)));
						centeredX = window.screenLeft + ((((document.body.offsetWidth + 20)/2) - (settings.width/2)));
					}else{
						centeredY = window.screenY + (((window.outerHeight/2) - (settings.height/2)));
						centeredX = window.screenX + (((window.outerWidth/2) - (settings.width/2)));
					}
					window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY).focus();
				}else if(settings.centerScreen){
					centeredY = (screen.height - settings.height)/2;
					centeredX = (screen.width - settings.width)/2;
					window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + centeredX +',top=' + centeredY).focus();
				}else{
					window.open(settings.windowURL, settings.windowName, windowFeatures+',left=' + settings.left +',top=' + settings.top).focus();	
				}
				return false;
			});
			
		});	
	};
})(jQuery);

