//////////////////////////////////////////////////
// XMLHttp Functions/Objects
//////////////////////////////////////////////////
function getXMLHttp() {
  var XMLHttp;
  try {    
    XMLHttp = new XMLHttpRequest(); // firefox, opera, safari
  } catch(e) { 
    try {
      XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); // ie 5.5+
    } catch(e) {
      try {
        XMLHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); // ie 6.0+
      } catch (e) {
        return false;
      }
    }
  }
  return XMLHttp;
}

 /* Post to a URL using XMLHttp object
 * @param {String} url          - The url to post to
 * @param {String} queryString  - Parameters to send to the url
 * @param {Object} callback     - A callback object that must have at least one method: handleSuccess.
 *                                This method accepts the response XML and processes it accordingly
 * @param {String} method       - Override the send method (i.e. 'GET','PUT'...);
 * @param {Boolean} nocache     - Make the url unique for every request to prevent caching
 */
function XMLHttpPost(url, queryString, callback, method, nocache) {
  var XMLHttp = getXMLHttp();
  url += queryString;
  if(!method) {
    method = 'POST';
  }
  if(nocache) {
    date = new Date();
    date.getTime();
    url += "?nocache="+(date.getUTCMilliseconds()*date.getUTCSeconds()*date.getUTCMinutes()*date.getUTCHours()*date.getUTCFullYear());        
  }

   XMLHttp.open(method, url, true);
      XMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      XMLHttp.onreadystatechange = function() {
        if (XMLHttp.readyState == 4) {
          return callback.handleSuccess(XMLHttp.responseXML);
        }      
      }
   XMLHttp.send(null);
}

function XMLHttpGet(url, queryString, callback, nocache) {
  XMLHttpPost(url, queryString, callback, 'GET', nocache);
}

//////////////////////////////////////////////////
// Miscellaneous
//////////////////////////////////////////////////

/**
 * Use this function to indicate that the page is loading something
 */
function loading(state) {
  if(document.getElementById("page-loading") && !state) {
    document.body.removeChild(document.getElementById("page-loading"));
  } else if(state) {
    var layer = document.createElement("div");
    layer.id = "page-loading";
    layer.style.height = (getViewportHeight() > getDocHeight()) ? getViewportHeight() + "px" : getDocHeight() + "px";
    layer.style.backgroundPosition = "center " + (((getViewportHeight()-100)/2) + getScrollHeight()) + "px";
    document.body.appendChild(layer);
  }
}

//////////////////////////////////////////////////
// Page dimension functions
//////////////////////////////////////////////////
function getScrollWidth() {
  var w = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
  return w ? w : 0;
}

function getScrollHeight() {
  var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
  return h ? h : 0;
}

function getDocWidth() {
  return (document.width !== undefined) ? document.width : document.body.offsetWidth;
}

function getDocHeight() {
  if(window.innerHeight && window.scrollMaxY) {
    return window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
    return document.body.scrollHeight;
  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    return document.body.offsetHeight;
  }
}

function getViewportWidth() {
  return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
}

function getViewportHeight() {
  return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
}

function set_lock_status(element, domainname, registrykey) {
  var XMLHttp = getXMLHttp(); loading(true);
  var operation = (element.innerHTML == "Locked") ? "NO-LOCK" : "CUSTOMER-LOCK";
  var img = element.parentNode.getElementsByTagName("img")[0];
  var date = new Date();
  
  if(XMLHttp) {
    XMLHttp.onreadystatechange = function() {
      if(XMLHttp.readyState == 4) { // request is complete
        var response = XMLHttp.responseText; loading(false);
        if(trim(response) == "true") {
          if(element.innerHTML == "Locked") {
            element.innerHTML = "Unlocked";
            element.title="Lock Domain"
            img.className = "unlocked";
            img.title = "Unlocked";
            img.src = "/gfx/listitem/open_bullet.gif";            
          } else {
            element.innerHTML = "Locked";
            element.title="Unlock Domain"
            img.className = "locked";
            img.title = "Locked";
            img.src = "/gfx/listitem/lock_bullet.gif";
          }
          if(document.getElementById("action-result")) {
            document.getElementById("action-result").innerHTML = "Success: " + domainname + " is now " + element.innerHTML;
          }
        } else {
          alert("Sorry, AJAX function failed. " + response);
        }
      }
    }
    XMLHttp.open("GET", "/cc/ajax/lockdomain?operation=" + operation + "&domainname=" + domainname + "&registrykey=" + registrykey + "&timestamp=" + date.getUTCMilliseconds(), true);
    XMLHttp.send(null);
  } else {
    alert("Sorry, AJAX function failed");
  }
}

