// set the browser type
var appName = navigator.appName;
var appVersion = navigator.appVersion;
var isMac = (appVersion.indexOf("Macintosh") > -1) ? true : false;
var isIE  = (appName.indexOf("Internet Explorer") > -1) ? true : false;
var isNS  = (appName.indexOf('Netscape') > -1) ? true : false;
var isDOM = (document.getElementById) ? true : false;
var isIE6 = false; var isIE5 = false; var isIE4 = false; 
var isNS6 = false; var isNS4 = false; var isUnk = false;
if (isIE) {
    isIE6 = (appVersion.indexOf('MSIE 6') > -1) ? true : false;
    isIE5 = (appVersion.indexOf('MSIE 5') > -1) ? true : false;
    isIE4 = (appVersion.indexOf('MSIE 4') > -1) ? true : false;
} else if (isNS) {
    isNS6 = (appVersion.match(/^5\./)) ? true :false;
    isNS4 = (appVersion.match(/^4\./)) ? true :false;
} else {
    isUnk = true;
}

var onloadScriptArray = new Array();

function ExecuteOnload() {
    var a = onloadScriptArray;
    for (var i=0; i<a.length; i++)
        eval(a[i]);
    return true;
}

window.onload = ExecuteOnload;

function SetOnloadScript(s) {
    var a = onloadScriptArray;
    a[a.length] = s;
    return true;
}

// The capitalization of the original function drives me crazy.
function setOnLoadScript(s) {
    return SetOnloadScript(s);
}


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function getElementLeft(element) {
    var left = element.offsetLeft;
    while(element.offsetParent) {
        element = element.offsetParent;
        if (element.nodeName == "TABLE") {
            var border = element.getAttribute("border");
            // NS6 seems to ignore the border width when calculating.  Lame.
            if ((isNS6) && (border > 0))
                left = left + parseInt(border);
        }
        if (element.offsetLeft)
            left = left + element.offsetLeft;
    }
    return left;
}

function getElementTop(element) {
    var top = element.offsetTop;
    while(element.offsetParent) {
        element = element.offsetParent;
        if (element.nodeName == "TABLE") {
            var border = element.getAttribute("border");
            // NS6 seems to ignore the border width when calculating.  Lame.
            if ((isNS6) && (border > 0))
                top = top + parseInt(border);
        }
        if (element.offsetTop)
            top = top + element.offsetTop;        

    }
    return top;
}

function getImageLeft(img) {
    var x;
    if (isNS4)
        x = img.x
    else
        x = getElementLeft(img);
    return parseInt(x);
}

function getImageTop(img) {
    var y;
    if (isNS4)
        y = img.y
    else
        y = getElementTop(img);
    return parseInt(y);
}

function getEventObject(mozEventObject) {
    if (isNS6)
        return mozEventObject;
    else
        return event;
}

function getEventTarget(eventObject, attrName, attrValue) {
    // IE always returns the /target/, which can be any child of the real target
    // which , in DOM terms, is the currentTarget.  So the 2nd and 3rd arguments
    // for this funciton provide a way to get the correct target by ensuring
    // that the returned object matches the attrName and attrValue specs.
    if (isNS6) {
        return eventObject.currentTarget;
    } else {
        var target = eventObject.srcElement
        if (attrName && attrValue) {
            while (target[attrName] != attrValue) {
                target = target.parentNode;
            }
        } else {
            return target;
        }
        return target;
    }
}



var CheckFormAuxTests = new Array();

function CheckFormForChanges(url) {
    var msg = "You have made changes to this form.  Discard Changes?";
    var result = true;
    var changed = false;
    for (var i=0; (!changed && (i<CheckFormAuxTests.length)); i++)
        changed = eval(CheckFormAuxTests[i]);
        
    var d = document;
    for (var i=0; (!changed && (i<d.forms.length)); i++) {
        var f = d.forms[i];
        changed = IsFormChanged(f);
    }
    if (changed)
        result = confirm(msg);
        
    if (result && url)
        window.location = url;
            
    return result;
}




