//--------------------------------------------------------------
// Copyright (C) 2006 Michael Schwarz (http://www.ajaxpro.info).
// All rights reserved.
//--------------------------------------------------------------

// prototype.js
Object.extend = function(dest, source, replace) {
	for(var prop in source) {
		if(replace == false && dest[prop] != null) { continue; }
		dest[prop] = source[prop];
	}
	return dest;
};

Object.extend(Function.prototype, {
	apply: function(o, a) {
		var r, x = "__fapply";
		if(typeof o != "object") { o = {}; }
		o[x] = this;
		var s = "r = o." + x + "(";
		for(var i=0; i<a.length; i++) {
			if(i>0) { s += ","; }
			s += "a[" + i + "]";
		}
		s += ");";
		eval(s);
		delete o[x];
		return r;
	},
	bind: function(o) {
		if(!Function.__objs) {
			Function.__objs = [];
			Function.__funcs = [];
		}
		var objId = o.__oid;
		if(!objId) {
			Function.__objs[objId = o.__oid = Function.__objs.length] = o;
		}

		var me = this;
		var funcId = me.__fid;
		if(!funcId) {
			Function.__funcs[funcId = me.__fid = Function.__funcs.length] = me;
		}

		if(!o.__closures) {
			o.__closures = [];
		}

		var closure = o.__closures[funcId];
		if(closure) {
			return closure;
		}

		o = null;
		me = null;

		return Function.__objs[objId].__closures[funcId] = function() {
			return Function.__funcs[funcId].apply(Function.__objs[objId], arguments);
		};
	}
}, false);

Object.extend(Array.prototype, {
	push: function(o) {
		this[this.length] = o;
	},
	addRange: function(items) {
		if(items.length > 0) {
			for(var i=0; i<items.length; i++) {
				this.push(items[i]);
			}
		}
	},
	clear: function() {
		this.length = 0;
		return this;
	},
	shift: function() {
		if(this.length == 0) { return null; }
		var o = this[0];
		for(var i=0; i<this.length-1; i++) {
			this[i] = this[i + 1];
		}
		this.length--;
		return o;
	}
}, false);

Object.extend(String.prototype, {
	trimLeft: function() {
		return this.replace(/^\s*/,"");
	},
	trimRight: function() {
		return this.replace(/\s*$/,"");
	},
	trim: function() {
		return this.trimRight().trimLeft();
	},
	endsWith: function(s) {
		if(this.length == 0 || this.length < s.length) { return false; }
		return (this.substr(this.length - s.length) == s);
	},
	startsWith: function(s) {
		if(this.length == 0 || this.length < s.length) { return false; }
		return (this.substr(0, s.length) == s);
	},
	split: function(c) {
		var a = [];
		if(this.length == 0) return a;
		var p = 0;
		for(var i=0; i<this.length; i++) {
			if(this.charAt(i) == c) {
				a.push(this.substring(p, i));
				p = ++i;
			}
		}
		a.push(s.substr(p));
		return a;
	}
}, false);

Object.extend(String, {
	format: function(s) {
		for(var i=1; i<arguments.length; i++) {
			s = s.replace("{" + (i -1) + "}", arguments[i]);
		}
		return s;
	},
	isNullOrEmpty: function(s) {
		if(s == null || s.length == 0) {
			return true;
		}
		return false;
	}
}, false);

if(typeof addEvent == "undefined")
	addEvent = function(o, evType, f, capture) {
		if(o == null) { return false; }
		if(o.addEventListener) {
			o.addEventListener(evType, f, capture);
			return true;
		} else if (o.attachEvent) {
			var r = o.attachEvent("on" + evType, f);
			return r;
		} else {
			try{ o["on" + evType] = f; }catch(e){}
		}
	};
	
if(typeof removeEvent == "undefined")
	removeEvent = function(o, evType, f, capture) {
		if(o == null) { return false; }
		if(o.removeEventListener) {
			o.removeEventListener(evType, f, capture);
			return true;
		} else if (o.detachEvent) {
			o.detachEvent("on" + evType, f);
		} else {
			try{ o["on" + evType] = function(){}; }catch(e){}
		}
};

/*تعديلات بواسطة ابو البراء naif.alharbi@gmail.com*/
/*actionGrid.js*/
/*****************************************************************/
/*
pageNJD.prototype.Start = function(iEdit) {
NJDAjaxObject.NJD(true, this.searchParam, this.pageIndex, this.pageSize, this.getData.bind(this), iEdit);
}
*/
//حفظ السجلات
pageNJD.prototype.SaveRow = function(evt) {

    var sData = new Array();
    var sParam = new Array();

    var srcEl;
    var iRowIndex = 0;

    if (window.event) {
        srcEl = window.event.srcElement;
    } else if (evt) {
        srcEl = evt.target;
    }

    iRowIndex = srcEl.parentNode.parentNode.rowIndex - 2;

    sData[0] = getRowsValue(iRowIndex, 0, sParam, this.subIOToSave, this.subIdentity);

    NJDAjaxObject.UpdateRows(this.mainParametersValues, this.mainParametersValues, this.pageIndex, sData, sParam, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);

    //this.reFillRowDDLs(iRowIndex);

};

//حذف السجلات
pageNJD.prototype.DeleteRow = function(evt) {

    var sData = new Array();
    var srcEl = null;
    var iRowIndex = 0;

    if (window.event) {
        srcEl = window.event.srcElement;
    } else if (evt) {
        srcEl = evt.target;
    }

    iRowIndex = srcEl.parentNode.parentNode.rowIndex - 2;

    sData[0] = srcEl.parentNode.parentNode.id;

    NJDAjaxObject.DeleteRows(this.mainParametersValues, this.mainParametersValues, this.pageIndex, sData, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);

    //this.reFillRowDDLs(iRowIndex);

};


//إدراج سجل جديد
pageNJD.prototype.InsertRow = function(evt) {

    var sData = new Array();
    var srcEl = null;
    var iRowIndex = 0;
    var sParam = new Array();

    if (window.event) {
        srcEl = window.event.srcElement;
    } else if (evt) {
        srcEl = evt.target;
    }

    iRowIndex = srcEl.parentNode.parentNode.rowIndex; //-3;

    //alert(srcEl.value);
    //iRowIndex     :Row Index .
    //--------
    //iType : 0= Row From The Body To Edit .
    //      : 1= Row From Tge Header To Insert .
    //--------
    //sRecID: مصفوفة لتخزين رموز السجلات لعمليات التحديث
    //
    //--------
    //sToSaveCTR: مصفوفة لتحديد الأعمدة التي سنتعامل معها
    //
    //iIdentity: 0= The ID Create From Us.
    //           1= The ID Will Be Create Outo.

    sData[0] = getRowsValue(iRowIndex, 1, sParam, this.subIOToSave, this.subIdentity);

    NJDAjaxObject.InsertRows(this.mainParametersValues, this.mainParametersValues, this.pageIndex, sData, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);

};

//حفظ مجموعة سجلات
pageNJD.prototype.SaveMultiRows = function() {
    var iTrLoop = 0;
    var iTrCount = 0;
    var sData = new Array();
    var sParam = new Array();
    var iRowIndex = 0;
    var iArrayIndex = 0;
    var trList = $TableBodys("PDData")[0].getElementsByTagName("TR"); //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    iLiCount = trList.length - 1;
    for (iTrLoop = 0; iTrLoop <= iLiCount; iTrLoop++) {
        if (trList.item(iTrLoop).style.display != "none") {
            var cTemp = trList.item(iTrLoop).getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0];
            if (cTemp.checked == true) {
                sData[iArrayIndex] = getRowsValue(iTrLoop, 0, sParam, this.subIOToSave, this.subIdentity);
                cTemp.checked = false;
                iArrayIndex++;
            }
        }
    }

    if (sData.length == 0) {
        alert("لم تقم بتحديد السجلات لتحديثها!!!");
        return;
    }
    else {
        NJDAjaxObject.UpdateRows(this.mainParametersValues, this.mainParametersValues, this.pageIndex, sData, sParam, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
    }
};

//حذف مجموعة سجلات
pageNJD.prototype.DeleteMultiRows = function() {
    var iTrLoop = 0;
    var iTrCount = 0;
    var sData = new Array();
    var iRowIndex = 0;
    var iArrayIndex = 0;
    var trList = $TableBodys("PDData")[0].getElementsByTagName("TR"); //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    iLiCount = trList.length - 1;
    for (iTrLoop = 0; iTrLoop <= iLiCount; iTrLoop++) {
        if (trList.item(iTrLoop).style.display != "none") {
            var cTemp = trList.item(iTrLoop).getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0];
            if (cTemp.checked == true) {
                sData[iArrayIndex] = trList[iTrLoop].id; // getRowsValue(iTrLoop, 0);
                cTemp.checked = false;
                iArrayIndex++;
            }
        }
    }

    if (sData.length == 0) {
        alert("لم تقم بتحديد السجلات لحذفها!!!");
        return;
    }
    else {
        NJDAjaxObject.DeleteRows(this.mainParametersValues, this.mainParametersValues, this.pageIndex, sData, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
    }
};