function set_pr_status(element, domainname) {
  var XMLHttp = getXMLHttp(); loading(true);
  var operation = (element.innerHTML == "Active") ? "Active" : "Suspend";
  //var img = element.parentNode.getElementsByTagName("img")[0];
  var date = new Date();
  
  if(XMLHttp) {
    XMLHttp.onreadystatechange = function() {
      if(XMLHttp.readyState == 4) { // request is complete
        var response = XMLHttp.responseText; loading(false);
        if(trim(response) == "true") {
          if(element.innerHTML == "Active") {
            element.innerHTML = "Suspended";
            element.title="Activate Private Registration"
          } else {
            element.innerHTML = "Active";
            element.title="Suspend Private Registration"
          }
          if(document.getElementById("action-result")) {
            document.getElementById("action-result").innerHTML = "Success: " + domainname + " is now " + element.innerHTML;
          }
        } else {
          alert("Sorry, AJAX function failed. " + response);
        }
      }
    }
    XMLHttp.open("GET", "/cc/ajax/suspendpr?operation=" + operation + "&domainname=" + domainname + "&timestamp=" + date.getUTCMilliseconds(), true);
    XMLHttp.send(null);
  } else {
    alert("Sorry, AJAX function failed");
  }
}

function deleteElement(element) {if(element) {var par = element.parentNode; par.removeChild(element);}}
function trim(str) { return str.replace(/^\s*|\s*$/g,""); }
function close_lightbox() {
  
  setTimeout('fade_element(document.getElementById("lightbox"), 100, 0, close_lightbox)', 2000);
}
 
function remove_lightbox() {
  element = document.getElementById('lightbox');
  element.style.display ='none'; 
  element.style.opacity = 1;
  element.style.filter = 'alpha(opacity=100)';
  document.body.removeChild(document.getElementById('body_bkg'));
  return false;
}

function display_lightbox(lightbox, state, movable) {  
  var body_bkg = document.createElement('div'); body_bkg.id = 'body_bkg';
  var lightbox_shadow_top = document.createElement('div'); lightbox_shadow_top.id = 'lightbox_shadow_top';
  var lightbox_shadow_left = document.createElement('div'); lightbox_shadow_left.id = 'lightbox_shadow_left';
  var lightbox_shadow_right = document.createElement('div'); lightbox_shadow_right.id = 'lightbox_shadow_right';
  var lightbox_shadow_bottom = document.createElement('div'); lightbox_shadow_bottom.id = 'lightbox_shadow_bottom';
  
  body_bkg.style.height = getDocHeight() + "px";
  if(!document.getElementById('btn_close')) {
    lightbox.innerHTML = '<a href="#" onclick="return remove_lightbox();" id="btn_close"><img src="/gfx/ajax/tab-close.gif" onmouseover="this.src = \'/gfx/ajax/tab-close-over.gif\';" onmouseout="this.src = \'/gfx/ajax/tab-close.gif\';" title="Close"/></a>' + lightbox.innerHTML;  
  }
  lightbox.style.left = (((getViewportWidth()-466)/2) + getScrollWidth()) + "px";
  lightbox.style.top = (((getViewportHeight()-300)/2) + getScrollHeight()) + "px";
  
  document.body.appendChild(body_bkg);

  lightbox.style.display = 'block'; 
  lightbox_shadow_left.style.height = lightbox.offsetHeight + "px";
  lightbox_shadow_right.style.height = lightbox.offsetHeight + "px";
    
  lightbox.appendChild(lightbox_shadow_top);
  lightbox.appendChild(lightbox_shadow_left);
  lightbox.appendChild(lightbox_shadow_right);
  lightbox.appendChild(lightbox_shadow_bottom);
  
  if(movable) {
    var dragable = DragHandler.attach(document.getElementById('lightbox'));
  } else {
    lightbox.style.cursor = 'default';
  }
  
  if(state == 'fade') {
    add_event(lightbox, 'mouseover', fade_stop_lightbox);
    setTimeout('fade_element(document.getElementById("lightbox"), 100, 0, remove_lightbox)', 2000);
  }
  return true;
}

