///////////////////////////////////////////////////////////////////////////////
//
// menu.js
//	
//		PNN.PNNSOFT.COM		
//
//		Online Demo Client Scripts
//
//		Written by Oleg Demchenko, Vladimir Volkovich
//		Reverse Engineering by Olexiy Gospodarchuk
//		Last Modified On: 2003.11.01
//
//		(C) 2002-2003, Polynomial Neural Network (PNN) Ltd.
//
///////////////////////////////////////////////////////////////////////////////

function AddRow()
{
	var nRows = document.all.chartTable.rows.length;
	if( nRows >= 16 )
		alert("Online version allows maximum of 15 rows.\nUnable to add row");
	else {
		var nCells = document.all.chartTable.rows(0).cells.length;
		var oRow = document.all.chartTable.insertRow();

		for (var i = 0; i < nCells; i++) {
			var oCell = oRow.insertCell();
			if (i==0) {
				oCell.innerHTML = "<IMG src='img/x.gif' onmouseover=\"this.src='img/x2.gif'\" onmouseout=\"this.src='img/x.gif'\" onclick='DelRow(event)' width='11' height='11'>";
				oCell.innerHTML +="<INPUT class='charRowheader' value='" + nRows + "' readOnly='true' tabindex='-1'>";
			} else
				oCell.innerHTML = "<INPUT class='chartdata' value='0.0' size='7' maxlength='7'>";
		}
	
		var fRow = document.all.FunctionValue.insertRow();
		var fCell = fRow.insertCell();
		fCell.innerHTML = "<INPUT class='chartTargetdata' value='0.0' size='7' maxlength='7'>";
	} 
}

function AddColumn()
{
    var nRows = document.all.chartTable.rows.length;
    var nCells = document.all.chartTable.rows(0).cells.length;
    if( nCells >= 11 )
		alert("Online version allows maximum of 10 colums (attributes).\nUnable to add column");
    else {
		for (var i = 0; i < nRows; i++) {
			var oRow = document.all.chartTable.rows(i);
			var oCell = oRow.insertCell();
			oCell.align = "center";
			oCell.width = 30;
			if (i==0) {
				oCell.innerHTML = "<IMG src='img/x.gif' onmouseover=\"this.src='img/x2.gif'\" onmouseout=\"this.src='img/x.gif'\" onclick='DelColumn(event)' width='11' height='11'>";
				oCell.innerHTML +="<INPUT class='chartheader' value='X " + nCells + "' readOnly='true'>";
			} else
				oCell.innerHTML = "<INPUT class='chartdata' value='0.0' >";
		}
	}
}

function RunDemo()
{
    var nRows = document.all.chartTable.rows.length;
    var nCells = document.all.chartTable.rows(0).cells.length;

    if( nRows < 4 ) {
		alert("The table must have at least 3 data rows");
		return;
	}
	if( nCells < 4 ) {
		alert("The table must have at least 3 variables");
		return;
	}
    var s = "";
    
    // prepare mdx-string
    for (var i=1; i<nRows; i++) {
        s += "([";
        s += document.all.chartTable.rows(i).cells(0).all(1).value;
        s += "])";
        if (i<nRows-1) s += ",";
    }
    
    var oRow = document.all.chartTable.rows(0);
    s += ";";
    for (var j=1; j<nCells; j++) {
        s += "([";
        s += oRow.cells(j).all(1).value;
        s += "])";
        if (j<nCells-1) s += ",";
    }
    document.all.formChart.txtMDX.value = s;
    
    // prepare data-string
    s = "";
    for (var i=1; i<nRows; i++) {
		for (var j=1; j<nCells; j++) {
			var cell = document.all.chartTable.rows(i).cells(j).all(0);
            var val = cell.value;
            if( isNaN(Number(val)) ) {
				alert ("Cell "+j+" in row "+i+" contains nonnumerical data.\nUnable to continue");
				cell.select();
				cell.focus();
				return;
            }
            s += val;
            if (j<nCells-1) s += " ";
        }
        var cell = document.all.FunctionValue.rows(i).cells(0).all(0);
        var val = cell.value;
        if( isNaN(Number(val)) ) {
			alert ("Target in row "+i+" contains nonnumerical data.\nUnable to continue");
			cell.select();
			cell.focus();
			return;
        }
        s += (' ' + val + '\n');
    }
    document.all.formChart.txtData.value = s;
   
    // check algorithm parameters
    
    //var val;
    val = Number(document.all.PNN_RobustIter.value);
    if( isNaN(val) || val < 0 || val > 15 ) {
		alert("Invalid algorithm parameter \"Number Of Robust Iterations\"");
		return;
    }
    val = Number(document.all.PNN_RobustValue.value);
    if( isNaN(val) ) {
		alert("Invalid algorithm parameter \"Robust Value Threshold\"");
		return;
    }
    val = Number(document.all.PNN_EquationCount.value);
    if( isNaN(val) || val < 1 || val > 10 ) {
		alert("Invalid algorithm parameter \"Number Of Equations\"");
		return;
    }
    val = Number(document.all.PNN_IterInLayer.value);
    if( isNaN(val) || val < 1 || val > 20 ) {
		alert("Invalid algorithm parameter \"Number Of Iterations In Layer\"");
		return;
    }
    val = Number(document.all.PNN_MaxDegree.value);
    if( isNaN(val) || val < 1 || val > 5 ) {
		alert("Invalid algorithm parameter \"Maximum Degree\"");
		return;
    }
    val = Number(document.all.PNN_MaxTerms.value);
    if( isNaN(val) || val < 1 || val > 15 ) {
		alert("Invalid algorithm parameter \"Maximum Number Of Terms In Equation\"");
		return;
    }
    val = Number(document.all.PNN_ValidRows.value);
    if( isNaN(val) || val < 0 || nRows - val < 4 ) {
		alert("Invalid algorithm parameter \"Number Of Validation Rows\"");
		return;
    }

    // start online demo
    document.all.formChart.submit();
}

function DelRow (event)
{
    if (document.all.chartTable.rows.length <=4) 
		return false;
    
    var nRow = event.srcElement.parentElement.parentElement.rowIndex;
    document.all.chartTable.deleteRow(nRow);
    document.all.FunctionValue.deleteRow(nRow);
    
    var nRows = document.all.chartTable.rows.length;
    for (var i = nRow; i <= nRows-1; i++)
	    document.all.chartTable.rows(i).cells(0).all(1).value=String(i);
}

function DelColumn (event)
{
    var nCell = event.srcElement.parentElement.cellIndex;
    var nRows = document.all.chartTable.rows.length;

    if (document.all.chartTable.rows(0).cells.length <= 4)
       return false;
       
    for (var i = 0; i < nRows; i++)
        document.all.chartTable.rows(i).deleteCell(nCell);

    //for (var i = nCell; i < document.all.chartTable.rows(0).cells.length; i++)
    //  document.all.chartTable.rows(0).cells(i).all(2).value='X'+String(i);     
}

function ShowPars()
{ 
	if(document.all.Parameters.style.display == "none")
		document.all.Parameters.style.display = "inline";
	else
		document.all.Parameters.style.display = "none";
}