//الصفحة السابقة
pageNJD.prototype.prevPage = function() {
    document.getElementById("btnNext").disabled = false;
    if (this.pageIndex <= 0) {
        return;
    }
    if (this.pageIndex <= 1) document.getElementById("btnPrev").disabled = true;

    this.pageIndex--;

    NJDAjaxObject.GetPaging(this.mainParametersValues, this.pageIndex, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
};

//الصفحة التالية
pageNJD.prototype.nextPage = function() {
    this.pageIndex++;

    document.getElementById("btnPrev").disabled = false;
    NJDAjaxObject.GetPaging(this.mainParametersValues, this.pageIndex, this.displyData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
};

/*تعديلات بواسطة ابو البراء naif.alharbi@gmail.com*/
/*actionInline.js*/
/*****************************************************************/
/*دالة جلب البيانات من السيرفر عند أول تحميل للصفحة*/
pageNJD.prototype.loadPageData = function() {


    var smainParam = GetParameters(this.mainExtaParametersType, this.mainParametersValues, this.managementID, this.yearID, this.semesterID);
    var ssubParam = GetParameters(this.subExtaParametersType, this.subParametersValues, this.managementID, this.yearID, this.semesterID);

    NJDAjaxObject.GetWholePageData(this.mainListParametersValues, this.subListParametersValues,
                                    smainParam, ssubParam, this.displayingWholePageData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
};

//إجراء بحث بواسطة الرمز
pageNJD.prototype.searchByID = function() {

    if ($("txtSCtrID010"))
        this.mainParametersValues = $("txtSCtrID010").value;
    else
        this.mainParametersValues = $("txtSCtrID006").value;



    var smainParam = this.mainParametersValues;
    var ssubParam = this.mainParametersValues;
    this.pageIndex = 0; //تصفير تحركات الشبكة
    //this.displayingReturnData.bind(this)
    NJDAjaxObject.Search(smainParam, ssubParam, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);

};

//إجراء حفظ البيانات)في حال صفحة واحدة طويله
pageNJD.prototype.saveData = function() {
    var oTopData = new Array();
    var sTopData = "";
    var oDownData = new Array();
    var sDownData = "";
    var oEle = null;

    if ($("txtSCtrID010")) {
        this.mainParametersValues = $("txtSCtrID010").value;
        this.subParametersValues = $("txtSCtrID010").value;
    }
    else {
        this.mainParametersValues = $("txtSCtrID006").value;
        this.subParametersValues = $("txtSCtrID006").value;
    }

    //قراءة اعلى الصفحة
    iIOCount = this.mainIOControls.length - 1;

    for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
        iListIndex = 0;
        sPerfix = "";
        sPerfix = this.mainIOControls[iIOloop].substr(0, 3);
        oEle = null;
        oEle = $(this.mainIOControls[iIOloop]);
        switch (sPerfix) {
            case "ddl":
                oTopData[iIOloop] = oEle.value;
                break;
            case "txt":
                oTopData[iIOloop] = oEle.value;
                break;
            case "enc":
                oTopData[iIOloop] = 'Enc:' + oEle.value;
                break;
            case "pas":
                oTopData[iIOloop] = 'Enc:' + oEle.value;
                break;
            case "chk":
                oTopData[iIOloop] = oEle.checked;
                break;
        }
    }

    // في حال ظرورة حفظ بيانات المنطقة والسنة والفصل
    switch (this.mainExtaParametersType) {
        case 1:
            oTopData[iIOloop] = this.managementID;
            break;
        case 2:
            oTopData[iIOloop + 1] = this.yearID;
            oTopData[iIOloop + 2] = this.semesterID;
            break;
        case 3:
            oTopData[iIOloop] = this.managementID;
            oTopData[iIOloop + 1] = this.yearID;
            oTopData[iIOloop + 2] = this.semesterID;
            break;
    }

    sTopData = oTopData.join("|");

    // عمل شرط لتحاشي المشاكل في حال التعامل مع بيانات تفاصيل شبكة
    if (this.pageType == 1) {
        //قراءة اسفل الصفحة
        iIOCount = this.subIOControls.length - 1;

        oDownData[0] = oTopData[0];

        for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
            iListIndex = 0;
            sPerfix = "";
            sPerfix = this.subIOControls[iIOloop].substr(0, 3);
            oEle = null;
            oEle = $(this.subIOControls[iIOloop]);
            switch (sPerfix) {
                case "ddl":
                    oDownData[iIOloop + 1] = oEle.value;
                    break;
                case "txt":
                    oDownData[iIOloop + 1] = oEle.value;
                    break;
                case "enc":
                    oDownData[iIOloop + 1] = 'Enc:' + oEle.value;
                    break;
                case "pas":
                    oDownData[iIOloop + 1] = 'Enc:' + oEle.value;
                    break;
                case "chk":
                    oDownData[iIOloop + 1] = oEle.checked;
                    break;
            }
        }

        // في حال ظرورة حفظ بيانات المنطقة والسنة والفصل
        switch (this.subExtaParametersType) {
            case 1:
                oDownData[iIOloop] = this.managementID;
                break;
            case 2:
                oDownData[iIOloop + 1] = this.yearID;
                oDownData[iIOloop + 2] = this.semesterID;
                break;
            case 3:
                oDownData[iIOloop] = this.managementID;
                oDownData[iIOloop + 1] = this.yearID;
                oDownData[iIOloop + 2] = this.semesterID;
                break;
        }

        sDownData = oDownData.join("|");
    }

    var smainParam = GetParameters(this.mainExtaParametersType, this.mainParametersValues, this.managementID, this.yearID, this.semesterID);
    var ssubParam = GetParameters(this.subExtaParametersType, this.subParametersValues, this.managementID, this.yearID, this.semesterID);

    var bValue = false;
    var sValue = 'جديد';

    if ($("btnTNew")) {
        switch ($("btnTNew").value) {
            case 'جديد': //حفظ البيانات كتعديل
                NJDAjaxObject.Update(smainParam, ssubParam, sTopData, sDownData, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
                break;
            case 'تراجع': //حفظ البيانات كسجل جديد
                $("btnTNew").value = sValue;
                /*
                if ($("txtSCtrID010"))
                $("txtSCtrID010").disabled = true;
                else
                $("txtSCtrID006").disabled = true;
                */
                $("btnSearchID").disabled = bValue;
                if ($("btnSearchValue")) $("btnSearchValue").disabled = bValue;
                $("btnTDelete").disabled = bValue;

                NJDAjaxObject.Insert(smainParam, ssubParam, sTopData, sDownData, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
                break;
        }
    }
    else {
        //حفظ البيانات مباشرة لعدم وجود زر جديد اصلا
        NJDAjaxObject.Update(smainParam, ssubParam, sTopData, sDownData, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
    }
};

//دالة لطلب سجل جديد أو الغاء أمر الإضافة
pageNJD.prototype.insertNew = function() {
    var bValue = false;
    var sValue = 'جديد';
    var oTempTextID = null;

    if ($("txtSCtrID010"))
        oTempTextID = $("txtSCtrID010");
    else
        oTempTextID = $("txtSCtrID006");

    switch ($("btnTNew").value) {
        case 'جديد':
            //this.mainParametersValues = oTempTextID.value;
            NJDAjaxObject.GenerateID(this.GenerateID_CallBack.bind(this), oTempTextID, AjaxProgress, null, AjaxTimeOut);
            sValue = 'تراجع';
            bValue = true;
            break;
        case 'تراجع':
            //سنقوم بحذف العنصر الجديد
            if ($("txtSCtrID010"))
                var sNewID = $("txtSCtrID010").value;
            else
                var sNewID = $("txtSCtrID006").value;

            var smainParam = GetParameters(this.mainExtaParametersType, this.mainParametersValues, this.managementID, this.yearID, this.semesterID);
            var ssubParam = GetParameters(this.subExtaParametersType, this.subParametersValues, this.managementID, this.yearID, this.semesterID);

            //نلغي طلب الترميز المحجوز ونستدعي دالة البحث للبحث عن العنصر السابق
            //smainParam = OldID, ssubParam = OldID, sNewID =NewID, 0 =Cancel
            NJDAjaxObject.ResetID(smainParam, ssubParam, sNewID, 0, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
            break;

    }

    $("btnTNew").value = sValue;
    /*
    if ($("txtSCtrID010"))
    $("txtSCtrID010").disabled = true;
    else
    $("txtSCtrID006").disabled = true;
    */
    $("btnTDelete").disabled = bValue;
    $("btnSearchID").disabled = bValue;
    if ($("btnSearchValue")) $("btnSearchValue").disabled = bValue;
};

//دالة لحذف السجل الحالي
pageNJD.prototype.deleteData = function() {
    var oTopData = new Array();
    var sTopData = "";
    var oDownData = new Array();
    var sDownData = "";
    var oEle = null;

    if ($("txtSCtrID010"))
        this.mainParametersValues = $("txtSCtrID010").value;
    else
        this.mainParametersValues = $("txtSCtrID006").value;

    var smainParam = GetParameters(this.mainExtaParametersType, this.mainParametersValues, this.managementID, this.yearID, this.semesterID);
    var ssubParam = GetParameters(this.subExtaParametersType, this.subParametersValues, this.managementID, this.yearID, this.semesterID);

    //this.displayingReturnData.bind(this)
    NJDAjaxObject.Delete(smainParam, ssubParam, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);

};

pageNJD.prototype.afterDelete = function(res) {

};

//دالة البحث عن سجل محدد
pageNJD.prototype.SearchForRecord = function() {

    var smainParam = GetParameters(this.mainExtaParametersType, this.mainParametersValues, this.managementID, this.yearID, this.semesterID);
    var ssubParam = GetParameters(this.subExtaParametersType, this.subParametersValues, this.managementID, this.yearID, this.semesterID);

    NJDAjaxObject.GetTopDownPageData(smainParam, ssubParam, this.displayingReturnData.bind(this), null, AjaxProgress, null, AjaxTimeOut);
};


/*تعديلات بواسطة ابو البراء naif.alharbi@gmail.com*/
/*buildGrid.js*/
/*****************************************************************/
/*
ddlPare120
ddlPare<TableColIndex><ChilTabledColIndex><RowIndex>
ddlPare=DropDownLost Perfix Name.
TableColIndex=The Index Of The Continer Col.
ChilTabledColIndex=The Index Of The Continer Col Of ChildrenDDL.
RowIndex=The Index Of The Row In "subListData" Array.
*/

//بناء الشبكة
pageNJD.prototype.intin = function(bValue) {
    if (this.Grid == null) {
        this.Grid = document.createElement("table");
        this.Grid.className = "ruler";
        var sParam = "";
        var iParam = 0;
        var oParam = null;
        var oParam1 = null;
        var oParam2 = null;
        var oParam3 = null;
        var teObject = null;
        var iColCount = 2;
        var oEleArray = new Array;

        //نرفق عنوان الجدول مناداة الدلة
        //CreatTableCaption
        sParam = this.gridCaption;
        teObject = this.creatTableCaption(sParam, !bValue);
        this.Grid.appendChild(teObject);

        //نرفق مصفوفة عناوين الأعمدة  مناداة الدلة
        //creatTableHead
        oParam = this.subTDCaptions;
        teObject = creatTableHead(oParam);
        this.Grid.appendChild(teObject);


        //نرفق مصفوفة عناوين أنواع الأعمدة  مناداة الدلة
        //creatTableBody
        teObject = this.creatTableBody();
        this.Grid.appendChild(teObject);


        this.subContainer.appendChild(this.Grid);
        this.Grid.border = 0;

        //إنشاء صف المدخلات الجديدة
        this.creatHederRow();

        //تعبئة بيانات الشبكة
        this.fillData();

        sParam = null;
        iParam = null;
        oParam = null;
        oParam1 = null;
        oParam2 = null;
        teObject = null;
        iColCount = null;

    }
};


// إنشاء عنوان الجدول
//تقبل مدخلين  عنوان الشبكة وحالة أزرار الإضافة
//وتعود بمخرج كائن عنوان الشبكة بمحتوياته
pageNJD.prototype.creatTableCaption = function(sCaption, bValue) {
    var tc = document.createElement("caption");
    var tcn = document.createTextNode(sCaption);
    var tcBtn = null;

    tc.appendChild(tcn);
    tcn = null;

    tcBtn = document.createElement("input");
    tcBtn.type = "button";
    tcBtn.value = "سجل جديد";
    tcBtn.onclick = this.newRecord.bind(this);
    tcBtn.id = "btnNewRecord";
    tcBtn.disabled = bValue;
    tc.appendChild(tcBtn);
    tcBtn = null;

    tcBtn = document.createElement("input");
    tcBtn.type = "button";
    tcBtn.value = "حفظ المحدد";
    tcBtn.onclick = this.SaveMultiRows.bind(this);
    tcBtn.id = "btnSaveSelected";
    tcBtn.disabled = bValue;
    tc.appendChild(tcBtn);
    tcBtn = null;

    tcBtn = document.createElement("input");
    tcBtn.type = "button";
    tcBtn.value = "حذف المحدد";
    tcBtn.id = "btnDeleteSelected";
    tcBtn.onclick = this.DeleteMultiRows.bind(this);
    tcBtn.disabled = bValue;
    tc.appendChild(tcBtn);
    tcBtn = null;

    tcBtn = document.createElement("input");
    tcBtn.type = "button";
    tcBtn.value = "السابق";
    tcBtn.id = "btnPrev";
    tcBtn.onclick = this.prevPage.bind(this);
    tc.appendChild(tcBtn);
    tcBtn = null;

    tcBtn = document.createElement("input");
    tcBtn.type = "button";
    tcBtn.value = "التالي";
    tcBtn.id = "btnNext";
    tcBtn.onclick = this.nextPage.bind(this);
    tc.appendChild(tcBtn);
    tcBtn = null;

    return (tc);
};

//دالة إنشاء صف للمدخلات الجديدة
pageNJD.prototype.creatHederRow = function() {
    if ($TableHeads("PDData")[0].getElementsByTagName("TR").length == 1) {
        tr = $TableBodys("PDData")[0].getElementsByTagName("TR")[0];
        newTR = tr.cloneNode(true);
        //نقوم بإضافة عمليات القوائم

        var iCLoop = 0;
        var iCCount = 0;
        var sEleType = "";
        var iHasChild = 0;
        iCCount = newTR.getElementsByTagName("td").length - 1;

        for (iCLoop = 0; iCLoop <= iCCount; iCLoop++) {
            sEleType = this.subIOControls[iCLoop].substr(0, 3);
            iHasChild = this.subIOControls[iCLoop].substr(10, 1);
            if (sEleType == "ddl" && iHasChild != "0") {
                newTR.getElementsByTagName("td")[iCLoop].getElementsByTagName("select")[0].onchange = this.fillChild.bind(this);
            }
        }


        //نقوم بعمل تحسينات على الأزرار
        iCCount = newTR.getElementsByTagName("TD").length - 1;
        iBCount = newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT").length - 1;

        newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[0].onclick = this.InsertRow.bind(this);
        newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[0].width = '48';
        if (newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[1]) {
            newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[1].value = "الغاء";
            newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[1].width = '48';
            newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[1].id = "btnCancel";
            newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[1].onclick = this.removeNewRecord.bind(this);
        }
        for (iBLoop = 2; iBLoop <= iBCount; iBLoop++) {
            btnToEdit = newTR.getElementsByTagName("TD")[iCCount].getElementsByTagName("INPUT")[iBLoop].disabled = true;
        }
        newTR.id = "0";
        newTR.style.display = "none";
        th = $TableHeads("PDData")[0];
        th.appendChild(newTR);
        //$TableHeads("PDData")[0].getElementsByTagName("TR")[1].style.display = "none"
    }
};

//إنشاء جسم الجدول
//تقبل مدخل واحد وهو مصفوفة انواع كائنات الاعمدة 
//وتعود بمخرج كائن جسم الجدول الشبكة بكائناته
//special لاجل الازرار العامة
pageNJD.prototype.creatTableBody = function() {
    var sEleType = "";
    var sTempFun = "";
    var iRLoop = 0;
    var iCLoop = 0;
    var iCount = 0;
    var iALoop = 0;
    var iACount = 0;
    var iTempMyCol = 0;
    var iTempMyChildCol = 0;
    var iTempMyIndex = 0;
    var tb = null;
    var tr = null;
    var td = null;
    var el = null;
    var iMaxlength = 0;

    iCount = this.subIOControls.length - 1;

    if (this.subIOControls[iCount] == "null") {
        iCount = iCount - 1; //في حال العمود الأخير فارغ
    }


    tb = document.createElement("tbody");

    for (iRLoop = 0; iRLoop <= this.pageSize; iRLoop++) {
        tr = document.createElement("tr");
        tr.style.display = "none";
        iCLoop = 0;
        for (iCLoop == 0; iCLoop <= iCount; iCLoop++) {
            td = document.createElement("td");
            sEleType = this.subIOControls[iCLoop].substr(0, 3);
            iTempMyChildCol = this.subIOControls[iCLoop].substr(12, 1);
            //sClassType=
            sClassType = this.subIOControls[iCLoop].substr(3, 1);
            iMaxlength = this.subIOControls[iCLoop].substr(9, 3);
            switch (sClassType) {
                case "S":
                    sClass = "SEle";
                    break;
                case "M":
                    sClass = "MEle";
                    break;
                case "L":
                    sClass = "LEle";
                    break;
            }

            switch (sEleType) {
                case "lbl":
                    el = document.createElement("span"); /*oElementsArry[iCLoop].cloneNode(true);*/
                    el.type = "span";
                    el.className = sClass;
                    td.className = 'TD' + sClass;
                    td.align = "center";
                    td.id = "span";
                    break;
                case "chk":
                    el = document.createElement("input"); /*oElementsArry[iCLoop].cloneNode(true);*/
                    el.type = "checkbox";
                    td.width = 8;
                    td.align = "center";
                    td.id = "input";
                    break;
                case "ddl":
                    el = document.createElement("select");
                    iTempMyCol = this.subIOControls[iCLoop].substr(9, 1);
                    //alert(this.subIOControls[iCLoop].substr(9, 1) + ' --- ' + this.subIOControls[iCLoop].substr(10, 1) + ' --- ' + this.subIOControls[iCLoop].substr(11, 1))
                    iTempMyChildCol = parseInt(this.subIOControls[iCLoop].substr(10, 1));
                    iTempMyIndex = this.subIOControls[iCLoop].substr(11, 1);
                    //إذا كانت القائمة لها تابعة -قائمة فرعية
                    if (iTempMyChildCol != 0) {
                        //subListData
                        this.creatDdlElement(el, this.subListData[iTempMyIndex], 0);
                        el.onchange = this.fillChild.bind(this);
                        if (typeof OKPFunction=='function') el.onkeypress =function(){OKPFunction(this,event);};
                        el.id = "ddlFill" + iTempMyCol;
                        if (this.subIOControls[iCLoop].substr(4, 1) == "C") {
                            el.disabled = true; //لأجل تعطيل تحديث القائمة الفرعية
                        }
                    }
                    else {
                        var iSpechalChar = 0;
                        iSpechalChar = parseInt(this.subIOControls[iCLoop].substr(9, 1));
                        //alert(iSpechalChar);

                        this.creatDdlElement(el, this.subListData[iTempMyIndex], iSpechalChar);
                        if (typeof OKPFunction=='function') el.onkeypress=
function(){OKPFunction(this,event);};

                        if (this.subIOControls[iCLoop].substr(4, 1) == "C") {
                            el.disabled = true; //لأجل تعطيل تحديث القائمة الفرعية
                        }
                    }
                    el.className = sClass;
                    td.className = 'TD' + sClass;
                    td.id = "select";
                    break;
                case "txt":
                    el = document.createElement("input"); /*oElementsArry[iCLoop].cloneNode(true);*/
                    el.type = "text";
                    el.className = sClass;
                    el.maxlength = iMaxlength;
                    //el.width = 196;
                    td.className = 'TD' + sClass;
                    td.id = "input";
                    break;
                case "enc":
                    el = document.createElement("input"); /*oElementsArry[iCLoop].cloneNode(true);*/
                    el.type = "text";
                    el.className = sClass;
                    el.maxlength = iMaxlength;
                    //el.width = 196;
                    td.className = 'TD' + sClass;
                    td.id = "input";
                    break;
                case "pas":
                    el = document.createElement("input"); /*oElementsArry[iCLoop].cloneNode(true);*/
                    el.type = "password";
                    el.className = sClass;
                    el.maxlength = iMaxlength;
                    //el.width = 196;
                    td.className = 'TD' + sClass;
                    td.id = "input";
                    break;
                case "spe":
                    //اضافة أزرار الحفظ والحذف
                    td.className = 'TD' + sClass;
                    el = document.createElement("input");
                    el.type = "button";
                    el.width = '48';
                    el.value = "حفظ";
                    el.onclick = this.SaveRow.bind(this);
                    //el.className = 'SEle';
                    //el.onclick = function() { eval("ShowMe(this.parentNode.parentNode.id)"); }
                    td.appendChild(el);
                    el = null;
                    el = document.createElement("input");
                    el.type = "button";
                    el.value = "حذف";
                    el.onclick = this.DeleteRow.bind(this);
                    el.width = '48';
                    break;
                case "sac":
                    //اضافة الازرار الخاصة مع ازرار اضافية من عندنا
                    el = document.createElement("input");
                    el.type = "button";
                    el.value = "حفظ";
                    el.width = '48';
                    el.onclick = this.SaveRow.bind(this);
                    td.appendChild(el);
                    el = null;
                    el = document.createElement("input");
                    el.type = "button";
                    el.value = "حذف";
                    el.onclick = this.DeleteRow.bind(this);
                    el.width = '48';
                    td.appendChild(el);
                    td.className = 'TD' + sClass;
                    iACount = this.actionsEleValues.length - 2;
                    for (iALoop = 0; iALoop <= iACount; iALoop++) {
                        el = document.createElement("input");
                        el.type = "button";
                        el.value = this.actionsEleValues[iALoop];
                        el.width = '48';
                        sTempFun = this.actionsEleFunctions[iALoop];
                        el.id = sTempFun;
                        el.onclick = function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); }; //
                        td.appendChild(el);
                    }

                    el = document.createElement("input");
                    el.type = "button";
                    el.width = '48';
                    el.value = this.actionsEleValues[iALoop];
                    sTempFun = this.actionsEleFunctions[iALoop]
                    el.id = sTempFun;
                    el.onclick = function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); };

                    break;
                case "act":
                    //لاضافة ازرار من عندنا فقط
                    /*
                    el = document.createElement("input");
                    el.type = "button";
                    el.value = "حفظ";
                    el.onclick = function() { eval("ShowMe(this.parentNode.parentNode.id)"); }
                    td.appendChild(el);
                    el = null;
                    el = document.createElement("input");
                    el.type = "button";
                    el.value = "حذف";
                    el.onclick = function() { eval("DeleteMe(this.parentNode.parentNode.id)"); }
                    td.appendChild(el);
                    */

                    iACount = this.actionsEleValues.length; //-2
                    //alert(iACount);
                    switch (iACount) {
                        case 3:
                            //1
                            var el1 = null;
                            el1 = document.createElement("input");
                            el1.type = "button";
                            el1.value = this.actionsEleValues[0];
                            sTempFun = this.actionsEleFunctions[0];
                            el1.id = sTempFun;
                            el1.onclick = this.BindFunction1.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el1.width = '48'; //.className = 'MEle';
                            el1.style.visibility = 'visible';
                            td.appendChild(el1);
                            el1 = null;
                            //2
                            var el2 = null;
                            el2 = document.createElement("input");
                            el2.type = "button";
                            el2.value = this.actionsEleValues[1];
                            sTempFun = this.actionsEleFunctions[1];
                            el2.id = sTempFun;
                            el2.onclick = this.BindFunction2.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el2.width = '48'; //.className = 'MEle';
                            el2.style.visibility = 'visible';
                            td.appendChild(el2);
                            el2 = null;
                            //3
                            var el3 = null;
                            el3 = document.createElement("input");
                            el3.type = "button";
                            el3.value = this.actionsEleValues[2];
                            sTempFun = this.actionsEleFunctions[2]
                            el3.id = sTempFun;
                            el3.onclick = this.BindFunction3.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el3.width = '48'; //.className = 'MEle';
                            el3.style.visibility = 'visible';
                            td.appendChild(el3);
                            el3 = null;
                            el = null;
                            break;
                        case 2:
                            //1
                            var el1 = null;
                            el1 = document.createElement("input");
                            el1.type = "button";
                            el1.value = this.actionsEleValues[0];
                            sTempFun = this.actionsEleFunctions[0];
                            el1.id = sTempFun;
                            el1.onclick = this.BindFunction1.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el1.width = '48'; //.className = 'MEle';
                            el1.style.visibility = 'visible';
                            td.appendChild(el1);
                            el1 = null;
                            //2
                            var el2 = null;
                            el2 = document.createElement("input");
                            el2.type = "button";
                            el2.value = this.actionsEleValues[1];
                            sTempFun = this.actionsEleFunctions[1];
                            el2.id = sTempFun;
                            el2.onclick = this.BindFunction2.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el2.width = '48'; //.className = 'MEle';
                            el2.style.visibility = 'visible';
                            td.appendChild(el2);
                            el2 = null;
                            el = null;                            
                            break;
                        case 1:
                            //1
                            var el1 = null;
                            el1 = document.createElement("input");
                            el1.type = "button";
                            el1.value = this.actionsEleValues[0];
                            sTempFun = this.actionsEleFunctions[0];
                            el1.id = sTempFun;
                            el1.onclick = this.BindFunction1.bind(this); // function() { eval(this.id + "(this.parentNode.parentNode.rowIndex-2)"); } //
                            el1.width = '48'; //.className = 'MEle';
                            el1.style.visibility = 'visible';
                            td.appendChild(el1);
                            el1 = null;
                            el = null;                            
                            break;
                    }
                    td.width = '196';
                    break;

            }
            if (el != null) td.appendChild(el);
            tr.appendChild(td);
        }

        //tr.id = iRLoop;
        tr.onmouseover = function() { this.className = "ruled"; return false; };
        tr.onmouseout = function() { this.className = ""; return false; };

        tb.appendChild(tr);
        //tr = null;
    }

    tr = null;
    td = null;
    el = null;

    return (tb);
};

//دالة لاخفاء صف المدخلات
pageNJD.prototype.removeNewRecord = function() {

    $TableHeads("PDData")[0].getElementsByTagName("TR")[1].style.display = "none";
    //تمكين ازرار العنوان
    StopCaptionBTN(false);
    //نقوم بتمكين كافة بقية أزرار الشبكة
    StopEdit(false);
};

pageNJD.prototype.newRecord = function() {
    var th = null;
    var tr = null;
    var newTR = null;
    var btnToEdit = null;
    var btns = null;
    var iCCount = 0;
    var iBCount = 0;
    var iBLoop = 0;

    if ($TableHeads("PDData")[0].getElementsByTagName("TR").length == 1) {
        this.creatHederRow();
        $TableHeads("PDData")[0].getElementsByTagName("TR")[1].style.display = "";
    }
    else {
        $TableHeads("PDData")[0].getElementsByTagName("TR")[1].style.display = "";
    }

    //تعطيل ازرار العنوان
    StopCaptionBTN(true);

    //نقوم بتعطيل كافة بقية أزرار الشبكة
    StopEdit(true);

    newTR = null;
    th = null;
};

//مل البيانات
pageNJD.prototype.fillData = function() {

    var iRCount = 0;
    var iRLoop = 0;
    var iCCount = 0;
    var iCLoop = 0;
    var tr = null;
    var td = null;
    var el = null;
    var sEleType = "";
    var TempValue = null;
    var iTempMyIndex = 0;


    iRCount = this.subDataValue.Rows.length - 1;
    iCCount = this.subDataValue.Columns.length - 1;

    oRows = null;
    //دوران على الصفوف
    for (iRLoop = 0; iRLoop <= iRCount; iRLoop++) {

        tr = this.Grid.getElementsByTagName("TBODY")[0].getElementsByTagName("TR")[iRLoop];


        //TempValue = oRows[iRLoop];       
        //للتأكد من وجود بيانات
        if (this.subDataValue.Rows.length > 0) {
            if ((this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[0].Name]) == "undefined" || (this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[0].Name]) == "") {
                if (this.subIdentity == 0) {
                    TempValue = this.mainParametersValues + '|0';
                }
                else {
                    TempValue = 0;
                }
            }
            else {
                if (this.subIdentity == 0) {
                    TempValue = this.mainParametersValues + '|' + this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[0].Name];
                }
                else {
                    TempValue = this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[0].Name];
                }
            }
        }
        else {
            TempValue = 0;
        }

        tr.id = TempValue;
        //if (iRLoop == 0) alert(TempValue + "=> " + tr.innerHTML)
        tr.style.display = "";


        oRows = null;

        //دوران على الحقول في الصف
        for (iCLoop = 1; iCLoop <= iCCount; iCLoop++) {
            //للتأكد من وجود بيانات
            if ((this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[iCLoop].Name]) == "undefined" || (this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[iCLoop].Name]) == "") {
                TempValue = 0;
            }
            else {
                TempValue = this.subDataValue.Rows[iRLoop][this.subDataValue.Columns[iCLoop].Name];
            }

            td = tr.getElementsByTagName("TD")[iCLoop];
            sEleType = this.subIOControls[iCLoop].substr(0, 3);
            var sChildIndex = this.subIOControls[iCLoop].substr(8, 1);
            iTempMyIndex = this.subIOControls[iCLoop].substr(9, 1);
            switch (sEleType) {
                case "lbl":
                    el = td.getElementsByTagName("span")[0];
                    if (document.all) {
                        el.innerText = TempValue;
                    }
                    else {
                        el.textContent = TempValue;
                    }
                    break;
                case "chk":
                    el = td.getElementsByTagName("input")[0];
                    if (TempValue == "False" || TempValue == 0) {
                        el.defaultChecked = false;
                    }
                    else {
                        el.defaultChecked = true;
                    }
                    el.checked = el.defaultChecked;
                    break;
                case "ddl":
                    el = td.getElementsByTagName("select")[0];
                    /*
                    if (sChildIndex == 0) {
                    reFillDdlElement(el, this.subListData[iTempMyIndex], TempValue)
                    }
                   
                    alert(TempValue)
                    reFillDdlElement(el, this.subListData[iCLoop], TempValue)
                    */

                    el.value = TempValue;
                    break;
                case "txt":
                    el = td.getElementsByTagName("input")[0];
                    el.value = TempValue;
                    break;
                case "enc":
                    el = td.getElementsByTagName("input")[0];
                    el.value = TempValue;
                    break;
                case "pas":
                    el = td.getElementsByTagName("input")[0];
                    el.value = TempValue;
                    break;
            }
        }
    }

    if (this.subDataValue.Rows.length < 1) {
        iRLoop = 0;
    }

    var iToHide = iRLoop;
    //إخفاء الصفوف الزائدة
    for (iRLoop = iToHide; iRLoop <= this.pageSize; iRLoop++) {
        tr = this.Grid.getElementsByTagName("TBODY")[0].getElementsByTagName("TR")[iRLoop];
        tr.style.display = "none";
    }

};