function fade_element(element, from, to, onclose) {
  var body_bkg = document.getElementById('body_bkg');

  if(from == to) {
    onclose();
  } else if(element.className == 'over') {
    element.style.opacity = 1;
    element.style.filter = 'alpha(opacity=100)';
    body_bkg.style.opacity = 0.6;
    body_bkg.style.filter = 'alpha(opacity=60)';
    return true;
  } else {
    var opacity = (from > to) ? from - 4 : from + 4;
    element.style.opacity = opacity / 100;
    element.style.filter = 'alpha(opacity=' + opacity + ')';
    if(opacity < 60) {
      body_bkg.style.opacity = opacity / 100;
      body_bkg.style.filter = 'alpha(opacity=' + opacity + ')';    
    }
    setTimeout('fade_element(document.getElementById("'+element.id+'"), ' + opacity + ', ' + to + ', ' + onclose + ')', 10);
  }
}

function fade_stop_lightbox() { document.getElementById("lightbox").className = "over"; }

// Crossbrowser Drag Handler | http://www.webtoolkit.info/

var DragHandler = {
  _oElem : null,
  
  attach : function(oElem) {
    oElem.onmousedown = DragHandler._dragBegin;
    oElem.dragBegin = new Function();
    oElem.drag = new Function();
    oElem.dragEnd = new Function();
    return oElem;
  },

  _dragBegin : function(e) {
    var oElem = DragHandler._oElem = this;
    if (isNaN(parseInt(oElem.style.left))) { oElem.style.left = '0px'; }
    if (isNaN(parseInt(oElem.style.top))) { oElem.style.top = '0px'; }
    var x = parseInt(oElem.style.left);
    var y = parseInt(oElem.style.top);
    e = e ? e : window.event;
    oElem.mouseX = e.clientX;
    oElem.mouseY = e.clientY;
    oElem.dragBegin(oElem, x, y);
    document.onmousemove = DragHandler._drag;
    document.onmouseup = DragHandler._dragEnd;
    return false;
  },
  
  _drag : function(e) {
    var oElem = DragHandler._oElem;
    var x = parseInt(oElem.style.left);
    var y = parseInt(oElem.style.top);
    e = e ? e : window.event;
    oElem.style.left = x + (e.clientX - oElem.mouseX) + 'px';
    oElem.style.top = y + (e.clientY - oElem.mouseY) + 'px';
    oElem.mouseX = e.clientX;
    oElem.mouseY = e.clientY;
    oElem.drag(oElem, x, y);
    return false;
  },
  
  _dragEnd : function() {
    var oElem = DragHandler._oElem;
    var x = parseInt(oElem.style.left);
    var y = parseInt(oElem.style.top);
    oElem.dragEnd(oElem, x, y);
    document.onmousemove = null;
    document.onmouseup = null;
    DragHandler._oElem = null;
  }

}
// add an event to an object

function add_event(object, event_type, func) { 
  if(object.addEventListener){ 
    object.addEventListener(event_type, func, false); 
    return true;
  } else if(object.attachEvent){ 
    var r = object.attachEvent("on"+event_type, func); 
    return r;
  } else { 
    return false; 
  }
}