var req;
var ie = /MSIE/.test(navigator.userAgent);
var ie7 = /MSIE 7.0/.test(navigator.userAgent);
var moz = !ie && navigator.product == "Gecko";
var _blocked=false;
var ctrl=false;
var alt=false;
var shift=false;
var _waitScreenDelay = 500;
var _ajaxProcessing = false;
var timerid=0;

function emulateHTMLModel() {
      HTMLElement.prototype.__defineSetter__("outerHTML", function (html) {
         var range = this.ownerDocument.createRange();
         range.setStartBefore(this);
         var fragment = range.createContextualFragment(html);
         this.parentNode.replaceChild(fragment, this);
         return html;
      });
  }

  function emulateAttachEvent() {
      window.attachEvent = function(type, func) {
          if (type.substring(0, 2) == "on") {
              type = type.substring(2);
          }
          window.addEventListener(type, func, false);
      }
  }

  function doUnload() {
     //callAjax(null,'page','unload','');
  }

  function clearkey() {
    shift=false;
    alt=false;
    ctrl=false;
  }

  function keydown(evt) {
    shift=evt.shiftKey;
    alt=evt.altKey;
    ctrl=evt.ctrlKey;
  }

  if(window.addEventListener) {
      document.addEventListener('onkeydown',keydown,true);
      document.addEventListener('onkeyup',clearkey,true);
    //  window.addEventListener('unload',doUnload,false);
  } else {
      document.attachEvent('onkeydown',keydown,true);
      document.attachEvent('onkeyup',clearkey,true);
      //window.attachEvent('onunload',doUnload);
  }

function processMessage() {
  if (req.readyState == 4) {
          var dstDoc = document;    // the instance invoked by req has no reference to this.dstDoc anymore...
          if (req.status == 200) {
               //alert(req.responseText);
             var rootElem = req.responseXML.getElementsByTagName("ajax-response")[0];
             if(rootElem) {   
              for (var i = 0; i < rootElem.childNodes.length; i++) {
                var node = rootElem.childNodes[i];
                //alert(node.nodeName);
                if(node.nodeName=="reload") {
                  var loc=node.getAttribute("location");
                    document.location=loc;
                } else if(node.nodeName=="content") {
                    var nodeid = "c_" + node.getAttribute("id");
                    var ctrlObject = dstDoc.getElementById(nodeid);
                    if(ctrlObject!=null) {
                     updateContent(ctrlObject,node.childNodes[0].nodeValue);
                    }
                } else if(node.nodeName=="popup" ) {
                   var action =  node.getAttribute("action");
                   if(action=="display") {
                     blockClicks(dstDoc,false);
                     //displayPopup(node.childNodes[0].nodeValue);
                       displayPopup('');
                   } else {
                       closePopup();
                   }
                }
              }
             }
          } else {
            alert('Error with request');
          }
           if (_blocked) {
                 ajaxRemoveBlockClicks();
             }
          _ajaxProcessing = false;
  }
  window.status="Page Updated";
}

function updateContent(ctrl,html) { 
  ctrl.innerHTML=html;
}

function openWindow(url) {
  window.open(url);
}

function displayPopup(html) {
   var popup=document.getElementById("c_popuppanel");
   popup.innerHTML=html;
   popup.style.display="block";
}

function closePopup() {
   var popup=document.getElementById("popup");
   popup.style.display="none";
   var cover=document.getElementById("popupcover");
   cover.display="none";
   popup.innerHTML="";
}

function ajaxSend() {
  window.status = "Sending Request to Server...";
  if (window.XMLHttpRequest) {
      req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
      try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
          // ajax not supported
          log("Can't create XMLHttpRequest object. Using default processing");
          _ajaxProcessing = false;
          dstDoc.forms['ajaxForm'].submit();
          //blockClicks(dstDoc, false);
          return;
      }
  }
  //var form=document.location.href;
  _ajaxProcessing = true
   var form=document.location.href;
  //var form="advsearch.jsp";
//  var idx = form.indexOf("#");
//  alert('f2:'+idx);
//  if (idx != -1) {
//        // remove existing # and the rest of it
//        form = form.substring(0, idx);
//  }
  var content = createContent(window.document);
      content += "ajax=1";
  //alert(content);
  req.open("POST", form, true);
  req.onreadystatechange = processMessage;
  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  req.send(content);
  window.status = "Waiting for Server...";
}

