// Copyright 1998-2006 XCENT - Common JavaScript Library
gsCommonLibVersion = '1.0.3';
giHelpWindowWidth = 450;
giHelpWindowHeight = 450;
glMouseX = 50; //Default mouse position
glMouseY = 50;

gbBrowserIE = false;
gbBrowserNS = false;
gsBrowserVersion = null;
gsBroswerUserAgent = navigator.userAgent;
if ((i = gsBroswerUserAgent.indexOf('MSIE')) >= 0) {
    gbBrowserIE = true;
    gsBrowserVersion = parseFloat(gsBroswerUserAgent.substr(i + 'MSIE'.length));
}
if ((i = gsBroswerUserAgent.indexOf('Netscape6/')) >= 0) {
    gbBrowserNS = true;
    gsBrowserVersion = parseFloat(gsBroswerUserAgent.substr(i + 'Netscape6/'.length));
}

var gobjDragger = new Object();
gobjDragger.zIndex = 0;



function xcShowHelp( psFile ) {
    window.open('' + psFile,'ShowHelp','toolbar=0,width=' + giHelpWindowWidth + ',height=' + giHelpWindowHeight + ',resizable=yes,scrollbars=yes');
}

function ShowPreviewPopUp( psFile ) {
    if (psFile.length > 0) {
        window.open('AUCPreviewLinkImage.asp?IMG=' + escape(psFile),'ImagePreview','toolbar=0,width=' + giHelpWindowWidth + ',height=' + giHelpWindowHeight + ',resizable=yes,scrollbars=yes');
    }
}


function xcShowUserImage( psSystem, psFile, psTitle ) { 
    if (psFile.length > 0) { 
        window.open(psSystem + 'ShowUserImage.asp?IMG=' + escape(psFile) + '&TITLE=' + escape(psTitle),'ImagePreview','toolbar=0,width=' + giHelpWindowWidth + ',height=' + giHelpWindowHeight + ',resizable=yes,scrollbars=yes');
        } 
} 

function xcGetCurrentMousePosition(pEvent) {
    if (pEvent) { var oEvent = pEvent } else { var oEvent = window.event };
    if (oEvent.clientX || oEvent.clientY) {
 	    glMouseX = oEvent.clientX;
 	    glMouseY = oEvent.clientY;
        glMouseX = oEvent.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        glMouseY = oEvent.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    } else if (oEvent.clientX || oEvent.clientY) {
        glMouseX = oEvent.clientX + window.scrollX;
        glMouseY = oEvent.clientY + window.scrollY;
 	} else if (oEvent.pageX || oEvent.pageY) {
 	    glMouseX = oEvent.pageX;
 	    glMouseY = oEvent.pageY;
 	}
}


function xcDialogShowItem(psDialogIDname){
    //alert('xcDialogShowItem(' + psDialogIDname + ',' + pbCloseAll + ')' );
 	//if (pbCloseAll) xcDialogCloseAll();
 	xcGetCurrentMousePosition(window.event);
 	
    var oDialog = document.getElementById(psDialogIDname);
    if (oDialog) {
        oDialog.style.position = 'absolute';
        lPositionX = glMouseX;
        lPositionY = glMouseY;
        //if (lPositionX > ScreenWidth-oDialog.style.width) lPositionX = ScreenWidth-oDialog.style.width;
        //if (lPositionY > ScreenHeight-oDialog.style.height) lPositionY = ScreenHeight-oDialog.style.height;
        oDialog.style.left = lPositionX;
        oDialog.style.top = lPositionY;
        oDialog.style.visibility = "visible";
        oDialog.style.zIndex = ++oDialog.style.zIndex;
    }
}

//function to close all open dialogs
function xcDialogCloseAll(psDialogBoxClass){
    //alert('xcDialogCloseAll(' + psDialogBoxClass + ')');
    if (document.all) {
		var objDivsCollection = document.all.tags("DIV");
		for(x=0;x<objDivsCollection.length;x++) {
			if (objDivsCollection[x].className==psDialogBoxClass) { objDivsCollection[x].style.visibility = "hidden"; }
		}
    }
}

