
var request = null;
var arrProducts = new Array();

var error_msg = "Please excuse us, there is an error occurred. We are not able to load the product names into the select box below. Please contact the comForte License-Desk (license-desk@comforte.com) and forward the error code:";
var isReceivedAnswer = false;

/**
 * gets a XMLHttpRequest to a php script
 */
function update() {

	if (isReceivedAnswer) {
		return;
	}
	try {
    	request = new XMLHttpRequest();
	} catch (versuchmicrosoft) {
    	try {
      		request = new ActiveXObject("Msxml2.XMLHTTP");
    	} catch (anderesmicrosoft) {
      		try {
        		request = new ActiveXObject("Microsoft.XMLHTTP");
      		} catch (fehlschlag) {
        		request = null;
      		}
    	}
  	}

	if (request == null) {
  		setErrorMessage(error_msg+" - 751. Thank you");
  		alert("ERROR: creating a request object failed!");
	} else {
		var url = "licenseForm.php";
//		var url = "licenseForm.php";
	  	url = url + "?dummy=" + new Date().getTime();
	  	request.open("GET", url);
	  	// HACK: that is a different behaviour in FireFox and Netscape to IE
	  	//       which prevents that the onreadystatechange method works correct.
	  	//       Added a function wrapper to make it workable for all browsers. 
	  	request.async = true;
	  	request.onreadystatechange = function (){ updatePage(request);};
	  	request.send(null);
	}
}

/**
 * gets the current date
 */
function getCurrentDate() {
	return new Date().toLocaleString();
}

/**
 * shows the current date
 */
function showCurrentDate() {
	var divDate = document.getElementById("currDate");
	replaceText(divDate, getCurrentDate());
}

/**
 * updates the license form
 */
function updatePage(reqObj) {
	if (reqObj.readyState == 4) {
		if (reqObj.status == 200) {
			//alert("Status="+reqObj.responseText);
      		// Number of Tickets aus der JSON-Antwort ermitteln
      		var jsonData = eval('(' + reqObj.responseText + ')');
			
			// Informationen aus der Serverantwort
			var errormessage = jsonData.errormessage;
			
			var arrModules = new Array();
			arrModules = jsonData.modules;

			if (errormessage.length > 0)  {
				setErrorMessage(errormessage);
				return;								
			} else {
				setErrorMessage(null);
			}

			var selectElem = document.getElementById("SE_Product");			
			var objElem = null;
			var arrH = new Array();
			arrH["prodName"] = ""; 
			arrH["moduleName"] = ""; 
			arrH["id"] = "0"; 
			arrH["description"] = " "; 
			arrProducts[0] = arrH;			
			for (var i = 0; i < arrModules.length; i++) {
  				arrProducts[i+1] = arrModules[i];
  				optElem = document.createElement("option");
  				optElem.setAttribute("value",arrModules[i].id);
  				var text = document.createTextNode(arrModules[i].prodName + " " +arrModules[i].moduleName);
  				optElem.appendChild(text);
  				selectElem.appendChild(optElem); 
			}
			isReceivedAnswer = true;
		} else {
    		var meldung = reqObj.status;
      		if ((meldung.length == null) || (meldung.length <= 0)) {
  				setErrorMessage(error_msg+" - "+meldung+". Thank you");
      		} else {
      			setErrorMessage(error_msg+" - 755. Thank you");
  			}
    	}
  	}
}

function setErrorMessage(message) {
	var elmMessage = document.getElementById("error_message");
	var elmIcon = document.getElementById("error_icon");
	if (message == null) {
		replaceText(elmMessage, "");
		var icon = elmIcon.firstChild;
		if (elmIcon[0] != null)
			elmIcon[0].removeChild(icon);
	} else {
		var icon = document.createElement("img");
		icon.setAttribute("src","../../../images/ampelmaennchen_stop.gif");
		icon.setAttribute("border","0");
		icon.setAttribute("width","45");
		icon.setAttribute("height","49");
		icon.setAttribute("alt","Ampelm&auml;nnchen Red");
		elmIcon.appendChild(icon);
	
		replaceText(elmMessage, message);
	}
}


/**
 * @returns TD element
 */
function createTDElem(index, id, txt, size, method, tableID) {
	var elem = null;
//	alert(method + '('+ index+','+id+','+txt+','+size+')') ;
	elem = eval('(' + method + '('+ index+',\''+id+'\',\''+txt+'\','+size+',\''+tableID+'\')'+')');
	
	var elemTD = document.createElement("td");
  	elemTD.setAttribute("class", "with_border");
  	elemTD.setAttribute("className", "with_border");
  	elemTD.setAttribute("id", (tableID + "_" + id + "_" + index));
	elemTD.appendChild(elem);
	
	return elemTD;
}

/**
 * @returns INPUT element
 */
function create_INPUT_Elem(index, id, txt, size, tableID) {
	
  	var elemINPUT = document.createElement("input");
  	elemINPUT.setAttribute("id", id + "_" + index);
  	elemINPUT.setAttribute("name", id + "_" + index);
  	elemINPUT.setAttribute("value", txt);
  	elemINPUT.setAttribute("class", "td");
  	elemINPUT.setAttribute("className", "td");
  	elemINPUT.setAttribute("size", size);
  	elemINPUT.setAttribute("readonly", "true");

	return elemINPUT;
}
 
/**
 * @returns A element
 */