//دالة تعبئة المصفوفة الفرعية
pageNJD.prototype.fillChild = function(evt) {
    var sTempID = "";
    var iMyColIndex = 0;
    var iChildColIndex = 0;
    var iChildRowIndex = 0;
    var iListArrayIndex = 0;
    var iFilterValue = 0;
    var tr = null;
    var td = null;
    var ddlChild = null;
    var sListData = null;

    if (window.event) {
        srcEl = window.event.srcElement;
    } else if (evt) {
        srcEl = evt.target;
    }

    iFilterValue = srcEl.value;
    tr = srcEl.parentNode.parentNode; //كائن الصف
    iMyColIndex = srcEl.id.substr(7, 1); //رقم العمود الحالي
    sTempID = this.subIOControls[iMyColIndex];
    iChildColIndex = sTempID.substr(10, 1); //رقم العمود للقائمة الفرعية
    sTempID = "";
    sTempID = this.subIOControls[iChildColIndex];
    iChildRowIndex = sTempID.substr(11, 1);

    td = tr.getElementsByTagName("TD")[iChildColIndex]; //.getElementsByTagName("select")[0]; //كائن القائمة الفرعية

    /*sListData = this.subListData[iChildRowIndex];*/

    this.reFillDdlElement(td.getElementsByTagName("select")[0], iChildRowIndex, iFilterValue);

    td.getElementsByTagName("select")[0].disabled = false;

    sTempID = null;
    iMyColIndex = null;
    iChildColIndex = null;
    iChildRowIndex = null;
    iFilterValue = null;
    tr = null;
    td = null;
    //ddlChild = null;
    sListData = null;
};