//function to close a specific dialog
function xcDialogCloseItem(psDialogIDname){
    var oDialog = document.getElementById(psDialogIDname);
    if (oDialog) {
        oDialog.style.visibility = "hidden";
    }
}



//function to allow user to drag an element around the page
function xcDialogDragStart(event, psDialogIDName) {
    //if element ID specified
    if (psDialogIDName) {  
        gobjDragger.ElementNode = document.getElementById(psDialogIDName);
    } else {
        //otherwise try to detect calling element
        if (window.event.srcElement) {
            gobjDragger.ElementNode = window.event.srcElement;
        } else if (event.target) {
            gobjDragger.ElementNode = event.target;
        }
        // If element is a text node, use its parent element.
        if (gobjDragger.ElementNode.nodeType == 3)
            gobjDragger.ElementNode = objDragger.ElementNode.parentNode;
    }
    
    xcGetCurrentMousePosition(event);
    //alert('mouse:' + glMouseX + ',' + glMouseY);
    
    //if we got a valid element reference
    if (gobjDragger.ElementNode) {
        //window.status = 'x:' + glMouseX + ' y:' + glMouseY;
        //window.status = 'x:' + gobjDragger.ElementNode.style.left + ' y:' + gobjDragger.ElementNode.style.top;
        gobjDragger.DragStartedMouseX = glMouseX; //save mouse starting position
        gobjDragger.DragStartedMouseY = glMouseY;
        gobjDragger.DragStartedElementX = parseInt(gobjDragger.ElementNode.style.left, 10); //save element starting position
        gobjDragger.DragStartedElementY = parseInt(gobjDragger.ElementNode.style.top, 10);
        if (isNaN(gobjDragger.DragStartedElementX)) gobjDragger.DragStartedElementX = 0; //if element position NaN, set to valid numeric value
        if (isNaN(gobjDragger.DragStartedElementY)) gobjDragger.DragStartedElementY  = 0;
        gobjDragger.ElementNode.style.zIndex = ++gobjDragger.zIndex; //increment zIndex to make sure item in front
        
        //setup mouse events for dragging
        if (document.attachEvent) {
            document.attachEvent("onmousemove", xcDialogDragMove);
            document.attachEvent("onmouseup", xcDialogDragStop);
            window.event.cancelBubble = true;
            window.event.returnValue = false;
        } else if (document.addEventListener) {
            document.addEventListener("mousemove", xcDialogDragMove, true);
            document.addEventListener("mouseup", xcDialogDragStop, true);
            event.preventDefault();
        }
    }
}

//setup from xcDialogDragStart and internally called from attached event handler
function xcDialogDragMove(event) {
    xcGetCurrentMousePosition(event);
    //window.status = 'x:' + gobjDragger.DragStartedElementX + ' y:' + gobjDragger.DragStartedElementY;
    //window.status = 'x:' + gobjDragger.DragStartedMouseX + ' y:' + gobjDragger.DragStartedMouseY;
    iNewX = gobjDragger.DragStartedElementX + glMouseX - gobjDragger.DragStartedMouseX;
    iNewY = gobjDragger.DragStartedElementY  + glMouseY - gobjDragger.DragStartedMouseY;
    
    gobjDragger.ElementNode.style.left = iNewX + "px";
    gobjDragger.ElementNode.style.top  = iNewY + "px";
    if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    } else if (event.preventDefault) {
        event.preventDefault();
    }
}

//setup from xcDialogDragStart and internally called from attached event handler
function xcDialogDragStop(event) {
    if (document.detachEvent) {
        document.detachEvent("onmousemove", xcDialogDragMove);
        document.detachEvent("onmouseup",   xcDialogDragStop);
    } else if (document.removeEventListener) {
        document.removeEventListener("mousemove", xcDialogDragMove,   true);
        document.removeEventListener("mouseup",   xcDialogDragStop, true);
    }
}