function create_A_Elem(index, id, txt, size, tableID) {
	
  	var elemA = document.createElement("a");
  	elemA.setAttribute("href","javascript:deleteRow(\'"+tableID+"\',"+index+")"); 
  	var elemTxtNote = document.createTextNode(txt);
  	elemA.appendChild(elemTxtNote);
  	
	return elemA;
}
 
/**
 * @returns Text node
 */
function create_TEXT_Elem(index, id, txt, size, tableID) {
	
  	var elemTxt = document.createTextNode(txt);
  	return elemTxt;
}
 
/**
 * create a product table
 */ 
function addTR2Products() {

	var elemProductTable = document.getElementById("products_table");
	var lfdNR = 0;
	// fetch the number of rows
	for (var i=0; i < elemProductTable.childNodes.length; i++) {
		//alert(elemProductTable.childNodes[i].nodeName.toLowerCase());
    	if (elemProductTable.childNodes[i].nodeName.toLowerCase() == "tr") {
      		lfdNR = lfdNR + 1;
    	}
  	}

  	// get product entrees
  	var id = "";
  	var product = "";
  	var description = "";
  	
  	for (i = 0; i < document.myForm.SE_Product.length; ++i) {
    	// store the selected product and get description and prod-module name
    	// arrProducts is a global variable
    	if (document.myForm.SE_Product.options[i].selected == true) {
      		id = document.myForm.SE_Product.options[i].value;
      		product = arrProducts[i].prodName + " " + arrProducts[i].moduleName;
      		description = arrProducts[i].description;
      		break;	
		}
  	}
  	
  	var tr = elemProductTable.insertRow(lfdNR);
  	tr.appendChild(createTDElem(lfdNR, "PI_No", (lfdNR+1),4,"create_INPUT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "PI_Product", product, 25,"create_INPUT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "PI_Module", document.myForm.SE_Product.value, 5,"create_INPUT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "PI_Licenses", document.myForm.SE_Licenses.value, 5,"create_INPUT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "PI_CPUs", document.myForm.SE_CPUs.value,5,"create_TEXT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "PI_Description", description,100,"create_TEXT_Elem","products_table"));
  	tr.appendChild(createTDElem(lfdNR, "Edit", "delete", 0, "create_A_Elem","products_table"));
}

/**
 * deletes a table row 
 */
function deleteRow(key, idx) {
	var elemTable = document.getElementById(key);
	var index = 0;
	var s = null;
	// the id of first child is <table_id>_no_<index>
	var pattern = key + "_no_" + idx;
	for (var i=0; i < elemTable.childNodes.length; i++) {
    	if (elemTable.childNodes[i].nodeName.toLowerCase() == "tr") {
			s = elemTable.childNodes[i].firstChild.getAttribute("id");
			if (s = pattern){ 
				elemTable.deleteRow(index);
				break;
			}
			index = index + 1;
		}
	}
}

/**
 * shows Product-Module dscription
 */
function showDescription() {
  	var description = "";
  	for (i = 0; i < document.myForm.SE_Product.length; ++i) {
    	if (document.myForm.SE_Product.options[i].selected == true) {
      		description = arrProducts[i].description;
      		break;	
		}
  	}
	var elemTD_Descr = document.getElementById("SE_product_description");

  	var elemTD_Descr_text = document.createTextNode(description);
	elemTD_Descr.replaceChild(elemTD_Descr_text,elemTD_Descr.firstChild);
  	elemTD_Descr.setAttribute("class","ohne_border");
  	elemTD_Descr.setAttribute("className","ohne_border");
}


/**
 * creates a table with NonStop system information
 */ 
function addTR2Systems() {
	var elemSystemsTable = document.getElementById("systems_table");
	var lfdNR = 0;	
	for (var i=0; i < elemSystemsTable.childNodes.length; i++) {
    	if (elemSystemsTable.childNodes[i].nodeName.toLowerCase() == "tr") {
      		lfdNR = lfdNR + 1;
    	}
  	}
  	var architecture = "";
	for (i = 0; i < document.myForm.PE_Architecture.length; ++i) {
    	// store the selected product and get description and prod-module name
    	// arrProducts is a global variable
    	if (document.myForm.PE_Architecture[i].checked == true) {
      		architecture = document.myForm.PE_Architecture[i].value;
      		break;	
		}
  	}
  	
  	
  	var tr = elemSystemsTable.insertRow(lfdNR);
  	tr.appendChild(createTDElem(lfdNR, "SI_No", (lfdNR+1),4,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "SI_System", document.myForm.PE_System.value, 15,"create_INPUT_Elem","systems_table"));
//  	tr.appendChild(createTDElem(lfdNR, "release", document.myForm.PE_release.value, 15,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "SI_System_No", document.myForm.PE_System_No.value, 10,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "SI_CPUs", document.myForm.PE_CPUs.value, 6,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "SI_Architecture", architecture, 6,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "SI_Software_No", document.myForm.PE_Software_No.value, 25,"create_INPUT_Elem","systems_table"));
  	tr.appendChild(createTDElem(lfdNR, "Edit", "delete", 0, "create_A_Elem", "systems_table"));
  	
}

function replaceText(el, text) {
  if (el != null) {
    clearText(el);
    var newNode = document.createTextNode(text);
    el.appendChild(newNode);
  }
}

function clearText(el) {
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}

function getText(el) {
  var text = "";
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        if (childNode.nodeValue != null) {
          text = text + childNode.nodeValue;
        }
      }
    }
  }
  return text;
}


