
function _ivEventOnKeyPress(e) {
  var event = e || self.event;
  if (event.keyCode==27) {
    if (_ivEventOnEscapeList.length) {
      var item = _ivEventOnEscapeList.pop();
      var func = item[1];
      func(item[0]);
    }
    if (!_ivEventOnEscapeList.length) {
      window.document['onkeypress'] = null;
    }
  }
}

function _ivEventOnLoad(e) {
  var event = e || self.event;
  while (_ivEventOnLoadList.length) {
    var func = _ivEventOnLoadList.shift();
    func();
  }
}

function __inside(node, xxx) {
  var result = true;
  while (node.tagName != 'HTML') {
    if (node==xxx) { result = false; break; }
    node = node.parentNode;
  }
  return result;
}

function _ivEventOnMouseDownOutside(e) {
if(window.console)window.console.info('x '+_ivEventOnMouseDownOutsideList.length);
  
  var event = e || self.event;
  
  var xxx = event.target || event.srcElement;
 
  //while (_ivEventOnMouseDownOutsideList.length) {
  var li = _ivEventOnMouseDownOutsideList;
  for (var i=0; i<li.length; i++) {
    //var item = _ivEventOnMouseDownOutsideList.shift();
    var item = li[i];
    if (__inside(xxx, item[0])) {
if(window.console)window.console.info('y');
      //var func = _ivEventOnMouseDownOutsideList.shift();
      var func = item[1];
      func();
      //_ivEventOnMouseDownOutsideList.pop();
      _ivEventOnMouseDownOutsideList.splice(i, 1);
    }
  }

  if (!_ivEventOnMouseDownOutsideList.length) {
    //window['onmousedown'] = null;
  }

}

/******************************************************************************/

function _ivEventInitOnKeyPress() {
  if (!window.document['onkeypress']) {
    window.document['onkeypress'] = _ivEventOnKeyPress;
    _ivEventOnEscapeList = new Array();
  }
}

function _ivEventRegisterOnEscape(sender, func) {
  _ivEventInitOnKeyPress();
  _ivEventOnEscapeList.push( [sender, func] );
}

/******************************************************************************/

/*
function _ivEventRegister(sender, eventName, func) {
  if (!window['onload']) {
    window['onload'] = _ivEventOnLoad;
    _ivEventOnLoadList = new Array();
  }
  _ivEventOnLoadList.push( func );
}
*/

function _ivEventRegisterOnLoad(sender, eventName, func) {
  if (!window['onload']) {
    window['onload'] = _ivEventOnLoad;
    _ivEventOnLoadList = new Array();
  }
  _ivEventOnLoadList.push( func );
}
function _ivEventRegisterOnMouseDownOutside(sender, eventName, func) {
  if (!window.document['onmousedown']) {
    window.document['onmousedown'] = _ivEventOnMouseDownOutside;
    _ivEventOnMouseDownOutsideList = new Array();
  }
  _ivEventOnMouseDownOutsideList.push( [sender, func] );
}

function ivEventRegister(sender, eventName, func) {
  if (eventName == 'onescape') {
    _ivEventRegisterOnEscape(sender, func);
  } else if (eventName == 'onload') {
    _ivEventRegisterOnLoad(sender, eventName, func);
  } else if (eventName == 'onmousedownoutside') {
    _ivEventRegisterOnMouseDownOutside(sender, eventName, func);
  }
}

function ivEventUnRegister(sender, eventName) {
  _ivEventInitOnKeyPress();
  for (var i=0; i<_ivEventOnEscapeList.length; i++) {
    var item = _ivEventOnEscapeList[i];
    if (item[0] == sender) { //  && item[1] == eventName
      _ivEventOnEscapeList.splice(i, 1);
    }
  }

  if (!_ivEventOnEscapeList.length) {
    window.document['onkeypress'] = null;
  }
}

 