//دالة تعبئة القوائم المحررة
pageNJD.prototype.reFillRowDDLs = function(iRowIndex) {
    /*
    نحدد الصف
    نحدد عدد الأمدة
    نعمل دوران على محتويات حقول العمود
    نحدد القوائم ونرسلها للتعبئة من مصفوفة القوائم الأصلية.
    */
    var iRCCount = 0;
    var iRCLoop = 0;
    var iRColInArrayIndex = 0;

    var tds = $TabelBodyRows("PDData")[iRowIndex].getElementsByTagName("td");

    iRCCount = tds.length - 1;

    for (iRCLoop = 0; iRCLoop <= iRCCount; iRCLoop++) {
        if (this.subIOControls[iRCLoop].substr(0, 3) == "ddl") {
            iRColInArrayIndex = this.subIOControls[iRCLoop].substr(9, 1);
            //var iColIndex = this.subIOControls[iCLoop].substr(8, 1);

            var iFilter = 0;
            if (iRColInArrayIndex == 0) {
                iFilter = 0;
            }
            else {
                iFilter = $TabelBodyRows("PDData")[iRowIndex].getElementsByTagName("td")[iRColInArrayIndex].getElementsByTagName("select")[0].value;
            }
            this.reFillDdlElement(tds[iRCLoop].getElementsByTagName("select")[0], iRColInArrayIndex, iFilter);
            //if (this.subIOControls[iCLoop].substr(3, 1) == "C") tds[iCLoop].getElementsByTagName("select")[0].disabled = true; //لأجل تعطيل تحديث القائمة الفرعية
        }
    }


};


//دالة لتمكين وتعطيل عناصر القوائم
//وهي تقوم بعمليات إعادة تحميل القوائم
//إنشاء كائن
pageNJD.prototype.reFillDdlElement = function(ddlEle, iListRow, iFilter) {
    //----------------------
    var iRCount = 0;
    var iRLoop = 0;
    var iCCount = 0;
    var iCLoop = 0;
    var tr = null;
    var td = null;
    var el = null;
    var sEleType = "";
    var TempValue = null;
    var iTempMyIndex = 0;

    this.subListData[iListRow];
    iRCount = this.subListData[iListRow].Rows.length - 1;
    //iCCount = dtList.Columns.length - 1;

    oRows = null;
    //دوران على الصفوف
    for (iRLoop = 0; iRLoop <= iRCount; iRLoop++) {
        switch (iFilter) {
            case 0:
                ddlEle.options[iRLoop].disabled = false;
                if (document.all) {
                    ddlEle.options[iRLoop].style.color = "menutext";
                }

                break;
            default:
                if (this.subListData[iListRow].Rows[iRLoop][this.subListData[iListRow].Columns[0].Name] == iFilter) {
                    ddlEle.options[iRLoop].disabled = false;
                    if (document.all) {
                        ddlEle.options[iRLoop].style.color = "menutext";
                    }
                }
                else {
                    ddlEle.options[iRLoop].disabled = true;
                    if (document.all) {
                        ddlEle.options[iRLoop].style.color = "graytext";
                        ddlEle.onchange = function() {
                            if (this.options[this.selectedIndex].disabled) {
                                if (this.options.length <= 1) {
                                    this.selectedIndex = -1;
                                }
                                else {
                                    if (this.selectedIndex < this.options.length - 1) {
                                        this.selectedIndex++;
                                    }
                                    else {
                                        this.selectedIndex--;
                                    }
                                }
                            }
                        };
                    }
                }
        }
    }

    iRLoop = 0;
    for (iRLoop == 0; iRLoop <= iRCount; iRLoop++) {
        if (ddlEle.options[iRLoop].disabled == false) {
            ddlEle.selectedIndex = iRLoop;
            return;
        }
    }

    iLLoop = null;
    iLCount = null;
};

