var context = window.location.pathname.substring(0, window.location.pathname.indexOf('/jsp/'));
var urlHost = window.location.protocol + "//" + window.location.host + context + '/jsp/WAppServerPage.jsp';
var urlHostJsp = window.location.protocol + "//" + window.location.host + context + '/jsp';

var requiredStr = "<img class=\"Icon\" src=\"../images/Icon.Warning.png\" /> Required";
var successStr = "<span class=\"SuccessMessage\" ><img src=\"../images/Icon.Correct2.gif\" /> Poll Updated</span>";


String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.convertAmpersand = function() {
	return this.replace(/&amp;/g,"&");
}

String.prototype.escapeQuote = function() {
	return this.replace(/"/g,"&quot;");
}

String.prototype.startsWith = function(str) {
	return (this.match("^"+str)==str)
}

String.prototype.endsWith = function(str) {
	return (this.match(str+"$")==str)
}

var cursorXPos;
var cursorYPos;
var screenXPos;
var screenYPos;
var dragObject;
var clickX;
var clickY;
var dropObject;
var dropObjectX;
var dropObjectY;

/*
if (window.Event) {
	document.captureEvents(Event.MOUSEMOVE);
}
*/
document.onmousemove = setCursorXY;
document.onmouseup = mouseUp;

function setCursorXY(e) {

	cursorXPos = (window.Event && e) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	cursorYPos = (window.Event && e) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	screenXPos = (window.Event && e) ? e.clientX : event.clientX;
	screenYPos = (window.Event && e) ? e.clientY : event.clientY;
	if (document.getElementById('XPos')) document.getElementById('XPos').value = cursorXPos;
	if (document.getElementById('YPos')) document.getElementById('YPos').value = cursorYPos; 
	if (dragObject) {
		dragObject.style.left = (dragObject.originalX/1 + (cursorXPos-clickX)) + 'px'; 
		dragObject.style.top = (dragObject.originalY/1 + (cursorYPos-clickY)) + 'px'; 
	}
}

function objMouseUp(sourceObj) {
	return false;	
}

function makeDraggable(item, returnToPos, moveItem){   

	if(!item) return;   
	
	if (moveItem) item.moveItem = moveItem;

	item.onmousedown = function(ev){   
		dragObject = (item.moveItem ? item.moveItem : this);
		dragObject.style.zIndex = 20;
		dragObject.originalX = dragObject.style.left.replace("px", "");
		if (dragObject.originalX == '') dragObject.originalX = 0;
		dragObject.originalY = dragObject.style.top.replace("px", "");
		if (dragObject.originalY == '') dragObject.originalY = 0; 
		clickX = cursorXPos;
		clickY = cursorYPos;
		if (returnToPos) dragObject.returnToPos = returnToPos;
		return false;   
	}   
}   

function makeDropable(item){   

	if(!item) return;   

	item.objDropped = objDropped;  
}   

function mouseUp(e){   

	if (dragObject) {
		dragObject.style.visibility='hidden'; 
		dropObject = document.elementFromPoint(screenXPos, screenYPos);
		dragObject.style.visibility='visible'; 
		
		if (dragObject.returnToPos) {
			dragObject.style.top = dragObject.originalY + 'px'; 
			dragObject.style.left = dragObject.originalX + 'px'; 
		}
		
		var dropped = false;
		do {
			//alert(dropObject.id);
			if (dropObject.objDropped) {
				dropped = dropObject.objDropped(dragObject);
			}
		} while ((dropObject = dropObject.parentNode) && !dropped && dropObject.nodeType != 9)

		
		dragObject = null;   
	}
}   

function getSelectedText() {

	var txt = '';

	if (window.getSelection) {
        txt = window.getSelection();
    }
    else if (document.getSelection) {
        txt = document.getSelection();
    }
    else if (document.selection) {
        txt = document.selection.createRange().text;
    }
    else return '';

    return txt;
}

function getSelectionHTML() {

	var range = window.getSelection().getRangeAt(0);

	var startContainer = range.startContainer;
	
	return range.commonAncestorContainer.innerHTML;
	
	var spanNode = startContainer.ownerDocument.createElement("layer");

	var docfrag = range.extractContents();
	alert(docfrag);
	//spanNode.appendChild(docfrag);

	//range.insertNode(spanNode);

	var html = spanNode.innerHTML;
	
	
}


function getSelectInputOptions(selectArray, selectedValue, addBlank) {

	var html = '';
	if (addBlank) html += '<option value=""></option>\n';
	for (i = 0; i < selectArray.length; i++) {
		var element = selectArray[i];
		var elementValue = element[0];
		var elementLabel = (element.length > 1 ? element[1] : element[0]);
		html += '<option ' + (elementValue == selectedValue ? 'selected="selected"' : '') + 'value="' + elementValue + '">' + elementLabel + '</option>\n';
	}
	return html;
}

function deleteAllInList(selectInput) {
    selectInput.length = 0;
}

function addToList(selectInput, value, label, selectedValue) {

	var num = selectInput.options.length;
	if (selectedValue) {
		selectInput.options[num] = new Option(label, value, false, (selectedValue == value));
	}
	else {
		selectInput.options[num] = new Option(label, value);
	}
}

function addArrayToList(selectInput, array, addBlank, clear, selectedValue) {

	if (clear) deleteAllInList(selectInput)
	if (addBlank) addToList(selectInput, "", "");
	for (i = 0; i < array.length; i++) {
		var element = array[i];
		var elementValue = element[0];
		var elementLabel = (element.length > 1 ? element[1] : element[0]);
		addToList(selectInput, elementValue, elementLabel, selectedValue);
	}
}

function selectOption(obj, text, keyCode) {
    
    if (keyCode == 8) {
        text = text.substring(0, text.length-1);
    }
    else {
        text = text + String.fromCharCode(keyCode);
    }
    
    if (text != '') {
        var select = document.getElementById(obj);
        for (var i=0; i < select.options.length; i++) {
            //alert(select.options[i].value.toUpperCase().substring(0, text.length));
            if (text.toUpperCase() == select.options[i].value.toUpperCase().substring(0, text.length)) {
                select.options[i].selected = true;
                break;
            }
        }
    }
}

function getkey(e) {
    if (window.event)
        return window.event.keyCode;
    else if (e)
        return e.which;
    else
        return null;
}

function getDescription(array, value) {

	for (i = 0; i < array.length; i++) {
		var element = array[i];
		if (value == element[0])
			return element[1];
	}
	return '';
}


function deleteArrayItem(array, value) {

	for (i = 0; i < array.length; i++) {
		var element = array[i];
		if (element[0] == value) {
			array.splice(i, 1);
			return;
		}
	}
}

function deleteArrayObject(array, obj) {

	for (i = 0; i < array.length; i++) {
		if (array[i].id == obj.id) {
			array.splice(i, 1);
			return;
		}
	}
}

function addColumToRow(row, columnData, colClass, colWidth, colId) {

	var column = row.insertCell(-1);
	if (colClass) column.className = colClass; 
	if (colWidth) column.style.width = colWidth; 
	if (colId) column.id = colId; 
	setInnerHTML(column, columnData);
	return column;
}

function deleteRow(table, rowObject) {

	var i = rowObject.rowIndex;
	table.deleteRow(i);
}


function formatError(msg) {

	return "<span class=\"FormErrorMessage\" ><img src=\"../images/error_red.jpg\" /> " + msg + "</span>";
}

function formatSuccess(msg) {

	return "<span class=\"SuccessMessage\" ><img src=\"../images/success_green.jpg\" /> " + msg + "</span>";
}

function reloadWindow(url) {

	if (url) {
		window.location=url;
	}
	else {
		window.location=window.location.href;
	}
}
function closePopWin(obj) {
	obj.parentNode.style.display='none';
}

function showPopWin(windowName, dragable) {

	var scrollTop = ((window.pageYOffset) ? window.pageYOffset : ((document.body.parentElement) ? document.body.parentElement.scrollTop : 0));
	var scrollLeft = ((window.pageXOffset) ? window.pageXOffset : ((document.body.parentElement) ? document.body.parentElement.scrollLeft : 0));

	var divWin = document.getElementById(windowName);
	var divWinHeader = document.getElementById(windowName + 'Header');
	divWin.parentNode.style.display='block';

	divWin.style.left = ((document.documentElement.clientWidth/2) - (divWin.clientWidth/2) + scrollLeft) + 'px';
	divWin.style.top = ((document.documentElement.clientHeight/3) + scrollTop) + 'px';
	var divBackWin = getChildElement(divWin.parentNode, 1);
	divBackWin.style.width = document.body.clientWidth + 'px';
	divBackWin.style.height = document.body.clientHeight + 'px';

	if(dragable && divWinHeader) makeDraggable(divWinHeader, false, divWin);
}

function getChildElement(parent, num) {
	
	var elementCount = 0;
	for (var x=0; x < parent.childNodes.length; x++) {
		var node = parent.childNodes[x];
		if (node.nodeType == 1) {
			elementCount++
			if (elementCount == num) return node; 
		}
	}
	return null;
}

function AjaxReturn(response) {

	this.code = response.substring(0, response.indexOf("\n"));
	this.response = response.substring(response.indexOf("\n") + 1).trim();
}

function iFrameReturn(doc) {

	var codeDiv = doc.getElementById("Code");
	this.code = "";
	if (codeDiv) this.code = codeDiv.innerHTML;

	var msgDiv = doc.getElementById("Message");
	this.message = ""
	if (msgDiv) this.message = msgDiv.innerHTML;

	var adminDiv = doc.getElementById("Admin");
	this.admin = false;
	if (adminDiv) this.admin = (adminDiv.innerHTML == "Y");
	
	this.response = doc.getElementById("Response");
}

function getValue(field, encode) {

	var value = "";

	if (!field) return value;
	
	switch(field.type) {
		case "text":
		  value = field.value;
		  break;
		case "select-one":
			if (field.selectedIndex >= 0)
				value = field.options[field.selectedIndex].value;
		  break;
		case "checkbox":
		  value = (field.checked ? field.value : "");
		  break;
		default:
		  value = field.value;
	}
	return (encode ? encodeURIComponent(value) : value);
}

function clearValue(field) {

	switch(field.type) {
		case "text":
			field.value = "";
		  break;
		case "select-one":
			field.selectedIndex = -1;
			break;
		case "checkbox":
			field.checked = false;
			break;
		case "file":
			//field.parentNode.innerHTML = field.parentNode.innerHTML;
			field.value = "";
			break;
		case "hidden":
			break;
		default:
			field.value = "";
	}
}

function getFormAction(actionDivId, transid, msg) {

	var actionDiv = document.getElementById(actionDivId);
	//alert(actionDiv.id);
	actionDiv.fields = new Array();
	actionDiv.transid=transid;
	actionDiv.successMsg=msg;
	actionDiv.msgDiv = document.getElementById(actionDivId + ".Msg");
	return actionDiv;
}

function initForm(actionDiv, visible, name) {

	if (visible) {
		actionDiv.style.visibility="visible";
	}
	else {
		actionDiv.style.visibility="hidden";
	}
	if (name) actionDiv.name = name;
}

function initField(fieldid, required, actionDiv, replace) {

	var field = document.getElementById(fieldid);
	
	if (checkFieldExists(actionDiv, field)) {
		//if (replace) {
			//alert('Exists: ' + fieldid);
			destroyField(actionDiv, fieldid);
		//}
		//else return;
	}

	var fieldMsg = document.getElementById(fieldid + ".Msg");
	if (fieldMsg != null) field.msgDiv = fieldMsg;
	field.required = required;
	field.actionDiv = actionDiv;

	if (required && getValue(field) == "") {
		if (field.msgDiv) field.msgDiv.innerHTML = requiredStr;
	}

	field.actionDiv.fields[field.actionDiv.fields.length] = field;
}

function destroyField(actionDiv, fieldid) {

	var field = document.getElementById(fieldid);

	//alert('Destroy: ' + fieldid)
	
	deleteArrayObject(actionDiv.fields, field);
	field.actionDiv = null;
}

function fieldOnChange(field) {

	if (field.required && field.value.trim() == "") {
		if (field.msgDiv) field.msgDiv.innerHTML = requiredStr;
	}
	else  {
		if (field.msgDiv) field.msgDiv.innerHTML = "";
		//alert(field.id)
		field.actionDiv.msgDiv.innerHTML="";
	} 

	//alert('FOC: ' + field.id);
	if (checkEnable(field.actionDiv, field)) {
		field.actionDiv.style.visibility="visible";
	}
	else {
		field.actionDiv.style.visibility="hidden";
	}
	
}

function checkEnable(div, fields) {

	for (fieldNum=0; fieldNum < div.fields.length; fieldNum++) {
		var field = div.fields[fieldNum];
		if (field.required && field.value.trim() == "") return false;
	}
	return true;
}

function checkFieldExists(div, newField) {

	for (fieldNum=0; fieldNum < div.fields.length; fieldNum++) {
		var field = div.fields[fieldNum];
		if (field.id == newField.id) return true;
	}
	return false;
}

function getParms(div) {

	var parms = "";
	for (fieldNum=0; fieldNum < div.fields.length; fieldNum++) {
		var field = div.fields[fieldNum];
		var fieldName = (field.name == "" ? field.id : field.name); 
		parms += "&" +  fieldName + "=" + getValue(field, true); 
	}
	return parms;
}

function clearFields(div) {

	for (fieldNum=0; fieldNum < div.fields.length; fieldNum++) {
		var field = div.fields[fieldNum];
		clearValue(field); 
	}
}

function ajaxSubmit(actionDiv, callBack) {

	var transId = actionDiv.transid;
    var parms = "TransID=" + transId + getParms(actionDiv);
    var results = new AjaxReturn(getPage(urlHost, parms));
    if (results.code == 0) {
        if (typeof(callBack) == 'function') {
        	clearFields(actionDiv);
        	callBack(results.response);
        }
        else {
        	reloadWindow(callBack);
        	//alert(results.response);
        }
    }
    else if (results.code == 1) {
    	reloadWindow();
    }
    else {
    	actionDiv.msgDiv.innerHTML = formatError(results.response);
    }
}

function getPage(url) {
	return getPage(url, null);
}

function getPage(url, postParms) {

	var post = (postParms==null ? false : true);
	var method = (post ? "POST" : "GET");
    var objXml;
    var readPage = "";
   
    if (window.XMLHttpRequest) {
        objXml = new XMLHttpRequest();
        objXml.open(method, url, false);
        if (post) setPostHeaders(objXml, postParms);
        objXml.send(postParms);
        if (objXml.status==200) readPage = objXml.responseText;
        //alert("new");
    }
    else {
        objXml = new ActiveXObject("Microsoft.XMLHTTP");
        objXml.open(method, url, false);
        if (post) setPostHeaders(objXml, postParms);
        objXml.onreadystatechange=function() {
            if (objXml.readyState==4) {
            	if (objXml.status==200) readPage = objXml.responseText;
            }
        }
        objXml.send(postParms);
    }

    return readPage;
}

function getPageAsync(url, doFunc, id, postParms) {

	var post = (postParms==null ? false : true);
	var method = (post ? "POST" : "GET");
    var objXml;
   
    if (window.XMLHttpRequest) {
        objXml = new XMLHttpRequest();
        objXml.onreadystatechange= function() { 
            if (objXml.readyState==4)
                if (objXml.status==200)
                    doFunc(objXml, id);
        }
        objXml.open(method, url, true);
        if (post) setPostHeaders(objXml, postParms);
        objXml.send(postParms);
    }
    else {
        objXml = new ActiveXObject("Microsoft.XMLHTTP");
        objXml.open(method, url, true);
        if (post) setPostHeaders(objXml, postParms);
        objXml.onreadystatechange= function() { 
            if (objXml.readyState==4)
                if (objXml.status==200)
                    doFunc(objXml, id);
        }
        objXml.send(postParms);
    }
}

function setPostHeaders(http, parms) {

	http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-length", parms.length);
	http.setRequestHeader("Connection", "close");
}

function getY(oElement) {
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

function getX(oElement) {
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetLeft;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}


function setInnerHTML(obj, html) {

	obj.innerHTML = html;
	var scripts = obj.getElementsByTagName('script');
	//var newScripts = new Array();
	//var count = 0;

	//while (scripts.length > 0) {
	for (var count=0; count<scripts.length; count++) {
		var script = scripts[count];
		var newScript = document.createElement('script');
		newScript.type='text/javascript';
		newScript.text = script.text;
		//newScripts[count++] = newScript;
		//alert(obj.id);
		//obj.removeChild(script);
		try {
			obj.replaceChild(newScript, script);
		}
		catch(err) {
		  //alert(err);
		}
	}

	/*
	for (var count = 0; count < newScripts.length; count++) {
		var script = newScripts[count];
		obj.appendChild(script);
	}
	*/
}	

function toggleDisplay(id1, id2) {
	
	var obj1 = document.getElementById(id1);
	var obj2;
	if (id2) obj2 = document.getElementById(id2);
	
	if (obj1.style.display == 'none') {
		obj1.style.display='';
		if (id2) obj2.style.display='none';
	}
	else {
		if (id2) obj2.style.display='';
		obj1.style.display='none';
	}
}

function getTime() {

	return (new Date()).getTime();
}


function createAjaxPopUpWindow(name, header, actionLabel, transid, callback, successMsg, width) {
	
	var html = '<div class="AjaxPopupWindowParent" > \n\
			<div class="AjaxPopupWindowBackground" ></div> \n\
	<div id="' + name + 'Window" class="AjaxPopupWindow" style="' + (width ? 'width:' + width + ';' : '') + '"> \n\
		<table style="width:100%; " cellpadding="3" cellspacing="5"> \n\
			<tr><td id="' + name + 'WindowHeader" class="AjaxPopupWindowHeader"> \n\
				<table style="width:100%;" cellspacing="0" cellpadding="0"><tr><td style="text-align:left;">' + header + '</td><td style="text-align:right;"><span style="cursor:pointer;" onclick="closePopWin(document.getElementById(\'' + name + 'Window\'));">close[x]</span></td></tr></table> \n\
			</td></tr> \n\
			<tr><td><table style="width:100%" id="' + name + 'Table" > \n\
			</table></td></tr> \n\
			<tr> \n\
				<td style="text-align:left;"> \n\
					<span id="' + name + 'Actions" > \n\
						<button id="' + name + 'ActionButton" >' + actionLabel + '</button>&nbsp; \n\
					</span> \n\
					<span style="text-align:right;" id="' + name + 'Actions.Msg" ></span> \n\
				</td> \n\
			</tr> \n\
		</table> \n\
	</div> \n\
	</div>';
	
	document.write(html);

	var actionDiv = getFormAction(name + 'Actions', transid, successMsg);
	initForm(actionDiv, false, name);

	var actionButton = document.getElementById(name + 'ActionButton');
	if (typeof(transid) == "function") {
		actionButton.onclick = transid;
	}
	else {
		actionDiv.callback = callback;
		actionButton.onclick = function() { 
				ajaxSubmit(this.parentNode, this.parentNode.callback);
			}
	}
	
	return actionDiv;
}

function addAjaxWindowTextField(actionDiv, fieldid, required, fieldLabel, labelWidth, fieldWidth) {

	var table = document.getElementById(actionDiv.name + 'Table');

	var newRow = table.insertRow(table.rows.length);
	
	addColumToRow(newRow, fieldLabel + ":", null, labelWidth);
	var fieldContents = '<input id="' + fieldid + '" type="text" onkeyup="fieldOnChange(this);" \
			style="' + (fieldWidth ? 'width:' + fieldWidth + ';' : '') + '" \
					/> \n\
			<span id="' + fieldid + '.Msg" class="FormErrorMessage"  style="text-align:left;"></span>';
	addColumToRow(newRow, fieldContents, null, null);
	
	initField(fieldid, required, actionDiv);
}

function addAjaxWindowCustomField(actionDiv, fieldid, contents, fieldLabel, labelWidth) {

	var table = document.getElementById(actionDiv.name + 'Table');

	var newRow = table.insertRow(table.rows.length);
	
	addColumToRow(newRow, fieldLabel + ":", null, labelWidth);
	addColumToRow(newRow, contents, null, null, fieldid);	
}

function addAjaxWindowSelectField(actionDiv, fieldid, required, fieldLabel, labelWidth, fieldWidth, selectArray, addBlank, selectedValue, onchange) {

	var table = document.getElementById(actionDiv.name + 'Table');

	var newRow = table.insertRow(table.rows.length);
	
	addColumToRow(newRow, fieldLabel + ":", null, labelWidth);
	var fieldContents = '<select id="' + fieldid + '" onchange="' + (onchange ? onchange : '') + 'fieldOnChange(this);" \
			style="' + (fieldWidth ? 'width:' + fieldWidth + ';' : '') + '" \
			/> \n\
			> </select> \n\
			<span id="' + fieldid + '.Msg" class="FormErrorMessage"  style="text-align:left;"></span>';
	addColumToRow(newRow, fieldContents, null, null);

	addArrayToList(document.getElementById(fieldid), selectArray, addBlank, true, selectedValue);
	
	initField(fieldid, required, actionDiv);
}

function addAjaxWindowCheckField(actionDiv, fieldid, fieldLabel, labelWidth) {

	var table = document.getElementById(actionDiv.name + 'Table');

	var newRow = table.insertRow(table.rows.length);
	
	addColumToRow(newRow, fieldLabel + ":", null, labelWidth);
	var fieldContents = '<input id="' + fieldid + '" type="checkbox" value="Y" onkeyup="fieldOnChange(this);" /> \n\
			<span id="' + fieldid + '.Msg" class="FormErrorMessage"  style="text-align:left;"></span>';
	addColumToRow(newRow, fieldContents, null, null);
	
	initField(fieldid, false, actionDiv);
}

function getElementsByClass(searchClass,node,tag) {

	var classElements = new Array();
	if (node == null) node = document;
	if (tag == null) tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if (pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

