if(!$.clientCoords) {
  $.clientCoords = function() {
    var dimensions = {width: 0, height: 0,scrollLeft:0, scrollTop:0};
    if (window.innerWidth && window.innerHeight) {
      dimensions.width = window.innerWidth;
      dimensions.height = window.innerHeight;
    } else if (document.documentElement) {
      dimensions.width = document.documentElement.offsetWidth;
      dimensions.height = document.documentElement.offsetHeight;
    }
    if($.browser.msie) {
      var agt=navigator.userAgent.toLowerCase();
      if(agt.indexOf("msie 7.")==-1) {
        dimensions.width = dimensions.width-20;
        dimensions.height = dimensions.height-4;
      }
    }
    var iebody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
    dimensions.scrollLeft = document.all ? iebody.scrollLeft : window.pageXOffset;
    dimensions.scrollTop  = document.all ? iebody.scrollTop  : window.pageYOffset;
    return dimensions;
  }
}

Drupal.npscCustomPopUp = {

  checkInt: null,
  lastMove: 0,

  checkPos: function() {
    var coords = $.clientCoords();
    var margin = new String($('#pop-up').css('margin-top'));
    var m = margin.match(/(\d+).*/);
    margin = m[1];
    lastMove = parseInt(margin) - 10;
    var offSet = coords.scrollTop - lastMove;
    if(offSet != 0) {
      lastMove = (lastMove + offSet) + 10;
      $('#pop-up').css('margin-top', lastMove+'px');
    }
  },

  show: function(path) {
    Drupal.npscCustomPopUp.checkInt = window.setInterval(Drupal.npscCustomPopUp.checkPos, 20);
    var coords = $.clientCoords();
    if(coords.height < $('table.main').height()) {
      coords.height = $('table.main').height();
    }
    var h = coords.height+'px';
    var w = coords.width+'px';

    var div = document.createElement('DIV');
    div.id = 'popup-background';
    $(div)
    .width(w)
    .height(h)
    .css({width:w,height:h,position:'absolute', 'background-color':'#000',opacity:0.45,left:'0px',top:'0px'})
    div.innerHTML = '&nbsp;';

    var popup = document.createElement('DIV');
    popup.id = 'pop-up';
    $(popup).addClass('wide');

    $('body').append(div);
    $('body').append(popup);

    var pos = Drupal.absolutePosition(popup);
    $(popup).css({position:'absolute',top:'0px',left:pos.x+'px',opacity:0.95}).hide();

    if($.browser.msie) {
      var agt=navigator.userAgent.toLowerCase();
      if(agt.indexOf("msie 7.")==-1) {
        $('select').each(
        function() {
          $(this).hide();
        }
        );
      }
    }
    $(popup).show(250, function(){Drupal.npscCustomPopUp.loadData(path);});
  },
  hide: function() {
    window.clearInterval(Drupal.npscCustomPopUp.checkInt);
    $('#pop-up').hide(250, function(){
      $('div#popup-background').hide(250, function(){
        $('div#popup-background').remove();
        if($.browser.msie) {
          var agt=navigator.userAgent.toLowerCase();
          if(agt.indexOf("msie 7.")==-1) {
            $('select').each(
            function() {
              $(this).show();
            }
            );
          }
        }
      });
      $('#pop-up').remove();
    });
  },

  onDataReceived: function(json) {
    if(json) {
      Drupal.npscCustomPopUp.setContent(json);
    } else {
      Drupal.npscCustomPopUp.setContent('<div class="messages error">Content could not be loaded. We apologize for the inconvenience.</div>');
    }
  },

  loadData: function(path) {
    Drupal.npscCustomPopUp.setContent('<div class="messages status loading">Loading... Please wait...</div>');
    $.getJSON("index.php?q="+path, function(json){Drupal.npscCustomPopUp.onDataReceived(json)});;
  },

  constructCloseButton: function() {
    var btn = document.createElement('A');
    var btn2 = document.createElement('A');
    btn.href = 'javascript:void(0);'
    btn2.href = 'javascript:void(0);'

    btn.innerHTML = 'close';
    btn2.innerHTML = 'close';
    $(btn).css({display:'block','text-align':'right'}).click(Drupal.npscCustomPopUp.hide);
    $(btn2).css({display:'block','text-align':'right'}).click(Drupal.npscCustomPopUp.hide);
    $('#pop-up').prepend(btn).append(btn2);
  },

  setContent: function(content) {
    $('#pop-up').empty().append(content);
    Drupal.npscCustomPopUp.adjustHeight();

    Drupal.npscCustomPopUp.constructCloseButton();
  },
  adjustHeight: function() {
    var coords = $.clientCoords();
    var offset = 60;
    $('#pop-up').height('auto').css({height:'auto'});
    if($('#pop-up').height() > (coords.height-offset)) {
      $('#pop-up').height((coords.height-offset)+'px').css({height:(coords.height-offset)+'px',overflow:'auto'});
    } else {
      $('#pop-up').height('auto').css({height:'auto'});
    }
  }
};