/***************************************************************/
/*buildInline.js*/

/*دالة بناء أدوات الإدخال والاخراج للأدوات بدون الشبكة
* bCanInsertNew = Parameter To Allow nsert New Row
* sHTMLButtons = Parameter <Any HTML Code> To Display such As Button select Element
*/
pageNJD.prototype.buildMainIOControls = function(bCanInsertNew, sHTMLButtons) {
    var iRow = 0;
    var iLoop = 0;
    var sIOCPerfix = "";
    var sTempElement = "";
    var sWidth = "";
    var sTable = "<table border='0' width='100%'>";
    var iMaxlength = 0;
    var oWholeControl = new Array();
    var oWholeTDCaption = new Array();

    // للتمييز بين طريقة العرض
    switch (this.pageType) {
        case 0:     //بيانات رئيسية فقط
            oWholeControl = this.mainIOControls;
            oWholeTDCaption = this.mainTDCaptions;
            break;
        case 1:     //بيانات رئيسية وبيان تفصيلي وحيد
            oWholeControl = oWholeControl.concat(this.mainIOControls, this.subIOControls);
            oWholeTDCaption = oWholeTDCaption.concat(this.mainTDCaptions, this.subTDCaptions);
            break;
        case 2:     //بيانات رئيسية وشبكة بيانات
            oWholeControl = this.mainIOControls;
            oWholeTDCaption = this.mainTDCaptions;
            break;
    }

    iRow = oWholeControl.length - 1;


    for (iLoop = 0; iLoop <= iRow; iLoop++) {
        sTempElement = "";
        sIOCPerfix = "";
        sIOCPerfix = oWholeControl[iLoop].substr(0, 3);
        sWidth = "";
        sWidth = oWholeControl[iLoop].substr(3, 1);
        iMaxlength = oWholeControl[iLoop].substr(9, 3);
        switch (sWidth) {
            case "S":
                sWidth = "SEle";
                break;
            case "M":
                sWidth = "MEle";
                break;
            case "L":
                sWidth = "LEle";
                break;
        }
        switch (sIOCPerfix) {
            case "txt":
                switch (iLoop) {
                    case 0:
                        sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='text' disabled  maxlength='" + iMaxlength + "' class='" + sWidth + "'/><input id='btnSearchID' disabled  type='button' value='ابحث'/>";
                        break;
                    case 1:
                        sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='text' disabled  maxlength='" + iMaxlength + "' class='" + sWidth + "'/><input id='btnSearchValue' disabled  type='button' value='ابحث'/>";
                        break;
                    default:
                        sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='text' disabled  maxlength='" + iMaxlength + "' class='" + sWidth + "'/>";
                        break;
                }
                break;
            case "enc":
                sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='text' disabled  maxlength='" + iMaxlength + "' class='" + sWidth + "'/>";
                break;
            case "pas":
                sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='password' disabled  maxlength='" + iMaxlength + "' class='" + sWidth + "'/>";
                break;
            case "ddl":
                sTempElement = "<select id='" + oWholeControl[iLoop] + "' disabled onkeypress=OKPFunction(this,event);></select>";
                break;
            case "chk":
                sTempElement = "<input id='" + oWholeControl[iLoop] + "' type='checkbox' disabled  checked />";
                break;
        }

        sTable = sTable + "<tr><td class='TDCaption'>" + oWholeTDCaption[iLoop] + " : " + "</td><td class='TDElement'>" + sTempElement + "</td></tr>";

    }


    if (bCanInsertNew == true) {
        sTable = sTable + "<tr><td></td><td class='TDButton'><input id='btnTNew' disabled  type='button' value='جديد'/><input id='btnTSave' disabled  type='button' value='حفظ'/><input id='btnTDelete' disabled  type='button' value='حذف'/></td></tr>";
    }
    else {
        sTable = sTable + "<tr><td></td><td class='TDButton'><input id='btnTSave' disabled  type='button' value='حفظ'/></td></tr>";
    }

    sTable = sTable + "<tr><td></td><td class='TDButton'>" + sHTMLButtons + "</td></tr>";
    sTable = sTable + "</table>";

    this.mainContainer.innerHTML = sTable;

};

//إنشاء كائن
pageNJD.prototype.creatDdlElement = function(ddlEle, dtList, iFilter) {
    //var ddlEle;
    var optEle = null;
    var iLLoop = 0;
    var iLCount = 0;
    var oOptions = null;
    var aColList = null;
    var iaArrayCount = 0;
    var iaArrayLoop = 0;
    var aFilter = null;
    var aValues = null;
    var aTexts = null;
    var iOLength = 0;
    var iCols = 0;
    var iRows = 0;

    iCols = dtList.Columns.length - 1;
    iRows = dtList.Rows.length - 1;

    for (iLLoop = 0; iLLoop <= iRows; iLLoop++) {
        switch (iFilter) {
            case 0:
                optEle = document.createElement("OPTION");
                optEle.text = dtList.Rows[iLLoop][dtList.Columns[1].Name];
                optEle.value = dtList.Rows[iLLoop][dtList.Columns[0].Name];
                if (document.all) {
                    ddlEle.add(optEle, -1);
                }
                else {
                    ddlEle.add(optEle, ddlEle.options[ddlEle.options.length]);
                }
                break;
            default:
                //if (dtList.Rows[iLLoop][dtList.Columns[0].Name] == iFilter) {
                optEle = document.createElement("OPTION");
                optEle.text = dtList.Rows[iLLoop][dtList.Columns[2].Name];
                optEle.value = dtList.Rows[iLLoop][dtList.Columns[1].Name];
                if (document.all) {
                    ddlEle.add(optEle, -1);
                }
                else {
                    ddlEle.add(optEle, ddlEle.options[ddlEle.options.length]);
                }
                //}
        }
    }

    optEle = null;
    iLLoop = null;
    iLCount = null;
    oOptions = null;
};


// إنشاء عناوين أعمدة الجدول 
//تقبل مدخل واحد وهو مصفوفة عناوين الأعمدة 
//وتعود بمخرج كائن رأس الجدول الشبكة بمحتوياته
function creatTableHead(oColumnsNames) {
    var th = document.createElement("thead");
    var tr = document.createElement("tr");
    var td = null; // = document.createElement("td");
    var ch = null; // = document.createElement("input");
    //var sColTitle = this.columsTitles.split("^");
    var iColCount = 0;
    var ith = 0;
    iColCount = oColumnsNames.length - 1;

    for (ith = 0; ith <= iColCount; ith++) {
        if (ith == 0) {
            td = document.createElement("td");
            ch = document.createElement("input");
            ch.type = "checkbox";
            ch.onclick = function() { CheckBoxState(this); };
            td.appendChild(ch);
        }
        else {
            td = document.createElement("td");
            tn = document.createTextNode(oColumnsNames[ith]);
            td.appendChild(tn);
        }
        td.align = "center";
        tr.appendChild(td);
    }

    th.appendChild(tr);

    return (th);
};

//دالة ملء البيانات
function FillGrid() {
    return;
};

//دالة خارجية التحديد الكلي والإلغاء الكلي
function CheckBoxState(ele) {
    var bCheked = false;
    var checkList = null;
    var iTrLoop = 0;
    var iTrCount = 0;

    bCheked = ele.checked;

    trList = $TableBodys("PDData")[0].getElementsByTagName("TR"); //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    iLiCount = trList.length - 1;
    for (iTrLoop = 0; iTrLoop <= iLiCount; iTrLoop++) {
        if (trList.item(iTrLoop).style.display != "none") {
            var cTemp = trList.item(iTrLoop).getElementsByTagName("TD")[0].getElementsByTagName("INPUT")[0];
            cTemp.checked = bCheked;
        }
    }
};

//دالة خارجية لتكوين صف
function CreatRow() {
    return;
};

//دالة خارجية
function RegistMe(i) {
    var trContiner = $TableBodys("PDData")[0].getElementsByTagName("TR")[i]; //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    var tdList = trContiner.getElementsByTagName("TD");
    var iTDCount = tdList.length - 2;
    //alert(iTDCount)
    var iTDLoop = 1;
    for (iTDLoop = 1; iTDLoop <= iTDCount; iTDLoop++) {
        //alert("This Col : "+iTDLoop)
        var tdContiner = tdList.item(iTDLoop);
        var eleObject = tdContiner.getElementsByTagName(tdContiner.id)[0];
        //var eleField = tdCountiner
        switch (eleObject.type) {
            case "select-one":
                alert(eleObject.value);
                break;
            case "text":
                alert(eleObject.value);
                break;
            case "checkbox":
                alert(eleObject.checked);
                break;
        }
    }
};

function DeleteMe(i) {
    alert("Delete " + i + " A");
};

function ShowMe(i) {
    alert("Show " + i + " A");
};

function $TableBodys(cintinerID) {
    return (document.getElementById(cintinerID).getElementsByTagName("TABLE")[0].getElementsByTagName("TBODY"));
};

function $TableHeads(cintinerID) {
    return (document.getElementById(cintinerID).getElementsByTagName("TABLE")[0].getElementsByTagName("THEAD"));
};

function $TableCaptions(cintinerID) {
    return (document.getElementById("PDData").getElementsByTagName("TABLE")[0].getElementsByTagName("CAPTION"));
};

function $TabelBodyRows(cintinerID) {
    return (document.getElementById("PDData").getElementsByTagName("TABLE")[0].getElementsByTagName("TBODY")[0].getElementsByTagName("TR"));
};


//تعطيل مؤقت لكافة ازرار الشبكة
function StopEdit(bValue) {
    var trs = null;
    var iRCount = 0;
    var iRLoop = 0;

    var iBCount = 0;
    var iBLoop = 0;
    var iColIndex = 0;

    trs = $TabelBodyRows("PDData");
    iRCount = trs.length - 1;
    iColIndex = trs[0].getElementsByTagName("TD").length - 1;
    iBCount = trs[0].getElementsByTagName("TD")[iColIndex].getElementsByTagName("INPUT").length - 1;

    for (iRLoop = 0; iRLoop <= iRCount; iRLoop++) {
        for (iBLoop = 0; iBLoop <= iBCount; iBLoop++) {
            trs[iRLoop].getElementsByTagName("TD")[iColIndex].getElementsByTagName("INPUT")[iBLoop].disabled = bValue;
        }
    }
};

//تعطيل أزرار محتوى العنوان
function StopCaptionBTN(bValue) {
    $TableCaptions("PDData")[0].getElementsByTagName("INPUT")[0].disabled = bValue;
    $TableCaptions("PDData")[0].getElementsByTagName("INPUT")[1].disabled = bValue;
    $TableCaptions("PDData")[0].getElementsByTagName("INPUT")[2].disabled = bValue;
    $TableCaptions("PDData")[0].getElementsByTagName("INPUT")[3].disabled = bValue;
    $TableCaptions("PDData")[0].getElementsByTagName("INPUT")[4].disabled = bValue;
};