function xcGetURLParameterValue(psURL, psParameter) {
    var sData = '';
    var sTemp;
    var iTokenIndex;
    var iValueIndex;
    var iValueTermIndex;
    if (psURL.indexOf('?') < psURL.indexOf('&') || psURL.indexOf('?')==-1 || psURL.indexOf('&')==-1) {
        iTokenIndex = psURL.toUpperCase().indexOf(psParameter.toUpperCase() );
        if (iTokenIndex>=0) {
            iValueIndex = iTokenIndex + psParameter.length + 1;
            if (iValueIndex<psURL.length) {
                sTemp = psURL.substring(iValueIndex, psURL.length) + '&';
                iValueTermIndex = sTemp.indexOf('&');
                //alert(psParameter + '\npsURL.length:' + psURL.length + '\niTokenIndex:' + iTokenIndex + '\niValueIndex:' + iValueIndex + '\niValueTermIndex:' + iValueTermIndex + '\nsTemp:' + sTemp);
                if (iValueTermIndex>0) {
                    sData = sTemp.substring(0, iValueTermIndex);
                }
            }
        }
    }
    return sData;
}


function xcGetRandomChars(plNumberOfChars, plType) {
    //Return set of randomized characters with following parameters:
    //plNumberOfChars - number of characters to return
    //plType - 0=nonword-alphanumeric / 1=alphanumeric / 2=alpha only / 3=numeric only
    var sData = '';
    
    switch(plType) {
        case 1: //alphanumeric
            var sCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
            break;
        case 2: //alpha
            var sCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            break;
        case 3: //numeric
            var sCharacters = '1234567890';
            break;
        default: //nonword-alphanumeric
            var sCharacters = 'BCDFGHJKLMNPQRSTVWXZ23456789';
            break;
    }
    
    if (isNaN(plNumberOfChars) || (plNumberOfChars<1)) {
        var lCountDown = 1;
    } else {
        var lCountDown = plNumberOfChars;
    }
    
    var lIndex = 0;
    while (lCountDown>0) {
        lIndex = Math.floor(Math.random() * sCharacters.length) + 0;
        sData = sData + sCharacters.charAt(lIndex);
        lCountDown--;
    }
    
    return sData;
}



// function xcGetXmlHttpRequestObject(pbSetMimeTypeXml) {
    ////Return a valid XmlHttpRequest object regardless of browser
    ////usually call with pbSetMimeTypeXml=true
    // var objRequestObject = false;
    // var bObjectValid = false;
    
    // if (window.XMLHttpRequest) { //Attempting to use native XmlHttpRequest object - most modern browsers
        // objRequestObject = new XMLHttpRequest();
        // if (pbSetMimeTypeXml && objRequestObject.overrideMimeType) { //IE7 no like this! So only attempt if property avail
            // objRequestObject.overrideMimeType('text/xml'); 
        // }
        // bObjectValid = true;
    // }
    
    // if (!bObjectValid && window.ActiveXObject) { //Attempting to use ActiveX version in older MS browsers
        // objRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); // or "Msxml2.XMLHTTP" ???
        // bObjectValid = true;
    // }
    
    // if (bObjectValid) {
        // return objRequestObject;
    // } else {
        // return false;
    // }
// }

function xcGetXmlHttpRequestObject() {
	var xmlHttp = null;
	
	try {
		/* Firefox, Opera, Safari. */
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		/* IE. */
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	return xmlHttp;
}


function xcFBool(pvValue) {
    //Force passed value to evaluate to a boolean
    var bStatus = false;
    var sTemp;
    sTemp = (pvValue + '').toUpperCase();
    switch(sTemp) {
        case 'Y':
        case 'YES':
        case 'T':
        case 'TRUE':
        case '-1':
        case '1':
            bStatus = true;
            break;
        case 'N':
        case 'NO':
        case 'F':
        case 'FALSE':
        case '0':
            bStatus = false;
            break;
        default:
            bStatus = Boolean(pvValue);
            break;
    };
    return bStatus;
};


//To use this, must have embedded the following to work in MSIE browsers
//<bgsound src="xcCommonFiles/nobeep.wav" id="xcBeeper" autostart="true" />
function xcDoBeep() {
    if (navigator.appName.toUpperCase()!='MICROSOFT INTERNET EXPLORER') {
        if (java.awt.Toolkit) {
            java.awt.Toolkit.getDefaultToolkit().beep();
        } else {
            //alert('non-IE browser, now what? Gotta beep!');
        }
    } else {
        if (document.all.xcBeeper) {
            document.all.xcBeeper.src='xcCommonFiles/dobeep.wav';
        }
    }
}

