+////version 3\r
+var dragStart_td = 0;\r
+var dragStart_tr = 0;\r
+var dragEnd_td = 0;\r
+var dragEnd_tr = 0;\r
+//tmp gia ta loops & check gia to last state\r
+var tmp_dragStart_td;\r
+var tmp_dragStart_tr;\r
+var tmp_dragEnd_td;\r
+var tmp_dragEnd_tr;\r
+var isDragging = false;\r
+var ctrlPressed = false;\r
+// try stop \r
+var continueExecuting = false;\r
+var isExecuting = false;\r
+\r
+\r
+\r
+function rangeMouseDown(e) {\r
+ if (Debug) console.time("mouse:rangeMouseDown");\r
+ if (isRightClick(e)) {\r
+ return false;\r
+ } else {\r
+ dragStart_tr = $(this).parent().index();\r
+ dragStart_td = $(this).index();\r
+ dragEnd_tr = dragStart_tr;\r
+ dragEnd_td = dragStart_td;\r
+ //alert(dragStart_tr);\r
+ //var allCells = $("#tblReservation td");\r
+ //dragStart = allCells.index($(this));\r
+\r
+ if ( $(this).hasClass("free"))\r
+ $(this).addClass("selected_tmp");\r
+\r
+ isDragging = true;\r
+ //selectRange();\r
+\r
+ if (typeof e.preventDefault != 'undefined') { e.preventDefault(); }\r
+ document.documentElement.onselectstart = function () { return false; };\r
+ }\r
+ if (Debug) console.timeEnd("mouse:rangeMouseDown");\r
+}\r
+\r
+function rangeMouseUp(e) {\r
+ if (Debug) console.time("mouse:rangeMouseUp");\r
+ if (isRightClick(e)) {\r
+ return false;\r
+ } else {\r
+ //var allCells = $("#tblReservation td");\r
+ //dragEnd = allCells.index($(this));\r
+\r
+ dragEnd_tr = $(this).parent().index();\r
+ dragEnd_td = $(this).index();\r
+\r
+ isDragging = false;\r
+ selectRange(false);\r
+\r
+ document.documentElement.onselectstart = function () { return true; };\r
+ }\r
+ if (Debug) console.timeEnd("mouse:rangeMouseUp");\r
+}\r
+\r
+function rangeMouseMove(e) {\r
+ //if (Debug) console.time("mouse:rangeMouseMove");\r
+ if (isDragging) {\r
+ dragEnd_tr = $(this).parent().attr('data-trindex');\r
+ dragEnd_td = $(this).attr('data-tdindex');\r
+\r
+ //if (Debug) this.debug('foo');\r
+\r
+ if ((dragEnd_tr != tmp_dragEnd_tr) || (dragEnd_td != tmp_dragEnd_td)) {\r
+ //console.log(dragEnd_tr + " - " + tmp_dragEnd_tr);\r
+ //console.log(dragEnd_td + " - " + tmp_dragEnd_td);\r
+ //selectRange(true);\r
+ }\r
+ }\r
+ //if (Debug) console.timeEnd("mouse:rangeMouseMove");\r
+}\r
+\r
+function selectRange(IsTemp) {\r
+ if (Debug) console.time("mouse:---selectRange");\r
+\r
+ if (!ctrlPressed)\r
+ $("#" + rsvrTblNm + " td:not([class='info'],[class='closed'])").removeClass('selected selected_tmp').addClass('free');\r
+\r
+ tmp_dragStart_td = dragStart_td;\r
+ tmp_dragStart_tr = dragStart_tr;\r
+ tmp_dragEnd_td = dragEnd_td;\r
+ tmp_dragEnd_tr = dragEnd_tr;\r
+\r
+ if (tmp_dragStart_td > tmp_dragEnd_td) {\r
+ var tmp = tmp_dragStart_td;\r
+ tmp_dragStart_td = tmp_dragEnd_td;\r
+ tmp_dragEnd_td = tmp;\r
+ }\r
+\r
+ if (tmp_dragStart_tr > tmp_dragEnd_tr) {\r
+ var tmp = tmp_dragStart_tr;\r
+ tmp_dragStart_tr = tmp_dragEnd_tr;\r
+ tmp_dragEnd_tr = tmp;\r
+ }\r
+\r
+ //alert("tmp_dragStart_td:" + tmp_dragStart_td + "\n tmp_dragStart_tr:" + tmp_dragStart_tr + "\n tmp_dragEnd_td:" + tmp_dragEnd_td + "\n tmp_dragEnd_tr:" + tmp_dragEnd_tr);\r
+\r
+\r
+ for (i = tmp_dragStart_tr; i <= tmp_dragEnd_tr; i++) {\r
+ for (j = tmp_dragStart_td; j <= tmp_dragEnd_td; j++) {\r
+ //alert("i:" + i + "j:" + j);\r
+ var cell = $('#' + rsvrTblNm + ' tbody tr:eq(' + i + ') td:eq(' + j + ')');\r
+ //$(cell)\r
+ curClass = $(cell).attr("class");\r
+ //alert(curClass);\r
+ switch (curClass) {\r
+ case "free_tmp":\r
+ $(cell).removeClass();\r
+ if (IsTemp)\r
+ $(cell).addClass("free_tmp");\r
+ else\r
+ $(cell).addClass("free");\r
+ break;\r
+ case "free":\r
+ $(cell).removeClass();\r
+ if (IsTemp)\r
+ $(cell).addClass("selected_tmp");\r
+ else\r
+ $(cell).addClass("selected");\r
+ break;\r
+ case "selected_tmp":\r
+ $(cell).removeClass();\r
+ if (IsTemp)\r
+ $(cell).addClass("selected_tmp");\r
+ else\r
+ $(cell).addClass("selected");\r
+ break;\r
+ case "selected":\r
+ $(cell).removeClass();\r
+ if (IsTemp)\r
+ $(cell).addClass("free_tmp");\r
+ else\r
+ $(cell).addClass("free");\r
+ break;\r
+ case "closed":\r
+ //do nothing\r
+ //alert("not allowed!");\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ /*if (dragEnd + 1 < dragStart) { // reverse select\r
+ //alert(1);\r
+ $("#tblReservation td:not([class='info'])").slice(dragEnd, dragStart + 1).addClass('selected');\r
+ } else {\r
+ alert(dragStart + "-" + dragEnd);\r
+ $("#tblReservation td:not([class='info'])").slice(dragStart, dragEnd).addClass('selected');\r
+ }*/\r
+\r
+\r
+ if (Debug) console.timeEnd("mouse:---selectRange");\r
+}\r
+\r
+function ClearTableSelection(){\r
+ $('#' + rsvrTblNm + ' .selected').addClass("free").removeClass("selected");\r
+}\r
+\r
+\r