function AjaxBox(sDiv, w, h) {
    var sDivID = $(sDiv).id;

    $S('AjaxBoxBG').height = window.screen.height + 'px'; //document.body.clientHeight ; //+'px' document.body.clientWidth;//'100%';// window.screen.height + 'px'// '103%'
    $S('AjaxBoxBG').width = window.screen.width + 'px'; // document.body.clientWidth ;//+'px' window.screen.width + 'px' //'103%';
    $S('AjaxBoxBG').display = 'block';
    window.scroll = false;
    //$(sDivID).innerHTML=$(sDivID).innerHTML+'<br><div class="AjaxBoxX">(click outside box to close)'+"<\/div>";
    $S(sDivID).left = Math.round((XYwin(1) - w) / 2) + 'px';
    $S(sDivID).width = w + 'px';
    $S(sDivID).height = h + 'px';
    $S(sDivID).display = 'block';

    $S(sDivID).top = 285 - (parseInt($S(sDivID).height) / 2);
};

function AjaxBoxTOG(sDiv) {
    $S('AjaxBoxBG').display = 'none';
    $S(sDiv).display = 'none';
};

function $(v) {
    return (document.getElementById(v));
};

function $S(v) {
    return ($(v).style);
};

function agent(v) {
    return (Math.max(navigator.userAgent.toLowerCase().indexOf(v), 0));
};

function isset(v) {
    return ((typeof (v) == 'undefined' || v.length == 0) ? false : true);
};

function XYwin(v) {
    var z = agent('msie') ? Array(document.body.clientHeight, document.body.clientWidth) : Array(window.innerHeight, window.innerWidth);
    return (isset(v) ? z[v] : z);
};

