﻿// ##################################################
// #                                                #
// #    Author  : Stuart Dodd BSc                   #
// #    Created : 18/08/2008                        #
// #    Purpose : To Provide wrappers to            #
// #              AJAX functionality                #
// #                                                #
// ##################################################

var grequest;
var gBrowser = navigator.userAgent;
var imgLoaded = false;
var gisIE = (gBrowser.indexOf("MSIE") > 0);

function createXMLHttpRequest() {
    var request = false;

    if (window.XMLHttpRequest) {
        if (typeof (XMLHttpRequest) != 'undefined') {
            try {
                request = new XMLHttpRequest();
            } catch (e) {
                request = false;
            }
        }
    } else if (window.ActiveXObject && request == false) {
        try {
            request = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e) {
            try {
                request = new ActiveXObject('msxml.XMLHTTP');
            } catch (e) {
                request = false ;
            }
        }
    }
    if (!request) { alert("No Request Object"); }
    return request;
}

function sendAJAXrequest(request, str_request, returnFunction) {
    var docPlace = document.getElementById("derivedjobs");
    var msg = "Error Creating XML Object";
    if (request) {
        request.open('GET', str_request, true);
        request.onreadystatechange = returnFunction;
        request.send('');
    } else {
        docPlace.innerHTML = msg + "<br>Status: " + grequest.status + "<br>" + grequest.statusText;
    }
}


function getPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

function displayFullImg(imgTag, evt) {
    var thumbDisp = document.getElementById("thumbDisp");
    var imgNode = document.createElement("img");
    var isIE = (gBrowser.indexOf("MSIE") > 0);
    var cursor = getPosition(evt);
    if (imgLoaded) { return; }
    //Display the image and pin to the cursor
    thumbDisp.style.position = "absolute";
    thumbDisp.style.display = "block";
    thumbDisp.style.top = cursor.y;
    thumbDisp.style.left = cursor.x+25;
    //build the img tag
    imgNode.src = imgTag.src;
    thumbDisp.appendChild(imgNode);
    imgLoaded = true;
}

function moveFullImg(evt) {
    var thumbDisp = document.getElementById("thumbDisp");
    var cursor = getPosition(evt);
    thumbDisp.style.top = cursor.y;
    thumbDisp.style.left = cursor.x+25;
}

function hideFullImg(imgTag) {
    var thumbDisp = document.getElementById("thumbDisp");
    var curNode = thumbDisp.firstChild;
    thumbDisp.removeChild(curNode);
    thumbDisp.style.display = "none";
    imgLoaded = false;
}

/*
Prefix-correcting evaluate statement from http://www.faqts.com/knowledge_base/view.phtml/aid/34022/fid/119
*/

if( document.implementation.hasFeature("XPath", "3.0") ){
 XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
  if( !xNode ) {
   xNode = this;
  }
    
  var defaultNS = this.defaultNS;

  var aItems = this.evaluate(cXPathString, xNode,{
   normalResolver:
    this.createNSResolver(this.documentElement),
        lookupNamespaceURI : function (prefix) {
           switch (prefix) {
             case "dflt":
                return defaultNS;
             default:
                return this.normalResolver.lookupNamespaceURI(prefix);
           }
        }
      },XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

  var aResult = [];
  for( var i = 0; i < aItems.snapshotLength; i++){
           aResult[i] =  aItems.snapshotItem(i);
  }
  return aResult;
 }

 Element.prototype.selectNodes = function(cXPathString){
  if(this.ownerDocument.selectNodes){
   return this.ownerDocument.selectNodes(cXPathString, this);
  }else{
   throw "For XML Elements Only";
  }
 }

 /* set the SelectionNamespaces property the same for NN or IE: */
 XMLDocument.prototype.setProperty = function(p,v){
  if(p=="SelectionNamespaces" && v.indexOf("xmlns:dflt")==0){
   this.defaultNS = v.replace(/^.*=\'(.+)\'/,"$1");
  }
 }

 XMLDocument.prototype.defaultNS;

}