function createContent(dstDoc) {

      var content = "";
      var logElem = false;

      // build content out of all fields on the form.
      for (var i = 0; i < dstDoc.forms['ajaxForm'].elements.length; i++) {
          var element = dstDoc.forms['ajaxForm'].elements[i];
          if (element.type == "file" && element.value != "") {
              // if a file-upload control is on the page that has a file assigned,
              // a real submit is required to transfer the file to the server.
              // make sure that the encoding type is multipart, before the data is submitted.
              dstDoc.forms['ajaxForm'].encoding = 'multipart/form-data';
              dstDoc.forms['ajaxForm'].submit();
              //blockClicks(dstDoc, false);
              return;	// exit!

          } else if (element.type == "select-multiple") {
              for (var x = 0; x < element.length; x++) {
                  if (element.options[x].selected) {
                      content += element.name + "=" + escape(element.options[x].value) + "&";
                      if (logElem) {
                          logElem.value = logElem.value + element.name + "=" + element.options[x].value + "\n";
                      }
                  }
              }
          } else if (element.name != "" && (element.type != "radio" || element.checked)) {
              content += element.name + "=" + escape(element.value) + "&";
              if (logElem) {
                  if (element.name != "_debugLog" &&
                      element.name != "_sendContent" &&
                      element.name != "_ajaxMessage") {
                      logElem.value = logElem.value + element.name + "=" + element.value + "\n";
                  }
              }
             }
      }
      return content;
  }


  function callWaitAjax(pControl,pAction,pParam,wait) {
      if(timerid!=0) {
         clearTimeout(timerid);
      }
      timerid=window.setTimeout("callAjax('"+pControl+"','"+pAction+"','"+pParam+"')",wait);
  }

  function callAjax(pControl,pAction,pParam) {
    timerid=0;
    var dstDoc = document;
    if (_ajaxProcessing) {
          return;
    }
    dstDoc.forms['ajaxForm'].elements['_action'].value = pAction;
    dstDoc.forms['ajaxForm'].elements['_param'].value = pParam;
    dstDoc.forms['ajaxForm'].elements['_control'].value = pControl;
    //blockClicks(dstDoc, false);
    window.setTimeout("ajaxWaitScreen()", _waitScreenDelay);
    ajaxSend();
  }

    function WindowSize() {
      var myWidth = 0, myHeight = 0, scrollTop, scrollLeft;
      var type;
      if (typeof(window.innerWidth) == 'number') {
          //Non-IE
          myWidth = window.innerWidth;
          myHeight = window.innerHeight;
          scrollLeft = window.pageXOffset;
          scrollTop = window.pageYOffset;
      } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
          //IE 6+ in 'standards compliant mode'
          myWidth = document.documentElement.clientWidth;
          myHeight = document.documentElement.clientHeight;
          scrollLeft = document.documentElement.scrollLeft;
          scrollTop = document.documentElement.scrollTop;
      } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
          //IE 4 compatible
          myWidth = document.body.clientWidth;
          myHeight = document.body.clientHeight;
          scrollLeft = document.body.scrollLeft;
          scrollTop = document.body.scrollTop;
      }
      return [myWidth, myHeight, scrollLeft, scrollTop];
  }

function ajaxWaitScreen() {
     //alert("here:"+_ajaxProcessing);
      if (_ajaxProcessing) {
          blockClicks(document, false);
      }
}

function ajaxRemoveBlockClicks() {
   blockClicks(document, true);
}

function blockClicks(dstDoc, removeBlock) {
      var elem = dstDoc.getElementById("click_blocker");
      _blocked = !removeBlock;
      if (elem) {
          if (!removeBlock) {
              var sysinfoXY = WindowSize();
              var msg = dstDoc.getElementById("click_blocker_message");
              var bodyHeight = (msg ? dstDoc.body.scrollHeight : sysinfoXY[1]) - 5;
              var bodyWidth = (msg ? dstDoc.body.scrollWidth : sysinfoXY[0] ) - 5;
              elem.style.top=0;
              elem.style.height = bodyHeight + 'px';
              elem.style.left = 0;
              elem.style.width = bodyWidth + 'px';
              elem.style.display = 'block';
              //elem.style.backgroundImage='url(none)';
              if (msg) {
                  msg.style.position = "absolute";
                  if (msg.parentNode.align == "right") {
                      // buttom right place
                      msg.style.top = (sysinfoXY[1] + sysinfoXY[3] - parseInt(msg.style.height) - 20) + 'px';
                      msg.style.left = (sysinfoXY[0] + sysinfoXY[2] - parseInt(msg.style.width) - 20) + 'px';
                  } else {
                      // center message
                      msg.style.top = ((sysinfoXY[1] - parseInt(msg.style.height)) / 2 + dstDoc.body.scrollTop - 5) + 'px';
                      msg.style.left = ((sysinfoXY[0] - parseInt(msg.style.width)) / 2 + dstDoc.body.scrollLeft - 5) + 'px';
                  }
              }
          }
          elem.style.visibility = removeBlock ? "hidden" : "visible";


          // disable 'select' elements. This is required since these elements
          // are on top of all other elements, including the 'click-blocker' (in most browsers).

          var elemID = "SELECT";
          var selects = dstDoc.getElementsByTagName(elemID);
          for( i = 0; i < selects.length; i++ ) {
              obj = selects[i];
              if( obj ) {
                  if (removeBlock) {
                      if (typeof obj._bcOldState != 'undefined') {
                          obj.disabled = obj._bcOldState;
                      }
                  } else {
                      obj._bcOldState = obj.disabled;
                      obj.disabled = true;
                  }
              }
          }
      }
  }

function ajaxLoad() {
   callAjax('page','load','','');
}

function checkBox(name) {
  var cbox=document.forms['ajaxForm'].elements['chk_'+name];
  document.forms['ajaxForm'].elements['fld_'+name].value =  cbox.checked ? 'Y':'N'; 
}