//دالة خارجية
//جلب قيمة الصف المراد تعديله
function getRowsValue(i, iType, sRecID, sToSaveCTR, iIdentity) {
    var sTemp = "";
    var trContiner = null;

    //iType : 0= Row From The Body To Edit .
    //      : 1= Row From Tge Header To Insert .
    //--------
    //i     :Row Index .
    //--------
    //sRecID: مصفوفة لتخزين رموز السجلات لعمليات التحديث
    //
    //--------
    //sToSaveCTR: مصفوفة لتحديد الأعمدة التي سنتعامل معها
    //
    //iIdentity: 0= The ID Create From Us.
    //           1= The ID Will Be Create Outo.
    //--------
    //إضافة سجل

    if (iType == 0) {

        trContiner = $TableBodys("PDData")[0].getElementsByTagName("TR")[i]; //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    }
    else {
        trContiner = $TableHeads("PDData")[0].getElementsByTagName("TR")[i];     //[0].getElementsByTagName("TD")[0].getElementsByTagName("INPUT");
    }


    //trContiner = $TableBodys("PDData")[0].getElementsByTagName("TR")[i];

    var tdList = trContiner.getElementsByTagName("TD");
    var iTDCount = tdList.length - 2;
    var iTDLoop = 1;

    //ملاحظة
    //trContiner.id
    //يحتوي على رمز اول الصفحة ورمز العنصر الحالي
    //لذا سنحتاج احيانا إلى فقط الرمز الحالي للسجل فنقوم بفصل البيانات من خلال الشفرة أدناه
    //sTemp = trContiner.id + "|";  //رمز السجل لأجل عمليات التحديث
    sRecID[sRecID.length] = trContiner.id;

    //else
    //sTemp = "";  //رمز السجل فارغ لأن الترميز تلقائي
    for (iTDLoop = 1; iTDLoop <= iTDCount; iTDLoop++) {
        var tdContiner = tdList.item(iTDLoop);
        var eleObject = tdContiner.getElementsByTagName(tdContiner.id)[0]
        if (sToSaveCTR[iTDLoop - 1] == '1') {
            switch (eleObject.type) {
                case "select-one":
                    sTemp += eleObject.value + '|';
                    break;
                case "text":
                    sTemp += eleObject.value + '|';
                    break;
                case "checkbox":
                    sTemp += '' + eleObject.checked + '|';
                    break;
            }
        }
    }

    sTemp = sTemp.substr(0, sTemp.length - 1);

    return sTemp;
};


// convert decimal value (0 - 255) to hexadecimal
// (use .toString(16) method supported by IE)
//Use  onLoad="fade(0, 0, 0, 255, 255, 255, 64)"
function toHex(dec) {
    // create list of hex characters
    var hexCharacters = "0123456789ABCDEF";
    // if number is out of range return limit
    if (dec < 0) {
        return "00";
    }
    if (dec > 255) {
        return "FF";
    }
    // decimal equivalent of first hex character in converted number
    var i = Math.floor(dec / 16);

    // decimal equivalent of second hex character in converted number


    var j = dec % 16;

    // return hexadecimal equivalent

    return hexCharacters.charAt(i) + hexCharacters.charAt(j);

};

// set background color to specified descriptors


function setbgColor(red, green, blue) {
    document.bgColor = "#" + toHex(red) + toHex(green) + toHex(blue);
};

// fade from start to end descriptors (increase step to increase transition speed)


function fade(sred, sgreen, sblue, ered, egreen, eblue, step) {

    // loop to create fade effect

    for (var i = 0; i <= step; ++i) {
        // set current red descriptor
        var red = Math.floor(sred * ((step - i) / step) + ered * (i / step));

        // set current green descriptor

        var green = Math.floor(sgreen * ((step - i) / step) + egreen * (i / step));

        // set current green descriptor

        var blue = Math.floor(sblue * ((step - i) / step) + eblue * (i / step));

        // set background color according to descriptors
        setbgColor(red, green, blue);
    }
};



function NHJmenu(sContinerID) {

    var oMC = document.getElementById(sContinerID);
    this.isClicked=0;

    this.creatMenuByTaq = function(oMainMenus) {
        var rowsArry = null;
        var rowData = "";
        var rowCount = 0;
        var rowLoop = 0;
        var colsArray = null;
        var colData = "";
        var colCount = 0;
        var colLoop = 0;

        //rowsArry = oMainMenus.Rows.length

        rowCount = oMainMenus.Rows.length - 1;
        creatMenuElements('XXX', 'CUL0', 'الرئيسية', '...', 'UL');
        for (rowLoop = 0; rowLoop <= rowCount; rowLoop++) {
            rowData = oMainMenus.Rows[rowLoop][oMainMenus.Columns[0].Name]; // rowsArry[rowLoop];
            colsArray = rowData.split("^");
            creatMenuElements(colsArray[0], colsArray[1], colsArray[2], colsArray[3], colsArray[4]);
        }
        creatMenuElements('XXX', 'CUL00', 'خروج', '...', 'UL');

    };

    function creatMenuElements(ContinerID, curentElID, currentElText, currentElUrl, eTag) {
        if (eTag == "UL") {
            var ofatherUL = document.createElement(eTag);
            var ospan = document.createElement("span");
            var oTN = document.createTextNode(currentElText);
            var ochildUL = document.createElement(eTag);
            var ChildID = 'C' + curentElID;

            ospan.appendChild(oTN);
            ofatherUL.id = curentElID;
            ofatherUL.onclick = function(event) { HideShow(event); };
            ochildUL.id = ChildID;

            ofatherUL.appendChild(ospan);
            ofatherUL.appendChild(ochildUL);
            oMC.appendChild(ofatherUL);

            ofatherUL = null;
            ospan = null;
            oTN = null;
            ochildUL = null;
        }
        else {
            var oconUL = document.getElementById(ContinerID);
            var ospan = document.createElement("a");
            var oelementLi = document.createElement(eTag);
            var oTN = document.createTextNode(currentElText);

            oelementLi.onclick = function(event) { Browsing(event); return; };

            oelementLi.id = curentElID;
            ospan.href = currentElUrl;

            ospan.appendChild(oTN);
            oelementLi.appendChild(ospan);
            oconUL.appendChild(oelementLi);

            oconUL = null;
            ospan = null;
            oelementLi = null;
            oTN = null;
        }
    };

    function HideShow(evt) {
        var srcEl;


        if (window.event) {
            srcEl = window.event.srcElement;
        } else if (evt) {
            srcEl = evt.target;
        }

        var oparent = document.getElementById(srcEl.parentNode.id);

        var etname = srcEl.tagName;

        if (etname.toLowerCase() == "span") {
            var oULMain = oparent.getElementsByTagName("UL");
            oULMain[0].style.display = (oULMain[0].style.display == "") ? "none" : "";
            var sCaption = '';
            if (document.all) {
                sCaption = srcEl.innerText;
            }
            else {
                sCaption = srcEl.textContent;
            }

            //نتحول للرئيسية عند طلبها
            if (sCaption == 'الرئيسية') {
                window.location = '/Default.aspx';
            }

            //نتحول للرئيسية عند طلبها
            if (sCaption == 'خروج') {
                var answer = confirm('أنت على وشك الخروج من النظام ؟ \n هل حقا تود تسجيل الخروج ؟\n اضغط موافق لتسجيل الخروج.');
                if (answer) {
                    LogOut();
                }
                else {
                    return;
                }
            }

        }
        else {
        }

    };

    this.Explan = function() {
        var iCounter = 0;
        var iIndex = 0;

        while (oMC.getElementsByTagName('UL')[iCounter++]) {
            var oUL = oMC.getElementsByTagName("UL")[iIndex];
            if (!oUL) { return; }
            if (oUL.tagName == "UL") {
                var tohideUL = oUL.getElementsByTagName("UL")[0];
                if (!tohideUL) { return; }
                tohideUL.style.display = "none";
            }

            iIndex++;
        }
    };

    this.ExplanByID = function(EleID) {
        var eleUL = document.getElementById(EleID);

        if (eleUL) {
            eleUL.style.display = "";
        }
    };

    this.CollcpanByID = function(EleID) {
        var eleUL = document.getElementById(EleID);
        if (eleUL) {
            eleUL.style.display = "none";
        }
    };

    function Browsing(evt) {

	if (this.isClicked == 1) return;
	this.isClicked=1;
        var srcEl = null;

        if (window.event) {
            srcEl = window.event.srcElement;
        }
        else if (evt) {
            srcEl = evt.target;
        }

        var etname = srcEl.tagName;

        if (etname.toLowerCase() == "a") {
            var sURL = srcEl.href;
            //window.open( sURL,"","_self");
            window.location = sURL;
        }
    };

    //End Class
};

function GetParam() {
    var QueryString = location.href.substring(location.href.indexOf('?')); // get the QueryString from the URL
    QueryString = QueryString.split('&');  // creates an array of Strings, e.g. "p=1"
    var i = 0;

    for (i = 0; i < QueryString.length; i++) {
        QueryString[i] = QueryString[i].split('='); // creates a name and value element for each parameter in the QueryString
    }

    //QueryString [ 0 ][ 0 ] equals "x" 
    //QueryString [ 0 ][ 1 ] equals "..."

    return QueryString[0][1];
};

//دالة لتمكين الأدوات المعطلة في أول الصفحة
function DoTopContrlTask(oTable) {

    var iRowCount = 0;
    var iRowLoop = 0;
    var sCtrID = '';
    var bCtrDisable = false;
    var oCtr = null;

    iRowCount = oTable.Rows.length - 1;
    for (iRowLoop = 0; iRowLoop <= iRowCount; iRowLoop++) {
        sCtrID = oTable.Rows[iRowLoop][oTable.Columns[0].Name];
        oCtr = document.getElementById(sCtrID);
        if (oCtr) {
            bCtrDisable = oTable.Rows[iRowLoop][oTable.Columns[1].Name];
            oCtr.disabled = !bCtrDisable;
        }
    }

};

//دالة لتمكين الأدوات المعطلة في آخر الصفحة
function DoDownContrlTask(oTable, oObject) {

    var iRowCount = 0;
    var iRowLoop = 0;
    var sCtrID = '';
    var bCtrDisable = false;
    var oCtr = null;


    iRowCount = oTable.Rows.length - 1;
    for (iRowLoop = 0; iRowLoop <= iRowCount; iRowLoop++) {
        sCtrID = oTable.Rows[iRowLoop][oTable.Columns[0].Name];
        oCtr = document.getElementById(sCtrID);
        if (oCtr) {
            bCtrDisable = oTable.Rows[iRowLoop][oTable.Columns[1].Name];
            oCtr.disabled = !bCtrDisable;
        }
    }

    if (oObject.pageType != 2) {
        // نعود إذا كانت الصفحة لا تحتوي شبكة
        return;
    }
    //للدوران بداخل الجدول وتمكين الأدوات
    var trContiner = null;
    var tdList = null;
    var iCol = 0;
    var iLoop = 0;
    var iCount = 0;
    var bCtrDisable = false;
    iRowCount = oTable.Rows.length - 1;
    for (iRowLoop = 0; iRowLoop <= iRowCount; iRowLoop++) {
        iCol = oTable.Rows[iRowLoop][oTable.Columns[0].Name];
        bCtrDisable = oTable.Rows[iRowLoop][oTable.Columns[1].Name];

        if (iCol < 10) {//عمود يحتوي أداة إدخال

        }
        else {//عمود يحتوي أزرار
            iCount = oObject.pageSize;
            if (isNaN(iCol)) {
                oCtr = document.getElementById(iCol);
                if (oCtr) {
                    oCtr.disabled = !bCtrDisable;
                }
            }
            else {
		
                for (iLoop = 0; iLoop <= iCount; iLoop++) {
                    trContiner = $TableBodys("PDData")[0].getElementsByTagName("TR")[iLoop];
                    tdList = trContiner.getElementsByTagName("TD")[parseInt(iCol / 100)];

                    if (typeof(tdList.getElementsByTagName("INPUT")[parseInt(iCol % 100)])=='undefined')
                    {

	            	tdList.getElementsByTagName("SELECT")[parseInt(iCol % 100)].disabled = !bCtrDisable;

                    }
                    else
                    {

                        tdList.getElementsByTagName("INPUT")[parseInt(iCol % 100)].disabled = !bCtrDisable;

                    }
                }
            }

        }

        oCtr = document.getElementById(sCtrID);
        if (oCtr) {
            bCtrDisable = oTable.Rows[iRowLoop][oTable.Columns[1].Name];
            oCtr.disabled = !bCtrDisable;
        }
    }

};

//تسجيل الخروج
function LogOut() {
    NJDAjaxObject.LogOut(LogOut_CallBack);
};


function LogOut_CallBack(res) {
    if (res.value == '0') {
        alert('تم تسجيل خروجك بنجاح ، شكرا لاستخدامك نظام خدمات التدريب الإلكترونية');
        window.location = '/login.aspx';
    }
    else {
        alert('فشل في تسجيل الخروج من النظام، اضغط رابط خروج مرّة أخرى');
    }

};



/*
public enum (PageType)
0 TopOnly,
1 TopDown,
2 TopGrid

public enum (ActionType)
0 Intin,
1 Search,
2 Insert,
3 Update,
4 Delete
*/


/*
ddlPare120
ddlPare<TableColIndex><ChilTabledColIndex><RowIndex>
ddlPare=DropDownLost Perfix Name.
TableColIndex=The Index Of The Continer Col.
ChilTabledColIndex=The Index Of The Continer Col Of ChildrenDDL.
RowIndex=The Index Of The Row In "subListData" Array.
*/


var NJDAjaxObject = null; // = {};
var sOldSearchValue = 0;

function pageNJD(sMainContainer, sSubContainer, sSearchResultContainer) {
    /*بداية العناصر المشتركة*/
    this.mainContainer = $(sMainContainer);

    /*هـــــــــــــــــــام*/
    this.pageType; //نوع الصفحة 0 فوق فقط 1 فوق وتحت 2 فوق وشبكة
    /**/

    this.mainExtaParametersType = 0;
    this.subExtaParametersType = 0;
    this.wellcomeData = null; //مصفوفة لرسائل الترحيب وبيانات المستخدم
    this.menuData = null; //مصفوفة لبيانات القوائم
    this.mainPermissions = null; //الصلاحيات
    this.mainTDCaptions = new Array; //العناوين اعلى الصفحة
    this.mainIOControls = new Array; //ادوات اعلى الصفحة
    this.mainListData = new Array(); //قوائم اعلى الصفحة
    this.mainListParametersValues = new Array(); //شروط قوائم اعلى الصفحة مصفوفة كل صف بياناته يفصل بينها علامة |
    this.mainDataValue = null; //بيانات اعلى الصفحة
    this.mainParametersValues = ""; //شروط اعلى الصفحة يفصل بينها علامة |
    this.managementID; //رمز الإدارة
    this.yearID; //رمز العام
    this.semesterID; //رمز الفصل

    /*ينطبق عليها الكلام أعلاه*/
    this.subContainer = $(sSubContainer);
    this.subPermissions = null;
    this.subTDCaptions = new Array();
    this.subIOControls = new Array();

    /*هـــــــــــــــــــام*/
    this.subIOToSave = new Array(); //تحدديد الأعمدة التي سيتم حفظها في الشبكة
    this.subIdentity = 1; //0 Creat 1 Outo
    this.subUsingView = 0; //0 Normal Select , 1 Select By Special View.
    /**/

    this.subListData = new Array();
    this.subListParametersValues = new Array();
    this.subDataValue = null;
    this.subParametersValues = "";
    this.actionsEleValues = new Array();
    this.actionsEleFunctions = new Array();
    this.gridActionButton = 0; //0=WithOut New&Edit - 2=Edit Only 3=New&Edit - 4=New Only.
    this.pageSize = 10; //Start From Zero
    this.pageIndex = 0;

    /* خصائص الشبكة 
    this.gridCaption; // = "عنوان الشبكة";
    this.columnsNames = new Array(); // = "الصف^المادة^تقويم^ملاحظات";
    this.columnsEleTypes=new Array(); // = "dllParent^dllChild^chk^txt";
    this.actionsEleValues = new Array(); // ="Regist^Delete^Show";// ""; //
    this.actionsEleFunctions=new Array(); // = "RegistMe^DeleteMe^ShowMe";
    this.subListData=new Array();
    this.pageSize = 10;//Start From Zero
    this.pageIndex = 0;
    */
    this.searchResultContainer = $(sSearchResultContainer);
};




pageNJD.prototype.displaySearch = function() {
    AjaxBox("divSearch", "600", "400");
};

// العودة بقيمة البحث
function GetParameters(iExtraParameterType, sOrginalParam, sParam1, sParam2, sParam3) {
    var sEPValue = sOrginalParam;

    switch (iExtraParameterType) {
        case 1:
            sEPValue = sEPValue + '|' + sParam1;
            break;
        case 2:
            sEPValue = sEPValue + '|' + sParam2 + '|' + sParam3;
            break;
        case 3:
            sEPValue = sEPValue + '|' + sParam1 + '|' + sParam2 + '|' + sParam3;
            break;
    }
    return sEPValue;
};
/*دوال خاصة بالجاكس*/

function AjaxProgress(bValue) {
    if (bValue) {
        AjaxBox("divAjax", "48", "48");
    }
    else {
        AjaxBoxTOG("divAjax");
    }
};

function AjaxTimeOut(bValue) {
    if (bValue) {
        alert("لا توجد استجابة من الخادم");
    }
    else {
        alert("خطأ في المهلة الزمنية");
    }
};


function AjaxBox(sDiv, w, h) {
    var sDivID = $(sDiv).id;
    //setTimeout("AjaxBoxTOG('" + sDivID + "')",100);
    /*
    var htmlheight = document.body.parentNode.scrollheight;
    var windowheight = window.innerheight;
    if ( htmlheight < windowheight )
    {
    $S('AjaxBoxBG').height = windowheight + "px";
    }
    else
    {
    $S('AjaxBoxBG').height = htmlheight + "px";
    }
    */
    $S('AjaxBoxBG').height = window.screen.height + 'px'; //document.body.clientHeight ; //+'px' document.body.clientWidth;//'100%';// window.screen.height + 'px'// '103%'
    $S('AjaxBoxBG').width = window.screen.width + 'px'; // document.body.clientWidth ;//+'px' window.screen.width + 'px' //'103%';
    $S('AjaxBoxBG').display = 'block';
    window.scroll = false;
    $S(sDivID).left = Math.round((XYwin(1) - w) / 2) + 'px';
    $S(sDivID).width = w + 'px';
    $S(sDivID).height = h + 'px';
    $S(sDivID).display = 'block';

    $S(sDivID).top = 285 - (parseInt($S(sDivID).height) / 2);
};

function AjaxBoxTOG(sDiv) {

    $S('AjaxBoxBG').display = 'none';
    $S(sDiv).display = 'none';
};

function $(v) {
    return (document.getElementById(v));
};

function $S(v) {
    return ($(v).style);
};

function agent(v) {
    return (Math.max(navigator.userAgent.toLowerCase().indexOf(v), 0));
};

function isset(v) {
    return ((typeof (v) == 'undefined' || v.length == 0) ? false : true);
};

function XYwin(v) {
    var z = agent('msie') ? Array(document.body.clientHeight, document.body.clientWidth) : Array(window.innerHeight, window.innerWidth);
    return (isset(v) ? z[v] : z);
};


pageNJD.prototype.getData = function(res) {
    var iLLoop = 0;
    var iLCount = 0;

    iLCount = res.value.DPDDLValue.length - 1;

    for (iLLoop = 0; iLLoop <= iLCount; iLLoop++) {
        this.subListData[iLLoop] = res.value.DPDDLValue[iLLoop];
    }

    //this.rowData = res.value.DPData; //[["111", "1", "1", "true", "Row1"], ["222", "2", "2", "false", "Row2"], ["333", "3", "3", "true", "Row3"], ["444", "1", "2", "false", "Row4"], ["555", "3", "2", "true", "Row5"]]
    this.subDataValue = res.value.DownDataValue.Tables[0];

    this.intin(res.context); //
    this.fillData();

    document.getElementById("btnPrev").disabled = true;

};


pageNJD.prototype.displyData = function(res) {
    var oCol = 0;
    var iRCount = 0;
    if (res.error != null) {
        alert('حصل خطأ أثناء التصفح');
        return;
    }
    this.subDataValue = res.value.DownDataValue.Tables[0];

    //التحقق من تسريبات الميموري
    /*   
    if (this.pageIndex > 1) {
    setTimeout(this.prevPage.bind(this), 100);
    }
    else {
    setTimeout(this.nextPage.bind(this), 100);
    }
    */

    iRCount = this.subDataValue.Rows.length; //.split("|")

    oCol = this.subDataValue.Columns.length; //oCol[0].split("$").length;

    if (iRCount < this.pageSize) {
        document.getElementById("btnNext").disabled = true;
        //this.pageIndex = this.pageIndex - 1;
    }

    if (iRCount >= 0) { this.fillData(); }

    if (res.value.Result != '') {
        if ($('Result')) {
            if (document.all) {
                $('Result').innerText = res.value.Result;
            }
            else {
                $('Result').textContent = res.value.Result;
            }
        }

        window.scrollTo(0, 0);
        $('Result').style.display = '';

        setTimeout("$('Result').style.display = 'none'", 3000);
    }


};


/*دالة ربط البيانات وعرضها في الصفحة*/
pageNJD.prototype.displayingWholePageData = function(res) {
    var iIOCount = 0;
    var iIOloop = 0;
    var sPerfix = "";
    var iListIndex = 0;
    var oEle = null;
    var iDTLoop = 0;
    var iDTCount = 0;
    var oFieldValue = null;
    var iStartCol = 0;
    //ملء مصفوفة القوائم أعلى الصفحة
    iDTCount = res.value.TPDDListValue.Tables.length - 1;
    for (iDTLoop = 0; iDTLoop <= iDTCount; iDTLoop++) {
        this.mainListData[iDTLoop] = res.value.TPDDListValue.Tables[iDTLoop];
    }

    //شرط ملء القوائم السفلية
    if (this.pageType != 0) {
        //ملء مصفوفة القوائم اسفل الصفحة
        iDTLoop = 0;
        iDTCount = 0;
        iDTCount = res.value.DPDDListValue.Tables.length - 1;
        for (iDTLoop = 0; iDTLoop <= iDTCount; iDTLoop++) {
            this.subListData[iDTLoop] = res.value.DPDDListValue.Tables[iDTLoop];
        }
    }

    this.mainDataValue = res.value.TopDataValue.Tables[0];
    //تعبئة اعلى الصفحة
    iIOCount = this.mainIOControls.length - 1;

    for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
        iListIndex = 0;
        sPerfix = "";
        sPerfix = this.mainIOControls[iIOloop].substr(0, 3);
        oEle = null;
        oEle = $(this.mainIOControls[iIOloop]);

        oFieldValue = null;
        //للتأكد من وجود بيانات
        if (this.mainDataValue.Rows.length > 0) {
            if ((this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name]) == "undefined" || (this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name]) == "") {
                oFieldValue = 0;
            }
            else {
                oFieldValue = this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
            }
        }
        else {
            oFieldValue = 0;
        }

        switch (sPerfix) {
            case "ddl":
                iListIndex = this.mainIOControls[iIOloop].substr(11, 1);
                iStartCol = parseInt(this.mainIOControls[iIOloop].substr(10, 1));

                this.creatDdlElement(oEle, this.mainListData[iListIndex], iStartCol);
                oEle.value = oFieldValue; // this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
                break;
            case "txt":
                oEle.value = oFieldValue; // this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
                break;
            case "enc":
                oEle.value = oFieldValue; // this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
                break;
            case "pas":
                oEle.value = oFieldValue; // this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
                break;
            case "chk":
                if (oFieldValue == 0) {
                    oEle.defaultChecked = false;
                }
                else {
                    oEle.defaultChecked = true;
                }

                oEle.checked = oEle.defaultChecked;
                break;
        }
    }


    this.subDataValue = res.value.DownDataValue.Tables[0];

    //شرط ملء محتوى اسفل الصفحة 
    if (this.pageType == 1) {
        //تعبئة اسفل الصفحة
        iIOCount = this.subIOControls.length - 1;
        iIOloop = 0;

        for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
            iListIndex = 0;
            sPerfix = "";
            sPerfix = this.subIOControls[iIOloop].substr(0, 3);
            oEle = null;
            oEle = $(this.subIOControls[iIOloop]);

            oFieldValue = null;

            //للتأكد من وجود بيانات
            if (this.subDataValue.Rows.length > 0) {
                if ((this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name]) == "undefined" || (this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name]) == "") {
                    oFieldValue = 0;
                }
                else {
                    oFieldValue = this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name];
                }
            }
            else {
                oFieldValue = 0;
            }

            switch (sPerfix) {
                case "ddl":
                    iListIndex = this.subIOControls[iIOloop].substr(11, 1);
                    iStartCol = parseInt(this.subIOControls[iIOloop].substr(10, 1));

                    this.creatDdlElement(oEle, this.subListData[iListIndex], iStartCol);
                    oEle.value = oFieldValue; // this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop].Name];
                    break;
                case "txt":
                    oEle.value = oFieldValue; //this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop].Name];
                    break;
                case "enc":
                    oEle.value = oFieldValue; //this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop].Name];
                    break;
                case "pas":
                    oEle.value = oFieldValue; //this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop].Name];
                    break;
                case "chk":
                    if (oFieldValue == 0) {
                        oEle.defaultChecked = false;
                    }
                    else {
                        oEle.defaultChecked = true;
                    }

                    oEle.checked = oEle.defaultChecked;
                    break;
            }
        }
    }

    if ($("btnTNew")) {
        $("btnTNew").onclick = this.insertNew.bind(this);
    }

    if ($("btnTSave")) {
        $("btnTSave").onclick = this.saveData.bind(this);
    }

    if ($("btnTDelete")) {
        $("btnTDelete").onclick = this.deleteData.bind(this);
    }

    if ($("btnSearchID")) {
        $("btnSearchID").onclick = this.searchByID.bind(this);
    }

    if ($("btnSearchValue")) {
        $("btnSearchValue").onclick = this.displaySearch.bind(this);
    }

    // تنفيذ في حال وجود تفاصيل شبكية
    if (this.pageType == 2) {
        if (this.gridActionButton >= 3) {
            this.intin(true);
        }
        else {
            this.intin(false);
        }
    }


    // بناء القوائم
    oMenu.creatMenuByTaq(res.value.MenuDataValue.Tables[0]);

    var rowsArry = res.value.MenuDataValue.Tables[0].Rows.length;

    var rowCount = res.value.MenuDataValue.Tables[0].Rows.length - 1;
    var rowLoop = 0;

    for (rowLoop = 0; rowLoop <= rowCount; rowLoop++) {
        rowData = res.value.MenuDataValue.Tables[0].Rows[rowLoop][res.value.MenuDataValue.Tables[0].Columns[0].Name]; // rowsArry[rowLoop];
        colsArray = rowData.split("^");

        if (colsArray[0] != 'XXX') {
            oMenu.CollcpanByID(colsArray[0]);
        }
    }

    oMenu.ExplanByID(GetParam());


    //تفعيل الأدوات المتاحة فوق الصفحة
    DoTopContrlTask(res.value.TopContrlsValue.Tables[0]);


    //تفعيل الأدوات المتاحة اسفل الصفحة
    if (res.value.DownContrlsValue.Tables.length != 0) {
        DoDownContrlTask(res.value.DownContrlsValue.Tables[0], this);
    }

    var sSBDParam=this.mainParametersValues;
    //تنفيذ دالة في الحالات الخاصة للصفحات التي محتواها السفلي لا يخضع لطريقة الشبكة
    if (typeof SBDFunction=='function') {SBDFunction(sSBDParam);}

};



