/*************************************************************************************************
* 프로그램명 : InsertMTable.java 프로그램설명 : 집계 문서의 입력 양식을 작성해줌 작성자 : 강원중 작성일 : 2003.12.03 변경일 : 2004.09.16
**************************************************************************************************/
package kr.co.kihyun.moumi.doc.table;
import java.util.StringTokenizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import kr.co.kihyun.beans.totsys.doc.table.item.ItemList;
import kr.co.kihyun.moumi.MoumiConfig;
import kr.co.kihyun.lang.MString;
import kr.co.kihyun.moumi.doc.table.item.MItem;
import kr.co.kihyun.moumi.report.MReport;
public class InsertMTable {
private static final Logger LOG = LoggerFactory.getLogger(InsertMTable.class);
private String form = "";
private String inputForm = "";
private StringBuilder putValStrBuf = new StringBuilder();
private StringBuilder changeAllStrBuf = new StringBuilder();
public void convert(String form, ItemList itemList, int defItemSize) {
convert(form, itemList.getNumList(), itemList.getNameList(), itemList.getSizeList(), itemList.getExprList(),
itemList.getTypeList(), itemList.getDescList(), defItemSize);
}
@Deprecated
public void convert(String form, int[] itemNumList, String[] itemNameList, int[] itemSizeList,
String[] itemExprList, int[] itemTypeList, String[] itemDescList, String defItemSize) {
convert(form, itemNumList, itemNameList, itemSizeList, itemExprList, itemTypeList, itemDescList,
Integer.parseInt(defItemSize));
}
public void convert(String form, int[] itemNumList, String[] itemNameList, int[] itemSizeList,
String[] itemExprList, int[] itemTypeList, String[] itemDescList, int defItemSize) {
this.form = form;
int itemCount = itemNumList.length;
String[] itemInputList = new String[itemCount];
String[] itemOnChangeList = new String[itemCount];
String[] itemOnFocusList = new String[itemCount];
String[] itemErrorList = new String[itemCount];
String itemName = "";
String itemExpr = "";
int itemType = 0;
int itemSize = 0;
String tmpItemDesc = "";
StringTokenizer tkItemExpr = null;
StringBuilder selectBuf = null;
String value = null;
StringTokenizer is = null;
for (int i = 0; i < itemCount; i++) {
itemName = itemNameList[i].trim();
itemExpr = itemExprList[i].trim();
itemType = itemTypeList[i];
itemSize = itemSizeList[i];
tmpItemDesc = itemDescList[i].trim();
LOG.debug("itemName: {}, itemExpr: {}, itemType: {}, itemSize: {}, tmpItemDesc: {}",
new Object[] {itemName, itemExpr, itemType, itemSize, tmpItemDesc});
try {
tmpItemDesc = tmpItemDesc.substring(tmpItemDesc.indexOf(":") + 1, tmpItemDesc.length());
} catch (Exception e) {
//18.시스템 데이터 정보노출 : Update by YOUNGJUN,CHO
//System.err.println(e);
e.printStackTrace();
//================================================
}
// select 문으로 바뀌는 경우
if (itemExpr != null && itemExpr.indexOf("^") >= 0)
{
tkItemExpr = new StringTokenizer(itemExpr, "^");
selectBuf = new StringBuilder();
selectBuf.append("
");
itemInputList[i] = selectBuf.toString();
}
else if (itemExpr != null && itemExpr.indexOf("~") > 0)
{
// textarea로 바뀌는 경우
is = new StringTokenizer(itemExpr, "~");
if (is.countTokens() != 2) {
itemErrorList[i] += ":" + itemSize + MoumiConfig.getMessageBundle().getString("moumi.message.tot_doc.sizeError");
} else {
// 계산버튼(관련)
itemInputList[i] = "";
}
}
else
{// 일반적인 경우
//ie10,11 호환성 수정 - 텍스트박스 배경색 적용되게
if (itemSize == 0)
itemSize = defItemSize;
if (itemType == MItem.CHAR) {// 문자
itemInputList[i] = "";
} else if (itemType == MItem.INT) {// 숫자
itemInputList[i] = "";
} else if (itemType == MItem.DATE) {// 날짜
itemInputList[i] = "
";
}
if ("empty".equals(tmpItemDesc)) {
if (itemType == MItem.CHAR) {// 문자
itemInputList[i] = "";
} else if (itemType == MItem.INT) {// 숫자
itemInputList[i] = "";
} else if (itemType == MItem.DATE) {// 날짜
itemInputList[i] = "
";
}
} else {
itemInputList[i] = "";
}
}
}// ///for end
buildExprHandlerScript(itemNameList, itemExprList, itemCount, itemOnChangeList, itemOnFocusList);
// onchange, onfocus event 처리 부분
for (int i = 0; i < itemCount; i++) {
if (MString.checkNull(itemOnFocusList[i]).length() > 0)
{
itemInputList[i] = MString.replaceAll(itemInputList[i], "$ON_FOCUS", itemOnFocusList[i]);
}
else
{
itemInputList[i] = MString.replaceAll(itemInputList[i], "$ON_FOCUS", "");
}
if (MString.checkNull(itemOnChangeList[i]).length() > 0)
{
itemInputList[i] = MString.replaceAll(itemInputList[i], "$ON_CHANGE", "onchange='" + itemOnChangeList[i] + "'");
}
else
{
itemInputList[i] = MString.replaceAll(itemInputList[i], "$ON_CHANGE", "");
}
}
// ban lower case this.form = form.toLowerCase().replaceAll("width","hh");
this.form = form.replaceAll("width", "hh");
this.inputForm = getInputForm(form, itemInputList, itemNumList);
}
private void buildExprHandlerScript(String[] itemNameList, String[] itemExprList, int itemCount,
String[] itemOnChangeList, String[] itemOnFocusList) {
String itemName;
String itemExpr;
// 수식처리 부분
String itmExpr = "";
String sumSpc = "";// // 최종 결과물
StringTokenizer tmp10 = null;
String tmpStart = "";
String tmpEnd = "";
String startTail = "";
int startTailInt = 0;
char startCh = 0;
String startCharacter = "";
char endCh = 0;
String sumType = "";
int startTailResult = 0;
String pEnd = "";
String exprToken = "";
StringTokenizer stk99 = null;
StringTokenizer stkExpr = null;
for(int ii=0;ii 0) {// // SUM(A1:F1) 일경우
itemExpr = MString.replaceAll(itemExpr, "+", " ");
itemExpr = MString.replaceAll(itemExpr, "-", " ");
itemExpr = MString.replaceAll(itemExpr, "*", " ");
itemExpr = MString.replaceAll(itemExpr, "/", " ");
itemExpr = MString.replaceAll(itemExpr, "%", " ");
itemExpr = MString.replaceAll(itemExpr, "(", " ");
itemExpr = MString.replaceAll(itemExpr, ")", " ");
itemExpr = MString.replaceAll(itemExpr, "SUM", " ");
tmp10 = new StringTokenizer(itemExpr, ":");
tmpStart = MString.replaceAll(tmp10.nextToken(), " ", "");
tmpEnd = MString.replaceAll(tmp10.nextToken(), " ", "");
//SUM(B2:BH2)
startTail = "";
startTailInt = 0;
startCh = 0;
startCharacter = "";
endCh = 0;
try
{
startTail = tmpStart.substring(1, tmpStart.length());
startTailInt = Integer.parseInt(startTail);
startCh = tmpStart.charAt(0);
startCharacter = tmpStart.substring(0, 1);
}
catch (Exception e)
{
startTail = tmpStart.substring(2, tmpStart.length());
startTailInt = Integer.parseInt(startTail);
startCh = tmpStart.charAt(1);
startCharacter = tmpStart.substring(0, 2);
}
char tmpch=tmpEnd.charAt(1);
if(tmpch>='A' && tmpch<='Z') endCh = tmpEnd.charAt(1);
else
endCh = tmpEnd.charAt(0);
sumType = "";
if (startCh == endCh)
{
sumType = "v";// // 세로 SUM
}
else
{
sumType = "h";// // 가로 SUM
}
//System.out.println("startCh================================================================================================>"+startCh);
///System.out.println("endCh================================================================================================>"+endCh);
//System.out.println("sumType================================================================================================>"+sumType);
if (sumType.equals("v"))
{// // SUM(A1:A7) 세로 SUM
boolean loop = true;
int startTailIntVal = startTailInt;
int increment = 0;
do
{
if(increment>999) break;
startTailResult = startTailIntVal + increment;// // 셀 뒷 숫자 증가
pEnd = startCharacter + "" + startTailResult;
if(tmpEnd.equals(pEnd)) loop=false;
if(MReport.findName(pEnd, itemNameList) != -1)
{
sumSpc += pEnd + " ";
itemExpr = MString.replaceAll(itemExpr, ":", "+");// // 문자열을 치환하여 매끄럽게
itmExpr = MString.replaceAll(sumSpc.trim(), " ", "+");
}
increment++;
} while (loop);
} else
{// // SUM(A1:F1) 형식일 경우 가로 SUM
boolean loop = true;
startCh--;
do
{
//String startTail= tmpStart.substring(1, tmpStart.length());//// 셀 뒤숫자
startCh += 1;// // 문자 증가
if(startCh>999) break;
if ((startCh % 91) == 0) startCh = (char) (startCh + 'A');
pEnd = MReport.getCharacterMake(startCharacter, startCh) + "" + startTailInt;
if(tmpEnd.equals(pEnd)) loop=false;
if(MReport.findName(pEnd, itemNameList) != -1)
{
sumSpc += pEnd + " ";
itemExpr = MString.replaceAll(itemExpr, ":", "+");// // 문자열을 치환하여 매끄럽게
itmExpr = MString.replaceAll(sumSpc.trim(), " ", "+");
}
} while (loop);
}
itemExpr = sumSpc;
} else if (itemExpr.indexOf(",") > 0) {// // SUM(A1,F1) 형식 일 경우
itemExpr = MString.replaceAll(itemExpr, "(", " ");
itemExpr = MString.replaceAll(itemExpr, ")", " ");
itemExpr = MString.replaceAll(itemExpr, "SUM", " ");
stk99 = new StringTokenizer(itemExpr, ",");
while (stk99.hasMoreTokens()) {
sumSpc += stk99.nextToken() + " ";
}
itmExpr = MString.replaceAll(sumSpc.trim(), " ", "+");
itemExpr = sumSpc;
itemExpr = MString.replaceAll(itemExpr, "-", "");
itemExpr = MString.replaceAll(itemExpr, "+", "");
itemExpr = MString.replaceAll(itemExpr, "*", "");
itemExpr = MString.replaceAll(itemExpr, "/", "");
itemExpr = MString.replaceAll(itemExpr, "%", "");
} else {// // A1+F7 형식일 경우
itemExpr = MString.replaceAll(itemExpr, "+", " ");
itemExpr = MString.replaceAll(itemExpr, "-", " ");
itemExpr = MString.replaceAll(itemExpr, "*", " ");
itemExpr = MString.replaceAll(itemExpr, "/", " ");
itemExpr = MString.replaceAll(itemExpr, "%", " ");
itemExpr = MString.replaceAll(itemExpr, "(", " ");
itemExpr = MString.replaceAll(itemExpr, ")", " ");
itemExpr = MString.replaceAll(itemExpr, "SUM", " ");
}
//System.out.println("********************************************************************** "+itemExpr);
//System.out.println("********************************************************************** "+itemName);
//System.out.println("********************************************************************** "+itmExpr);
stkExpr = new StringTokenizer(itemExpr);
int vCount = 0;
int errorCount = 0;
/*
*
*/
int jj=0,order=0;
String[] tmpp=new String[stkExpr.countTokens()];
for(int ii=0;ii 0)
{
changeAllStrBuf.append("dform.");
changeAllStrBuf.append(itemNameList[i]);
changeAllStrBuf.append(".value='");
changeAllStrBuf.append(MString.replaceAll(itemExprList[i], "'", "\\\'"));
changeAllStrBuf.append("';\n");
}
else
{
changeAllStrBuf.append(" dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value =");
changeAllStrBuf.append("(Math$round((").append(itmExpr).append(")*100))/100");
changeAllStrBuf.append("; \n");
changeAllStrBuf.append(" if(isNaN(dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value)) dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value = '0'; \n");
changeAllStrBuf.append(" if(dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value=='Infinity' || dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value=='-Infinity') dform.");
changeAllStrBuf.append(itemName);
changeAllStrBuf.append(".value = '0'; \n");
}
//System.out.println("**********************************************************changeAllStrBuf="+changeAllStrBuf);
}
}
}
public String findString(int order,String src,String findStr)
{
int inx1=0,inx2=0;
String ret="";
for(int ii=0;ii-1) inx1+=findStr.length();
else return "";
}
return src.substring(0,inx1-findStr.length());
}
public String getForm() {
return form;
}
public String getInputForm() {
return inputForm;
}
public String getInputForm(String form, String[] itemInputList, int[] itemNumList) {
if (form == null)
return null;
StringBuilder insertBuf = new StringBuilder();
int tdCount = 0;
int stTDIndex;
int edTDIndex;
int index = 0;
while (true) {
if (index > itemNumList.length - 1)
break;
stTDIndex = form.indexOf("", stTDIndex + 1);
if (edTDIndex == -1)
break;
if (tdCount == itemNumList[index] && !MString.isNull(itemInputList[index]))
{ // 입력 셀
insertBuf.append(form.substring(0, edTDIndex + 1));
insertBuf.append(itemInputList[index]);
form = form.substring(edTDIndex + 1, form.length());
index++;
}
else if (tdCount == itemNumList[index] && MString.isNull(itemInputList[index]))
{ // 타이틀 셀
insertBuf.append(form.substring(0, edTDIndex));
insertBuf.append(">");
form = form.substring(edTDIndex + 1, form.length());
index++;
}
else
{
insertBuf.append(form.substring(0, edTDIndex + 1));
form = form.substring(edTDIndex + 1, form.length());
}
tdCount++;
}
insertBuf.append(form);
return insertBuf.toString();
}
public String getInputTitleForm(String form) {
boolean isDynaTable = false;
return getInputTitleForm(form, isDynaTable);
}
public String getInputTitleForm(String form, boolean isDynaTable) {
if (form == null)
return null;
int stTR = 0;
int edTR = 0;
int edTREnd = 0;
int inIndex = 0;
int startIndex = 0;
int endIndex = 0;
int[] ind=new int[3];
/********************************************************************
inIndex = form.indexOf("-1) min=(min>ind[ii])?ind[ii]:min;
}
inIndex=min;
String inputTitleForm = null;
startIndex = form.indexOf(" | ", edTR + 2);
if (edTREnd == -1) break;
if (stTR < inIndex && inIndex < edTR)
{
endIndex = stTR;
if (isDynaTable) inputTitleForm = form.substring(startIndex, endIndex);
else inputTitleForm = form.substring(0, endIndex);
break;
}
}
return inputTitleForm;
}
public String getInputBodyForm(String form) {
if (form == null)
return "";
// throw new NullPointerException("Given form is null.");
int stTR = 0;
int edTR = 0;
int edTREnd = 0;
int firstTR = 0;
int lastTR = 0;
/****************** 가장 첫 입력란 위치 찾기 ******************/
int inIndex = 0;
int lastInIndex = 0;
int iptIndex = form.indexOf("= txtIndex) {
if (iptIndex >= selIndex) {
lastInIndex = iptIndex;
} else {
lastInIndex = selIndex;
}
} else {
if (iptIndex >= txtIndex) {
lastInIndex = iptIndex;
} else {
lastInIndex = txtIndex;
}
}
String inputBodyForm = null;
/************
* 가장 첫 입력란이 들어가 있는
*
* 태그 위치 찾기
***********/
for (int i = 0; true; i++) {
stTR = form.indexOf("
이 없을때.. 임시 방편
// 원칙은
이 꼭 있어야 한다.
if (edTR == -1) {
edTR = form.indexOf("", edTR + 2);
if (edTREnd == -1)
return form;
// throw new NullPointerException("End of TR could not be found. form: " + MString.getEllipsis(form, 500));
if (stTR < inIndex && inIndex < edTR) {
firstTR = stTR;
break;
}
}
if (stTR == -1 || edTR == -1 || edTREnd == -1)
return form;
// throw new NullPointerException("start TR is null or end TR is null. form: " + MString.getEllipsis(form, 500));
stTR = form.length();
for (int i = 0; true; i++) {
stTR = form.lastIndexOf("
이 없을때.. 임시 방편
// 원칙은
이 꼭 있어야 한다.
if (edTR == -1) {
edTR = form.indexOf("", edTR + 2);
if (edTREnd == -1)
break;
if (stTR < lastInIndex && lastInIndex < edTR) {
// inputBodyForm = form.substring(stTR, edTREnd+1);
lastTR = edTREnd + 1;
break;
} else if (lastInIndex > edTR) {
return form;
// throw new NullPointerException("Last Input Index exceeds end TR tag.");
}
}
if (stTR == -1 || edTR == -1 || edTREnd == -1)
return form;
// throw new NullPointerException("start TR is null or end TR is null.");
/************ 가장 마지막 입력란이 들어가 있는
태그 위치 찾기 ***********/
inputBodyForm = form.substring(firstTR, lastTR);
// return null;
return inputBodyForm;
}
public String getPutValScript() {
return putValStrBuf.toString();
}
public String getChangeAllScript() {
return changeAllStrBuf.toString();
}
public String getChangeAllScript(String baseScript, int endNumber, int rowCount) {
if (baseScript.trim().length() == 0)
return "";
StringBuilder strbuf = new StringBuilder();
String newScript = "";
int startIndex = 0;
int dot = 0;
String firstItemName = "";
String formName = "dform.";
for (int i = 0; i < rowCount; i++) {
newScript = baseScript;
while (true) {
startIndex = newScript.indexOf(formName);
if (startIndex == -1)
break;
dot = newScript.indexOf(".", startIndex + formName.length());
if (dot == -1)
break;
firstItemName = newScript.substring(startIndex + formName.length(), dot).replaceAll("[0-9]", "");// [A-Z][a-z]
strbuf.append(newScript.substring(0, startIndex + formName.length()));
strbuf.append(firstItemName);
strbuf.append(endNumber);
newScript = newScript.substring(dot, newScript.length());
}
endNumber = endNumber + 1;
strbuf.append(newScript);
}
return strbuf.toString();
}
public String getChangeAllScript(String baseScript, String[] stItemNameList, String[] stItemNumList,
int[] tableColNumList, String[] tableRowList) {
//System.out.println("*************************************************************************** base="+baseScript);
if (baseScript.trim().length() == 0)
return "";
String newScript = "";
String[] baseList = baseScript.split("[.]"); // 기본 스크립트를 .(dot)를 기준으로 각 배열로 나눈다.
String cellname = "";
String cellnum = "";
String position = "";
/******************************************************************************
* for문을 사용하여 기본 스크립트를 아래처럼 만든다 cellname = "F,G,H,F,F ...."; cellnum = "5,5,5,6,6 ..."; position =
* "1,3,5,7,9 ..."; <- 기본 스크립트 배열에서 각 셀네임이 있던 인덱스 위치
******************************************************************************/
for (int baseIdx = 0; baseIdx < baseList.length; baseIdx++)
{
for (int y = 0; y < stItemNameList.length; y++)
{
if (baseList[baseIdx].equals(stItemNameList[y] + stItemNumList[y]))
{
if (cellname.length() == 0)
{
cellname = stItemNameList[y];
cellnum = stItemNumList[y];
position = Integer.toString(baseIdx);
} else
{
cellname = cellname + "," + stItemNameList[y];
cellnum = cellnum + "," + stItemNumList[y];
position = position + "," + Integer.toString(baseIdx);
}
}
}
}
String[] cellnameList = cellname.split(",");
String[] cellnumList = cellnum.split(",");
String[] positionList = position.split(",");
String newCellname = "";
String newCellnum = "";
String newPosition = "";
int here = 0;
/******************************************************************************
* 늘어난 각 테이블의 행 숫자 만큼 그 테이블에 해당하는 cellname과 각 해당하는 cellnum를 만들어서 newCell...으로 만들어 준다.
******************************************************************************/
for (int i = 0; i < tableRowList.length; i++) {
for (int stp = 0; stp < Integer.parseInt(tableRowList[i]); stp++) {
int gap = 0;
int min = minNum(stItemNumList, here, here + tableColNumList[i]);
int max = maxNum(stItemNumList, here, here + tableColNumList[i]);
if (stp != 0) {
gap = getGap(stItemNumList, here, here + tableColNumList[i]);
for (int nn = here; nn < stItemNumList.length; nn++) {
stItemNumList[nn] = Integer.toString(Integer.parseInt(stItemNumList[nn]) + gap);
}
for (int b = 0; b < cellnumList.length; b++) {
if (min <= Integer.parseInt(cellnumList[b]))
cellnumList[b] = Integer.toString(Integer.parseInt(cellnumList[b]) + gap);
}
}
min = minNum(stItemNumList, here, here + tableColNumList[i]);
max = maxNum(stItemNumList, here, here + tableColNumList[i]);
int startf = 100000;
int endf = 0;
int readyEnd = 0;
for (int a = 0; a < cellnumList.length; a++) {
if (min <= Integer.parseInt(cellnumList[a]) && max >= Integer.parseInt(cellnumList[a])) {
if (baseList[Integer.parseInt(positionList[a]) + 1].indexOf("=") != -1) {
if (startf > a)
startf = a;
readyEnd = a;
}
}
if (max < Integer.parseInt(cellnumList[a])) {
if ((baseList[Integer.parseInt(positionList[a]) + 1]).indexOf("=") != -1) {
if (readyEnd > endf)
endf = a - 1;
}
}
}
if (readyEnd > endf)
endf = cellnumList.length - 1;
for (int incell = startf; incell <= endf; incell++) {
if (newCellname.length() == 0) {
newCellname = cellnameList[incell];
newCellnum = cellnumList[incell];
newPosition = positionList[incell];
} else {
newCellname = newCellname + "," + cellnameList[incell];
newCellnum = newCellnum + "," + cellnumList[incell];
newPosition = newPosition + "," + positionList[incell];
}
}
}
here = here + tableColNumList[i];
}
/*** script로 다시 만들기 ***/
String[] newCellnameList = newCellname.split(",");
String[] newCellnumList = newCellnum.split(",");
String[] newPositionList = newPosition.split(",");
int cellhere = 0;
for (int m = 0; m < baseList.length; m++) {
if (cellhere < newCellnameList.length && m == Integer.parseInt(newPositionList[cellhere])) {
if (baseList[m - 1].indexOf(";") > 0) {
String[] tmpS = baseList[m - 1].split(";");
if (baseList[m + 1].indexOf(";") > 0) {
String[] tmpE = baseList[m + 1].split(";");
newScript = newScript + tmpS[1] + "." + newCellnameList[cellhere] + newCellnumList[cellhere]
+ "." + tmpE[0] + ";";
} else {
newScript = newScript + tmpS[1] + "." + newCellnameList[cellhere] + newCellnumList[cellhere]
+ ".";
}
} else {
if (baseList[m + 1].indexOf(";") > 0) {
String[] tmpE = baseList[m + 1].split(";");
newScript = newScript + baseList[m - 1] + "." + newCellnameList[cellhere]
+ newCellnumList[cellhere] + "." + tmpE[0] + ";";
} else {
newScript = newScript + baseList[m - 1] + "." + newCellnameList[cellhere]
+ newCellnumList[cellhere] + ".";
}
}
cellhere++;
}
if (cellhere < newCellnameList.length && (m + 1) >= baseList.length)
m = -1;
}
newScript.replaceAll("[..]", "[.]");
return newScript;
}
public int getGap(String[] startNum, int start, int end) {
int top = -1;
int bottom = 100000;
for (int i = start; i < end; i++) {
if (bottom > Integer.parseInt(startNum[i]))
bottom = Integer.parseInt(startNum[i]);
if (top < Integer.parseInt(startNum[i]))
top = Integer.parseInt(startNum[i]);
}
if (top - bottom < 0)
return 0;
return (top - bottom + 1);
}
public int minNum(String[] startNum, int start, int end) {
int bottom = 100000;
for (int i = start; i < end; i++) {
if (bottom > Integer.parseInt(startNum[i]))
bottom = Integer.parseInt(startNum[i]);
}
return bottom;
}
public int maxNum(String[] startNum, int start, int end) {
int top = -1;
for (int i = start; i < end; i++) {
if (top < Integer.parseInt(startNum[i]))
top = Integer.parseInt(startNum[i]);
}
return top;
}
}