D:\Sam\InterviewsMaterial\SiteWorx\SiteWorxTest\web\jsp\browserSideCalculation.jsp
  1 <%-- 
  2     Document   : browserSideCalculation
  3     Created on : Oct 8, 2013, 2:37:22 PM
  4     Author     : sameldin
  5 --%>
  6 <%@ page import="java.util.ArrayList"%>
  7 <%@ page import="java.io.*"%>
  8 <%@ page import="constants.*"%>
  9 <%@ page import="utils.*"%>
 10 
 11 <%@page contentType="text/html" pageEncoding="UTF-8"%>
 12 <!DOCTYPE html>
 13 <script language="JavaScript" type="text/javascript">
 14         function addRow(tableID) 
 15         {      
 16             var locaCountNode = document.getElementById('countUpTo5DigitsField');
 17             var localCount = locaCountNode.value;
 18             if(localCount >= 5)
 19             {
 20                 alert('===> Only Five entries are allowed');
 21                 document.getElementById('enterDigit').value = "";                
 22                 return;                                    
 23             }
 24             var digitFieldNode = document.getElementById('enterDigit');
 25             var localIntegerEntered = digitFieldNode.value;
 26             localIntegerEntered = localIntegerEntered.replace(/\s/g,"");
 27             if(localIntegerEntered=="")
 28             {
 29                 alert('===> Digit Number Entered: Please enter a didgit with the value between 1 to 99,999');
 30                 document.getElementById('enterDigit').value = "";
 31                 digitFieldNode.focus();
 32                 return;                
 33             }
 34             if(isNaN(localIntegerEntered))
 35             {
 36                 alert('===> Digit Number Entered: ' + localIntegerEntered + ' <=== ' + ' Value entered is not a number ');
 37                 document.getElementById('enterDigit').value = "";
 38                 digitFieldNode.focus();                
 39                 return;                
 40             }            
 41             if( (localIntegerEntered < 1) || (localIntegerEntered > 99999))
 42             {
 43                 alert('===> Digit Number Entered: ' + localIntegerEntered + ' Please enter a didgit with the value between 1 to 99,999');
 44                 document.getElementById('enterDigit').value = "";
 45                 digitFieldNode.focus();
 46                 return;                
 47             }
 48      
 49             var table = document.getElementById(tableID);      
 50      
 51             var rowCount = table.rows.length;      
 52             var row = table.insertRow(rowCount);      
 53      
 54             var cell1 = row.insertCell(0);      
 55             var element1 = document.createElement("input");      
 56             element1.type = "checkbox";      
 57             cell1.appendChild(element1);      
 58             var cell2 = row.insertCell(1);      
 59             var element2 = document.createElement("input");      
 60             element2.type = "text";  
 61             //=================================
 62             element2.value=digitFieldNode.value;
 63             //==================================
 64             var localTotal = Number(document.getElementById('sumOfDigitsField').value);
 65             localTotal += Number(digitFieldNode.value);
 66             document.getElementById('sumOfDigitsField').value = localTotal;
 67             //==================================
 68             element2.readOnly = true;
 69             digitFieldNode.value ="";
 70             //==================================
 71             cell2.appendChild(element2);      
 72             //==================================    
 73             var localColumnCount = Number(document.getElementById('countUpTo5DigitsField').value);
 74             localColumnCount += 1;
 75             document.getElementById('countUpTo5DigitsField').value = localColumnCount;
 76             //==================================
 77             var localAverage = Number(localTotal/localColumnCount);
 78             document.getElementById('averageField').value = localAverage;
 79             //==================================
 80             lowHigh();        
 81         }      
 82     //================================
 83         function deleteRow(tableID) {      
 84             try {      
 85             var table = document.getElementById(tableID);      
 86             var rowCount = table.rows.length;      
 87      
 88             for(var i=0; i<rowCount; i++) 
 89             {      
 90                 var row = table.rows[i];      
 91                 var chkbox = row.cells[0].childNodes[0];      
 92                 if(null != chkbox && true == chkbox.checked) 
 93                 {                        
 94                     var inputFieldDigits = row.cells[1].childNodes[0].value;
 95                     var tempSum = Number(document.getElementById('sumOfDigitsField').value - inputFieldDigits)
 96                     document.getElementById('sumOfDigitsField').value = tempSum;            
 97                     //=======================================
 98                     table.deleteRow(i);      
 99                     rowCount--;      
100                     i--;      
101                     //=======================================
102                     var localColumnCount = Number(document.getElementById('countUpTo5DigitsField').value);
103                     localColumnCount -= 1;
104                     if(localColumnCount < 0)
105                         localColumnCount=0;
106                     document.getElementById('countUpTo5DigitsField').value = localColumnCount;
107                     if(localColumnCount > 1)
108                     {
109                         document.getElementById('averageField').value = Number(tempSum /localColumnCount );
110                     }
111                     else
112                     {
113                         document.getElementById('averageField').value = Number(tempSum );
114                     }
115                 }      
116             }      
117             }catch(e) 
118             {      
119                 alert(e);      
120             }      
121             //==================================
122             lowHigh();        
123         }          
124     //================================
125         function addValues(passedValue)
126         {
127             document.fiveDigitNumbersForm.digitNumber_1 = passedValue;
128             document.getElementById('sumOfDigitsField').value = passedValue;
129             
130             
131         }
132     //================================
133         function lowHigh()
134         {
135             var table = document.getElementById('dataTable');      
136             var rowCount = table.rows.length;  
137             var highDigit = 1;
138             if(parseInt(rowCount,10)<parseInt(highDigit,10))
139             {
140                 document.getElementById('highestField').value = 0;
141                 document.getElementById('lowestField').value = 0;
142                 document.getElementById('medianField').value = 0;                
143                 return;
144             }
145             //========================================
146             function sortNumber(num1, num2) 
147             {
148                 return num1 - num2;
149             }
150             //========================================
151             var lowDigit = 99999;
152             var stringOfDigits = "";
153             for(var i=0; i<rowCount; i++) 
154             {      
155                 var row = table.rows[i];                         
156                 var inputFieldDigits = row.cells[1].childNodes[0].value;
157                 stringOfDigits += inputFieldDigits + ";";
158                 if(parseInt(inputFieldDigits,10)>parseInt(highDigit,10))
159                 {
160                       highDigit =  inputFieldDigits; 
161                 }
162                 if(parseInt(inputFieldDigits,10)< parseInt(lowDigit,10))
163                 {
164                       lowDigit =  inputFieldDigits; 
165                 }                
166             }
167             document.getElementById('highestField').value = highDigit;
168             document.getElementById('lowestField').value = lowDigit;
169             switch(rowCount)
170             {
171                 case 1:
172                     document.getElementById('medianField').value = lowDigit;
173                     break;
174                 case 2:
175                     var firstDigit = Number(lowDigit);
176                     var secondDigit = Number(highDigit);
177                     var total = Number(firstDigit + secondDigit);
178                     document.getElementById('medianField').value = Number(total/2);
179                     break;
180                 case 3:
181                     var ThreeDigitsArray = stringOfDigits.split(';');
182                     if( (ThreeDigitsArray[0] != lowDigit) && (ThreeDigitsArray[0] != highDigit))
183                     {
184                         document.getElementById('medianField').value = ThreeDigitsArray[0];                           
185                     }
186                     else
187                     if( (ThreeDigitsArray[1] != lowDigit) && (ThreeDigitsArray[1] != highDigit))
188                     {
189                         document.getElementById('medianField').value = ThreeDigitsArray[1];                           
190                     }
191                     else
192                         document.getElementById('medianField').value = ThreeDigitsArray[2];                           
193                     break;
194                 case 4:
195                     var fourDigitsArray = stringOfDigits.split(';');
196                     var sortedArray = fourDigitsArray.sort(sortNumber);
197                     var firstDigit = Number(sortedArray[2]);
198                     var secondDigit = Number(sortedArray[3]);                    
199                     var total = Number(firstDigit + secondDigit);
200                     document.getElementById('medianField').value = Number(total/2);                    
201                     break;
202                 case 5:
203                     var fiveDigitsArray = stringOfDigits.split(';');
204                     var sortedArray = fiveDigitsArray.sort(sortNumber);
205                     document.getElementById('medianField').value = sortedArray[3];                           
206                     break;
207                 default:
208                     document.getElementById('medianField').value = 0;                
209             }            
210         }
211     //================================
212         function submitDigits()
213         {
214             // alert("Due to Hosting issue, our Forms are not working at this point and please accept our apologies.");
215                 // return;
216                 var parameterString = "<%=Constants.INPUT_DIGIT_FLAG_STRING%>="
217                                 + "-1" 
218                                 + "&"
219                                 + "<%=Constants.USER_ID_NUMBER_STRING%>="
220                                 + document.getElementById('<%=Constants.USER_ID_NUMBER_STRING%>').value
221                                 + "&"
222                                 + "<%=Constants.USER_FIRST_NAME_STRING%>="
223                                 + document.getElementById('<%=Constants.USER_FIRST_NAME_STRING%>').value
224                                 + "&"
225                                 + "<%=Constants.USER_LAST_NAME_STRING%>="
226                                 + document.getElementById('<%=Constants.USER_LAST_NAME_STRING%>').value                            
227                                 + "&"
228                                 + "<%=Constants.USER_EMAIL_ADDRESS_STRING%>="
229                                 + document.getElementById('<%=Constants.USER_EMAIL_ADDRESS_STRING%>').value
230                                 + "&"
231                                 + "<%=Constants.TOTAL_COUNT_STRING%>="
232                                 + document.getElementById('countUpTo5DigitsField').value
233                                 + "&"
234                                 + "<%=Constants.SUM_VALUE_STRING%>="
235                                 + document.getElementById('sumOfDigitsField').value
236                                 + "&"
237                                 + "<%=Constants.AVERAGE_VALUE_STRING%>="
238                                 + document.getElementById('averageField').value
239                                 + "&"
240                                 + "<%=Constants.MEDIAN_VALUE_STRING%>="
241                                 + document.getElementById('medianField').value
242                                 + "&"
243                                 + "<%=Constants.HIGHTEST_VALUE_STRING%>="
244                                 + document.getElementById('highestField').value
245                                 + "&"
246                                 + "<%= Constants.LOWEST_VALUE_STRING%>="
247                                 + document.getElementById('lowestField').value;
248 
249 alert("==> " + parameterString);
250                 // 
251                 document.fiveDigitNumbersForm.action="/SiteWorxTest/SiteWorxFormServlet?" + parameterString;
252                 document.fiveDigitNumbersForm.submit();
253         }
254 //==========================================
255 </script>
256 
257 <html>
258     <head>
259         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
260         <title>JSP Page</title>
261     </head>
262     <body>
263 <FORM name="fiveDigitNumbersForm" id="fiveDigitNumbersForm"  action="" method="post" enctype="text/plain">
264 <input type="hidden" name="<%=Constants.INPUT_DIGIT_FLAG_STRING%>"              value="-1">
265 <input type="hidden" name="<%=Constants.DIGIT_NUMBER_1_STRING%>"                value="0">
266 <input type="hidden" name="<%=Constants.DIGIT_NUMBER_2_STRING%>"                value="0">
267 <input type="hidden" name="<%=Constants.DIGIT_NUMBER_3_STRING%>"                value="0">
268 <input type="hidden" name="<%=Constants.DIGIT_NUMBER_4_STRING%>"                value="0">
269 <input type="hidden" name="<%=Constants.DIGIT_NUMBER_2_STRING%>"                value="0">
270 <!--   ************************** -->
271 <input type="hidden" name="<%=Constants.TOTAL_COUNT_STRING%>"                   value="0">
272 <input type="hidden" name="<%=Constants.SUM_VALUE_STRING%>"                     value="0">
273 <input type="hidden" name="<%=Constants.AVERAGE_VALUE_STRING%>"                 value="0">
274 <input type="hidden" name="<%=Constants.MEDIAN_VALUE_STRING%>"                  value="0">
275 <input type="hidden" name="<%=Constants.HIGHTEST_VALUE_STRING%>"                value="0">
276 <input type="hidden" name="<%=Constants.LOWEST_VALUE_STRING%>"                  value="0">
277 <!--   ************************** -->
278 <TABLE  bgcolor="black"     WIDTH="50%" ALIGN=LEFT      BORDER=0        style="clear: left;">
279         </TR>
280             <TH>
281                 <img    
282                         border="0"      
283                         src="../images/TechnicalAssessment2.bmp" 
284                         width="120" 
285                         height="10"
286                         ALT="Technical Assessment"
287                         ALIGN="LEFT"
288                 >
289                 </TH>
290         </TR>
291 </TABLE>
292 <!--   ************************** -->
293 <BR>
294 <h2>Technical Assessment Test (Series of 5 Digit Numbers)</h2>
295 <h3>This JSP is designed for the following:</h3> 
296 <TABLE WIDTH="50%" BORDER=0 >
297                         <TR>
298                                 <TH     ALIGN=RIGHT VALIGN=TOP  WIDTH=20 style="font-size: 10pt; font-weight: normal; color: black">
299                 <Font size=4    face=helvetica>
300                 •
301                 </font>
302                                 </TH>
303                                 <TH     ALIGN=LEFT VALIGN=TOP   style="font-size: 10pt; font-weight: normal; color: black">
304 Take up to give 5 digits entries between 1 and 99,999
305                                 </TH>
306                         </TR>
307                         <TR>
308                                 <TH     ALIGN=RIGHT VALIGN=TOP  WIDTH=20 style="font-size: 10pt; font-weight: normal; color: black">
309                 <Font size=4    face=helvetica>
310                 •
311                 </font>
312                                 </TH>
313                                 <TH     ALIGN=LEFT VALIGN=TOP   style="font-size: 10pt; font-weight: normal; color: black">
314 Calculate: Sum, Average, Median, Highest and Lowest Numbers of the User's Input
315                                 </TH>
316                         </TR>
317                         <TR>
318                                 <TH     ALIGN=RIGHT VALIGN=TOP  WIDTH=20 style="font-size: 10pt; font-weight: normal; color: black">
319                 <Font size=4    face=helvetica>
320                 •
321                 </font>
322                                 </TH>
323                                 <TH     ALIGN=LEFT VALIGN=TOP   style="font-size: 10pt; font-weight: normal; color: black">
324 It also demo doing the calculation on the browser side and not the server side.
325                                 </TH>
326                         </TR>
327                         <TR>
328                                 <TH     ALIGN=RIGHT VALIGN=TOP  WIDTH=20 style="font-size: 10pt; font-weight: normal; color: black">
329                 <Font size=4    face=helvetica>
330                 •
331                 </font>
332                                 </TH>
333                                 <TH     ALIGN=LEFT VALIGN=TOP   style="font-size: 10pt; font-weight: normal; color: black">
334 The values are uploaded to server for server side tasks (Submit).
335                                 </TH>
336                         </TR>
337 </TABLE>
338 <!--   ************************** -->
339 <TABLE  WIDTH="600"  BORDER="0" CELLPADDING="0">
340         <TR>
341                                         <TH     WIDTH="100"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
342 First Name:
343                                         </TH>
344                                         <TH     ALIGN=LEFT      WIDTH="200"     sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
345                                                 <input type="input" id="<%=Constants.USER_FIRST_NAME_STRING%>" name="<%=Constants.USER_FIRST_NAME_STRING%>" value="Sam" style="font-size: 8pt; font-weight: normal; color: #000000;"    width:180;height:15"    disabled="disabled">
346                                         </TH>
347                                         <TH     WIDTH="100"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
348 Last Name:
349                                         </TH>
350                                         <TH     ALIGN=LEFT      WIDTH="200"     sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
351                                                 <input type="input" id="<%=Constants.USER_LAST_NAME_STRING%>" name="<%=Constants.USER_LAST_NAME_STRING%>" value="Eldin" style="font-size: 8pt; font-weight: normal; color: #000000;"    width:180;height:15"    disabled="disabled">
352                                         </TH>
353         </TR>
354         <TR>
355                                         <TH     WIDTH="100"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
356 User ID:
357                                         </TH>
358                                         <TH     ALIGN=LEFT      WIDTH="200"     sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
359                                                 <input type="input" id="<%=Constants.USER_ID_NUMBER_STRING%>" name="<%=Constants.USER_ID_NUMBER_STRING%>" value="123"   style="font-size: 8pt; font-weight: normal; color: #000000;"    width:180;height:15"    disabled="disabled">
360                                         </TH>
361                                         <TH     WIDTH="100"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
362 Email:
363                                         </TH>
364                                         <TH     ALIGN=LEFT      WIDTH="200"     sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
365                                                 <input type="input" id="<%=Constants.USER_EMAIL_ADDRESS_STRING%>" name="<%=Constants.USER_EMAIL_ADDRESS_STRING%>" value="Sam@SamEldin.com"      style="font-size: 8pt; font-weight: normal; color: #000000;"    width:180;height:15"    disabled="disabled">
366                                         </TH>
367         </TR>
368 </TABLE>
369 
370 <BR>
371 
372 <!--   ************************** -->
373 <TABLE WIDTH="50%"      bgcolor="white"  ALIGN=LEFT     BORDER=0        style="clear: left;">
374                 <TR>
375                                 <TH BGCOLOR="#006699" ALIGN=Center VALIGN=TOP sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
376 <font  color=white  size=3 face="TimesRoman">
377 Totals
378 </font>
379                                 </TH>
380                 </TR>
381                 <TR>
382                                 <TH BGCOLOR="#006699" ALIGN=Center VALIGN=TOP sans-serif; style="font-size: 10pt; font-weight: normal; color: #000000">
383                                 </TH>
384                 </TR>
385 </TABLE>
386 <table  id="totalTable"         name="totalTable"       align="LEFT" border="2" cellpadding="0" cellspacing="0" style="clear: left;">
387         <thead>
388                 <tr>  
389                         <th>Total Count</th>  
390                         <th>Sum</th>  
391                         <th>Average</th>  
392                         <th>Median</th>  
393                         <th>Highest</th>  
394                         <th>Lowest </th>  
395                 </tr>  
396         </thead>  
397         <tbody>  
398                 <tr>  
399                         <td><input id="countUpTo5DigitsField"   name="countUpTo5DigitsField"    type="text" disabled="disabled"      value="0"/></td>  
400                         <td><input id="sumOfDigitsField"        name="sumOfDigitsField" type="text" disabled="disabled"      value="0"/></td>  
401                         <td><input id="averageField"            name="averageField"     type="text" disabled="disabled"      value="0"/></td>  
402                         <td><input id="medianField"             name="medianField"      type="text" disabled="disabled"      value="0"/></td>  
403                         <td><input id="highestField"            name="highestField"     type="text" disabled="disabled"      value="0"/></td>  
404                         <td><input id="lowestField"             name="lowestField"      type="text" disabled="disabled"      value="0"/></td>  
405                 </tr>  
406         </tbody>
407 </table>
408 <BR>
409 <BR>
410 <BR>
411 <BR>
412 <!--   **************            
413     <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />     
414 ********** -->
415 <BR>
416 <h3>To Delete Row: select the Check-Box and click on "Delete" Button.</h3> 
417 <BR>
418 <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" style="clear: left;">
419 <BR>
420 <BR>
421 <TABLE id="dataTable" width="350px" border="1">     
422 <!--   **************            
423         <TR>     
424             <TD><INPUT type="checkbox" name="chk"/></TD>   
425             <TD> 1 </TD>    
426             <TD> <INPUT type="text" /> </TD>     
427         </TR>     
428 ********** -->
429 </TABLE>     
430 
431 <BR>
432 <TABLE  bgcolor="white"  ALIGN=LEFT     BORDER=0        style="clear: left;">
433         </TR>
434                 <TH     WIDTH="230"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 14pt; font-weight: normal; color: #000000">
435 <B><U>Enter Digit (1 to 99,999)</U></B>:
436                     <BR>
437 <font size="3"    face="TimesRoman">                    
438                     (May use Enter or Add Button)
439 </font>                    
440                 </TH>
441                 <TH     ALIGN=LEFT      sans-serif; style="font-size: 12pt; font-weight: normal; color: #000000">
442                         <input type="input" id="enterDigit" name="enterDigit"   style="font-size: 15pt; font-weight: normal; color: #000000;    width:180;"
443                         onchange="addRow('dataTable');">
444                 </TH>
445         <TR>
446         </TR>
447                 <TH     WIDTH="230"     ALIGN=LEFT      VALIGN=TOP      sans-serif; style="font-size: 14pt; font-weight: normal; color: #000000">
448                         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
449                 </TH>
450                 <TH     ALIGN=LEFT      sans-serif; style="font-size: 12pt; font-weight: normal; color: #000000">
451                         <button style="font-size: 12pt; font-weight: normal; color: #006699;    width:120;"     onClick="addColumn();">Add Input Value</button>
452                         <button style="font-size: 12pt; font-weight: normal; color: #006699;    width:120;"     onClick="reset();">Reset</button>
453                         <button style="font-size: 12pt; font-weight: normal; color: #006699;    width:120;"     onClick="submitDigits();">Submit</button>
454                 </TH>
455         <TR>
456 </TABLE>
457 
458 
459 </FORM>
460 <script src="http://www.google.com/jsapi" type="text/javascript"></script>
461 <script type="text/javascript">    google.load("jquery", "1.3.2");</script>
462 <script> 
463     $(document).ready(function(){
464 
465         $('#enterDigit').keydown(function (e) {
466           var keyCode = e.keyCode || e.which;
467 
468           if (keyCode == 13) {
469               addRow('dataTable');
470             return false;
471           }
472         });
473     });
474 </script>
475         
476     </body>
477 </html>