/*دالة ربط البيانات وعرضها في الصفحة بعد عملية البحث*/
pageNJD.prototype.displayingReturnData = function(res) {

    var iIOCount = 0;
    var iIOloop = 0;
    var sPerfix = "";
    var iListIndex = 0;
    var oEle = null;
    var iDTLoop = 0;
    var iDTCount = 0;
    var oFieldValue = null;

    this.mainDataValue = res.value.TopDataValue.Tables[0];
    //تعبئة اعلى الصفحة
    iIOCount = this.mainIOControls.length - 1;

    //التأكد من وجود سجلات في النتيجة
    if (this.mainDataValue.Rows.length == 0) {
        alert('عفوا...لم يتم العثور على السجل المطلوب');
        return;
    }

    //الدوران خلال النتائج لعرضها
    for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
        iListIndex = 0;
        sPerfix = "";
        sPerfix = this.mainIOControls[iIOloop].substr(0, 3);
        oEle = null;
        oEle = $(this.mainIOControls[iIOloop]);
        if ((this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name]) == "undefined" || (this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name]) == "") {
            oFieldValue = 0;
        }
        else {
            oFieldValue = this.mainDataValue.Rows[0][this.mainDataValue.Columns[iIOloop].Name];
        }

        switch (sPerfix) {
            case "ddl":
                oEle.value = oFieldValue;
                break;
            case "txt":
                oEle.value = oFieldValue;
                break;
            case "enc":
                oEle.value = oFieldValue;
                break;
            case "pas":
                oEle.value = oFieldValue;
                break;
            case "chk":
                if (oFieldValue == 0) {
                    oEle.defaultChecked = false;
                }
                else {
                    oEle.defaultChecked = true;
                }

                oEle.checked = oEle.defaultChecked;
                break;
        }
    }

    this.subDataValue = res.value.DownDataValue.Tables[0];
    //شرط ملء محتوى اسفل الصفحة 
    switch (this.pageType) {
        case 1:
            //تعبئة اسفل الصفحة
            iIOCount = this.subIOControls.length - 1;
            iIOloop = 0;

            for (iIOloop = 0; iIOloop <= iIOCount; iIOloop++) {
                iListIndex = 0;
                sPerfix = "";
                sPerfix = this.subIOControls[iIOloop].substr(0, 3);
                oEle = null;
                oEle = $(this.subIOControls[iIOloop]);

                if ((this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name]) == "undefined" || (this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name]) == "") {
                    oFieldValue = 0;
                }
                else {
                    oFieldValue = this.subDataValue.Rows[0][this.subDataValue.Columns[iIOloop + 1].Name];
                }

                switch (sPerfix) {
                    case "ddl":
                        oEle.value = oFieldValue;
                        break;
                    case "txt":
                        oEle.value = oFieldValue;
                        break;
                    case "enc":
                        oEle.value = oFieldValue;
                        break;
                    case "pas":
                        oEle.value = oFieldValue;
                        break;
                    case "chk":
                        if (oFieldValue == 0) {
                            oEle.defaultChecked = false;
                        }
                        else {
                            oEle.defaultChecked = true;
                        }

                        oEle.checked = oEle.defaultChecked;
                        break;
                }
            }
            break;
        case 2:
            //تعبئة بيانات الشبكة
            this.fillData();

            break;
    }

   var sSBDParam=this.mainParametersValues;
    //تنفيذ دالة في الحالات الخاصة للصفحات التي محتواها السفلي لا يخضع لطريقة الشبكة
    if (typeof SBDFunction=='function') {SBDFunction(sSBDParam);}


};

//خاص بعملية طلب ترميز أساسي جديد
pageNJD.prototype.GenerateID_CallBack = function(res) {
    res.context.value = res.value.NewID;
    if (res.error != null) {
    }
    else {

    }
};

//دالة خاصة بعمليات النقر بمفتاح الادخال على القوائم
function OKPFunction(objSelect,e)
{
   e = e || window.event;
   var code = e.keyCode || e.which;    
   //alert(objSelect.id + '---' + code);
/*<div style="position: absolute; width: 421px; height: 163px; z-index: 1; left: 10px; top: 234px; border: 2px solid #C0C0C0" id="layer111">
&nbsp;</div>*/

AjaxBox('layer111',421,163);

}
/*Style Sheet*/

