﻿
(function($) {

	/* created fixed headers , require jquery dimenions plugins*/
	$.fn.SynchColumns = function(o) {
		var s = { adjustWidth: $.SynchColumns.calcWidth };
		if (o) $.extend(s, o);


		return this.each(function(i) {
			var table = $(this); //table
			var tId = this.id;

			var headerTable = $("#" + tId + "_head"); //table
			var headThs = headerTable.find('th');

			if (headThs.length > 0) {
				var headWert = headThs.eq(i).width();
			}

			table.find('td').each(function(i) {

				var wert = s.adjustWidth(this);
				//alert(wert);
				//wert = wert - 5;
				//if ($.browser.msie) headThs.eq(i).css('width', s.adjustWidth(this).substr(2));
				//else
				headThs.eq(i).css('width', wert);
			})

		});
	}

	$.SynchColumns = {
		calcWidth: function(th) {
			var w = $(th).width();
			var paddingLeft = $.SynchColumns.getComputedStyleInPx(th, 'paddingLeft');
			var paddingRight = $.SynchColumns.getComputedStyleInPx(th, 'paddingRight');
			var borderWidth = $.SynchColumns.getComputedStyleInPx(th, 'borderRightWidth');
			if ($.browser.msie) w = w + borderWidth - 1;
			if ($.browser.opera) w = w + borderWidth;
			if ($.browser.safari) w = w + paddingLeft + paddingRight + borderWidth * 2;
			if ($.browser.mozilla) w = w + borderWidth; //FF2 still got a border-left missing problem, this is the best I can do.
			return w;
		},
		getComputedStyleInPx: function(elem, style) {
			var computedStyle = (typeof elem.currentStyle != 'undefined')
				? elem.currentStyle
				: document.defaultView.getComputedStyle(elem, null);
			var val = computedStyle[style];
			val = val ? parseInt(val.replace("px", "")) : 0;
			return (!val || val == 'NaN') ? 0 : val;
		},
		getScrollBarWidth: function() { //calculate or get from global the scroll bar width

			if (!$.SynchColumns.scrollBarWidth) {

				var inner = $(document.createElement('p')).css({ width: '100%', height: '100%' });
				var outer = $(document.createElement('div'))
					.css({
						position: 'absolute',
						top: '0px',
						left: '0px',
						visibility: 'hidden',
						width: '200px',
						height: '150px',
						overflow: 'hidden'
					})
					.append(inner)
					.appendTo(document.body);

				var w1 = inner[0].offsetWidth;
				outer[0].style.overflow = 'scroll';
				var w2 = inner[0].offsetWidth;
				if (w1 == w2) w2 = outer[0].clientWidth;
				document.body.removeChild(outer[0]);
				$.SynchColumns.scrollBarWidth = (w1 - w2);
			}
			return $.SynchColumns.scrollBarWidth;
		}
	}

})(jQuery);
/**
* Stupid Fixed Header 1.0.3 - jQuery plugins to create a fixed headers
*/
(function($) {

	/* created fixed headers , require jquery dimenions plugins*/
	$.fn.fixedHeader = function(o) {
		var s = { adjustWidth: $.fixedHeader.calcWidth };
		if (o) $.extend(s, o);

		return this.each(function() {
			var table = $(this); //table
			var tId = this.id;

			var scrollBarWidth = $.fixedHeader.getScrollBarWidth();
			var IE6 = $.browser.msie && $.browser.version == '6.0';

			//wrap a body container
			var bodyContainer = table.wrap('<div></div>').parent()
				.attr('id', tId + "_body_container")
				.css({
					width: s.width,
					height: s.height,
					overflow: 'scroll'
				});


			//Wrap with an overall container
			var tableContainer = bodyContainer.wrap('<div></div>').parent()
				.attr('id', tId + '_table_container')
				.css('position', 'relative');

			//clone the header
			var position = table.position();
			var headerContainer = $(document.createElement('div'))
				.attr('id', tId + '_header_container')
				.css({
					width: bodyContainer.innerWidth() - scrollBarWidth,
					height: table.find('thead').outerHeight(),
					overflow: 'hidden',
					top: position.top, left: position.left
				})
				.prependTo(tableContainer);
			//var x = y;
			var headerTable = table.clone(true)
				.find('tbody').remove().end()
				.attr('id', tId + "_header")
				.addClass(s.tableClass || table[0].className)
				.css({
					width: $.browser.msie ? table.outerWidth() : table.width(),
					'table-layout': 'fixed',
					position: 'absolute',
					top: 0, left: 0
				})
			//von karl vorübergehend auskommentiert
			//.append(table.find('thead').clone(true))
				.appendTo(headerContainer);
			//var x = y;
			//sync header width
			var headThs = headerTable.find('th');
			table.find('th').each(function(i) {
				//var x = y;
				var wert = s.adjustWidth(this);
				//alert(wert);
				//wert = wert - 5;
				//if ($.browser.msie) headThs.eq(i).css('width', s.adjustWidth(this).substr(2));
				//else
				headThs.eq(i).css('width', wert);
			})

			//sync scroll
			var selects = IE6 ? table.find("select") : null;
			bodyContainer.scroll(function() {
				if (IE6 && selects.size() > 0) {
					selects.each(function(i) {
						this.style.visibility =
							($(this).offset().top - bodyContainer.offset().top) <= table.find("thead").outerHeight() + 10
							? 'hidden' : 'visible';
					});
				}
				headerTable.css({
					left: '-' + $(this).scrollLeft() + 'px'
				});
			})

			//Move it down
			headerContainer.css({
				'position': 'absolute',
				'top': 0
			});
		});
	}

	$.fixedHeader = {
		calcWidth: function(th) {
			var w = $(th).width();
			var paddingLeft = $.fixedHeader.getComputedStyleInPx(th, 'paddingLeft');
			var paddingRight = $.fixedHeader.getComputedStyleInPx(th, 'paddingRight');
			var borderWidth = $.fixedHeader.getComputedStyleInPx(th, 'borderRightWidth');
			//			if ($.browser.msie) w = w + borderWidth;
			//			if ($.browser.opera) w = w + borderWidth;
			//			if ($.browser.safari) w = w + paddingLeft + paddingRight + borderWidth * 2;
			//			if ($.browser.mozilla && parseFloat($.browser.version) <= 1.8) w = w + borderWidth; //FF2 still got a border-left missing problem, this is the best I can do.
			return w;
		},
		getComputedStyleInPx: function(elem, style) {
			var computedStyle = (typeof elem.currentStyle != 'undefined')
				? elem.currentStyle
				: document.defaultView.getComputedStyle(elem, null);
			var val = computedStyle[style];
			val = val ? parseInt(val.replace("px", "")) : 0;
			return (!val || val == 'NaN') ? 0 : val;
		},
		getScrollBarWidth: function() { //calculate or get from global the scroll bar width

			if (!$.fixedHeader.scrollBarWidth) {

				var inner = $(document.createElement('p')).css({ width: '100%', height: '100%' });
				var outer = $(document.createElement('div'))
					.css({
						position: 'absolute',
						top: '0px',
						left: '0px',
						visibility: 'hidden',
						width: '200px',
						height: '150px',
						overflow: 'hidden'
					})
					.append(inner)
					.appendTo(document.body);

				var w1 = inner[0].offsetWidth;
				outer[0].style.overflow = 'scroll';
				var w2 = inner[0].offsetWidth;
				if (w1 == w2) w2 = outer[0].clientWidth;
				document.body.removeChild(outer[0]);
				$.fixedHeader.scrollBarWidth = (w1 - w2);
			}
			return $.fixedHeader.scrollBarWidth;
		}
	}

})(jQuery);

//****************
//LyoGrid
LyoGrid = function(settings) {

	this.settings = settings;
	this.RowActionParam = new Array();

	//Formular fürs löschen erstellen



	//alert(settings.DeleteActionString);

}
//****************
// Liefert eine neue oder die bereits existierende Instanz zum Assistenten
LyoGrid.Instance = function(id, settings) {


	if (id == null || id == undefined) {
		alert("Name of assistent could not be empty!");

		//throw ("Name of assistent could not be empty!");
	}

	var name = "grid_" + id;
	if (window[name] == null) {
		settings.ID = id;
		window[name] = new LyoGrid(settings);
		return window[name];
	} else {
		return window[name];
	}
}

//*******
//Alle einstellungen setzen
LyoGrid.prototype.doSettingUpGrid = function(actionParams, search) {

	var settings = this.settings;

	var self = this;
	if (settings.Scrollable == "True") {
		//alert("n" + settings.Scrollable);
		LyoGrid.Instance(settings.ID).doScrollable();

	}
	else
		this.doDivWidth(actionParams, search);


	LyoGrid.Instance(settings.ID).doSearchFieldEvents(actionParams, search);
	LyoGrid.Instance(settings.ID).doCurrentPageEvent(actionParams, search);
	LyoGrid.Instance(settings.ID).doRowsPerPageEvent(actionParams, search);
	LyoGrid.Instance(settings.ID).doDatePickerEvent(actionParams, search);
	LyoGrid.Instance(settings.ID).doSelectedRow();
	LyoGrid.Instance(settings.ID).doSelectRowEvent(actionParams, search);
	LyoGrid.Instance(settings.ID).doOnChangeEvent(actionParams, search);



	//schreibt alle Parameter des Grids in alle gefundenen Formulare
	$('form').each(function(i) {
		self.AddActionParamsToForm(this, actionParams);
	});
}

//****************
//doAction
LyoGrid.prototype.doAction = function(actionParams, search) {

    var settings = this.settings;
    //alert(settings.actionUrl);
    if (actionParams == null)
        actionParams = this.GetActionParams();

    //alert(actionParams.PendingPositionListGrid_SelectedRowValue);
    //PendingPositionListGrid
    if (search == null)
        search = true;


    $.showPleaseWaitBox();

    var SearchFields = "";

    if (search == true)
        SearchFields = LyoGrid.Instance(settings.ID).doSearchFields(actionParams, search);

    var actionUrl = settings.actionUrl;

    eval("actionParams." + settings.ID + "_SearchField='" + encodeURI(SearchFields) + "';");
    eval("var gridaction = actionParams." + settings.ID + "_Action;");

    if (gridaction == "Csv") {
        $.hidePleaseWaitBox();

        if (actionUrl.indexOf("?") == -1)
            actionUrl = actionUrl + "?" + $.param(actionParams);
        else
            actionUrl = actionUrl + "&" + $.param(actionParams);

        //alert(actionUrl);
        location.href = actionUrl;

    }
    else {
        LyoGrid.Instance(settings.ID).saveActionParams(actionParams);

        $.post(actionUrl, actionParams, function(data) {
            $("#div_" + settings.ID).html(data);

            eval("actionParams." + settings.ID + "_DoDelete='';")
            LyoGrid.Instance(settings.ID).doSettingUpGrid(actionParams, search);

            $.hidePleaseWaitBox();
            // Zahlen, wenn vorhanden und möglich formatieren
            $('.numberDecimal').each(function(idx, obj) {
                FormatNumberDecimal(obj);
            });
            $('.number').each(function(idx, obj) {
                FormatNumber(obj);
            });

        });

    }
}

//****************
//saveActionParams
LyoGrid.prototype.saveActionParams = function(actionParams) {

	//	alert(actionParams);
	var settings = this.settings;
	if (actionParams == null)
		actionParams = this.GetActionParams();

	var SearchFields = LyoGrid.Instance(settings.ID).doSearchFields(actionParams, true);

	eval("actionParams." + settings.ID + "_Search=\"" + encodeURI(SearchFields) + "\";");
	eval("var gridaction = actionParams." + settings.ID + "_Action;");

	$.each(actionParams, function(i, n) {
		//Session.Cookies.Set(i, n);
	});
}

//****************
//RowsPerPageEvent
LyoGrid.prototype.doDeleteData = function(actionParams, search) {
	//var x = Y;
	var settings = this.settings;
	this.DoActionForm(actionParams);

	//this.ActionForm.appendChild(this.createHiddenfild("DoDelete", eval("actionParams." + settings.ID + "_DoDelete")));
	this.createHiddenfild(this.ActionForm, "DoDelete", eval("actionParams." + settings.ID + "_DoDelete"));
	this.ActionForm.submit();
}
//****************

LyoGrid.prototype.DoActionForm = function(actionParams) {

	var settings = this.settings;

	this.ActionForm = document.createElement('form');
	//alert(settings.DeleteActionString);
	this.ActionForm.action = settings.DeleteActionString;
	this.ActionForm.method = "post";
	this.ActionForm.id = settings.ID + "_ActionForm";
	this.ActionForm.name = settings.ID + "_ActionForm";

	//this.DoDeleteForm.onsubmit = "alert('skljdh');";
	document.body.appendChild(this.ActionForm);
	this.AddActionParamsToForm(this.ActionForm, actionParams);
}

LyoGrid.prototype.GetActionParams = function() {
	var settings = this.settings;
	var actionParams = new Object;
	eval("actionParams." + settings.ID + "_CurrentPage='" + $("#div_" + settings.ID).find('#' + settings.ID + '_CurrentPage')[0].value + "';");
	eval("actionParams." + settings.ID + "_RowsPerPage='" + $("#div_" + settings.ID).find('#' + settings.ID + '_RowsPerPage')[0].value + "';");
	eval("actionParams." + settings.ID + "_OrderColumn='" + $("#div_" + settings.ID).find('#' + settings.ID + '_OrderColumn')[0].value + "';");
	eval("actionParams." + settings.ID + "_OrderDirection='" + $("#div_" + settings.ID).find('#' + settings.ID + '_OrderDirection')[0].value + "';");
	eval("actionParams." + settings.ID + "_SelectedRowValue='" + this.settings.SelectedRowValue + "';");
	eval("actionParams." + settings.ID + "_SelectedRowIndex='" + this.settings.SelectedRowIndex + "';");
	//	eval("actionParams." + settings.ID + "_SelectedRowIndex='" + $("#div_" + settings.ID).find('#' + settings.ID + '_SelectedRowIndex')[0].value + "';");
	//	eval("actionParams." + settings.ID + "_SelectedRowValue='" + $("#div_" + settings.ID).find('#' + settings.ID + '_SelectedRowValue')[0].value + "';");

	return actionParams;

}

//schreibt alle actionParams in ein Form
LyoGrid.prototype.AddActionParamsToForm = function(form, actionParams) {
	var settings = this.settings;

	this.createHiddenfild(form, settings.ID + "_CurrentPage", eval("actionParams." + settings.ID + "_CurrentPage"));
	this.createHiddenfild(form, settings.ID + "_RowsPerPage", eval("actionParams." + settings.ID + "_RowsPerPage"));
	this.createHiddenfild(form, settings.ID + "_OrderDirection", eval("actionParams." + settings.ID + "_OrderDirection"));
	this.createHiddenfild(form, settings.ID + "_OrderColumn", eval("actionParams." + settings.ID + "_OrderColumn"));
	this.createHiddenfild(form, settings.ID + "_SelectedRowIndex", eval("actionParams." + settings.ID + "_SelectedRowIndex"));
	this.createHiddenfild(form, settings.ID + "_SelectedRowValue", eval("actionParams." + settings.ID + "_SelectedRowValue"));
	this.createHiddenfild(form, settings.ID + "_DoDelete", eval("actionParams." + settings.ID + "_DoDelete"));

	var SearchFields = LyoGrid.Instance(settings.ID).doSearchFields(actionParams, true);
	this.createHiddenfild(form, settings.ID + "_SearchField", SearchFields);
	//this.createHiddenfild(form, settings.ID + "_NewRowCount", eval("actionParams." + settings.ID + "_NewRowCount"));
	//var x = y;
}




LyoGrid.prototype.createHiddenfild = function(form, name, value) {

	var field = document.createElement('input');
	field.type = "hidden";
	field.name = name;
	field.value = value;
	field.id = name;


	form = $(form);
	if (form.find("#" + name).length > 0) {
		form.find("#" + name)[0].value = value;
	}
	else form.context.appendChild(field);
}



//****************
//doSearchFieldEvents
LyoGrid.prototype.doSearchFieldEvents = function(actionParams, search) {

	var settings = this.settings;
	//var x = y;
	if ($("form").length > 0)
		return;
	//alert($("form").length);
	$("#div_" + settings.ID).find(".search_input").each(function(i) {

		$(this).bind("keydown", function(e) {
			if (e.keyCode == 13) {

				//actionParams.CurrentPage = 1;
				eval("actionParams." + settings.ID + "_CurrentPage='1';")
				LyoGrid.Instance(settings.ID).doAction(actionParams, search);
			}
		});
	});

}
//****************

//****************
//doCurrentPageEvent
LyoGrid.prototype.doCurrentPageEvent = function(actionParams, search) {


	var settings = this.settings;

	$("#div_" + settings.ID).find(".CurrentPage").each(function(i) {
		$(this).bind("keydown", function(e) {
			if (e.keyCode == 13) {
				//var x = eval("actionParams." + settings.ID + "_CurrentPage");

				LyoGrid.Instance(settings.ID).ParseCurrentPageVal($(this));
				eval("actionParams." + settings.ID + "_CurrentPage='" + this.value + "';")
				//actionParams.CurrentPage = this.value;
				LyoGrid.Instance(settings.ID).doAction(actionParams, search);
			}
		});
	});
	//alert(eval("actionParams." + settings.ID + "_CurrentPage"));
	$("#div_" + settings.ID).find(".CurrentPage").each(function(i) {
		$(this).bind("blur", function(e) {

		LyoGrid.Instance(settings.ID).ParseCurrentPageVal($(this));
		eval("actionParams." + settings.ID + "_CurrentPage='" + this.value + "';")
			LyoGrid.Instance(settings.ID).doAction(actionParams, search);
		});
	});

}
LyoGrid.prototype.ParseCurrentPageVal = function(field) {
	var settings = this.settings;
	var cnt = parseInt(field.val());
	
	if (isNaN(cnt) || cnt < 1)
		cnt = 1;
	field.val(cnt);
}

//****************   

//****************
//RowsPerPageEvent
LyoGrid.prototype.doRowsPerPageEvent = function(actionParams, search) {

	var settings = this.settings;
	$("#div_" + settings.ID).find(".RowsPerPage").each(function(i) {
		$(this).bind("change", function(e) {
			var x = eval("actionParams." + settings.ID + "_RowsPerPage");
			eval("actionParams." + settings.ID + "_RowsPerPage='" + this.options[this.selectedIndex].text + "';")

			LyoGrid.Instance(settings.ID).doAction(actionParams, search);

		});
	});


}
//****************





//****************
//Grid Scrollable
LyoGrid.prototype.doScrollable = function() {

	var settings = this.settings;
	//alert(settings.Height);
	//$("#" + settings.ID).fixedHeader({ width: parseInt(settings.Width), height: parseInt(settings.Height) });

	if (parseInt($("#div_" + settings.ID).find('#' + settings.ID + '_TotalRecords').val()) > 0)
		$("#" + settings.ID).SynchColumns($("#" + settings.ID));


}
//****************



//****************
//SearchFields für die Action befüllen
LyoGrid.prototype.doSearchFields = function(actionParams, search) {
	var settings = this.settings;


	//alert(this[0].id);
	//var x = Y;
	var selects = $("#div_" + settings.ID).find(".search_input");
	if (settings.Scrollable == "True")
		selects = $("#" + settings.ID + "_header_container").find(".search_input")


	var fieldsCount = selects.length;

	searchString = "";
	selects.each(function(i) {

		searchString += "[{FieldKey:" + selects[i].getAttribute("FieldKey") + "},"
		searchString += "{FieldDataType:" + selects[i].getAttribute("FieldDataType") + "},"
		searchString += "{FieldName:" + selects[i].getAttribute("FieldName") + "},"
		searchString += "{FieldFilterType:" + selects[i].getAttribute("FieldFilterType") + "},"
		searchString += "{ColumnIndex:" + selects[i].getAttribute("ColumnIndex") + "},"
		searchString += "{FieldValue:" + $(selects[i]).val() + "}]"

		if (fieldsCount - 1 != i)
			searchString += ",";


	});


	//alert(searchString);
	return searchString;
}
//****************

LyoGrid.prototype.getSearchField = function(fieldId) {

	var searchField = null;
	$('#' + this.settings.ID).find('.search_input').each(function(i) {

		if (this.id == fieldId) {
			searchField = this;

		}
	});

	return $(searchField);
}



//**
//doClearSearchFields

LyoGrid.prototype.DoClearSearchFields = function(actionParams, search) {

	var settings = this.settings;

	var searchString = "";
	//alert(this[0].id);
	var selects = $("#div_" + settings.ID).find(".search_input");
	if (settings.scrollable == true)
		selects = $("#div_" + settings.ID + "_header_container").find(".search_input");

	var x = "";

	selects.each(function(i) {
		if (selects[i].type != "hidden")
			selects[i].value = "";

	});


	return searchString;
}
//**

//********************
LyoGrid.prototype.doDatePickerEvent = function(actionParams, search) {

	var settings = this.settings;
	var selects = $("#div_" + settings.ID).find(".gridDatePicker");

	selects.each(function(i) {
		$(selects[i]).lyodatepicker();

	});


}
//********************

//Hack wenn keine Briete angegeben wird 
//dann wird der Div ganz aufgezogen
LyoGrid.prototype.doDivWidth = function(actionParams, search) {
	var cfg = this.settings;
	//alert(settings.ID);
	$(document).ready(function() {
		var x = cfg;


		if ($("#div_" + cfg.ID) && $("#div_" + cfg.ID).find("#" + cfg.ID).length == 1)
		//alert(x.Width);

		//$("#div_" + cfg.ID).css('width', $("#div_" + cfg.ID).find("#" + cfg.ID)[0].clientWidth);
		//TODO  @karl Breite richtig auslesen, clientWidth funktioniert nur im IE
			$("#div_" + cfg.ID).css('width', x.Width);

	});
}



/*
Zeile nach dem Post wieder selectieren
*/
LyoGrid.prototype.doSelectedRow = function() {


	var self = this;
	var settings = self.settings;



	var index = $('#' + self.settings.ID + '_RowsPerPage').val() * ($('#' + self.settings.ID + '_CurrentPage').val() - 1) - 1;

	var selects = LyoGrid.Instance(self.settings.ID).getDataRows();
	//wenn es eine SelectedRowValue gibt
	if (self.settings.SelectedRowValue != null && self.settings.SelectedRowValue != "" || self.settings.SelectedRowIndex > 0) {

		selects.each(function(i) {
			index++;
			if (self.settings.ColumnForSelectedRowIdentifier != null && self.settings.ColumnForSelectedRowIdentifier != "") {

				var fieldname = self.settings.Prefix + '\\[' + index + '\\]_' + self.settings.ColumnForSelectedRowIdentifier;

				var field = $("#div_" + settings.ID).find('#' + fieldname);

				if (field.length > 0) {
					if (self.settings.SelectedRowValue == field.val()) {
						self.settings.SelectedRow = this;
						$(this).addClass("selected");
						$(this).removeClass("notselected");
					}
				}
			}
			else {
				if (self.settings.SelectedRowIndex == index) {

					self.settings.SelectedRow = this;
					$(this).addClass("selected");
					$(this).removeClass("notselected");
				}
			}
		});
	}


};

LyoGrid.prototype.getDataRows = function() {
	var self = this;
	var DataRows = $("#" + self.settings.ID).find(".gridrowselector");
	return DataRows;
}

/*
selected Row event draufhängen
*/
LyoGrid.prototype.doSelectRowEvent = function(actionParams, search) {
	var self = this;

	//	var x = y;
	//	//var selects = $("#div_" + self.settings.ID).find("TR");
	var settings = self.settings;
	var selects = LyoGrid.Instance(self.settings.ID).getDataRows();


	selects.each(function(i) {

		//	// Daten für RowClickaction
		//	var RowActionData;
		//	if (self.settings.RowClickAction || self.settings.RowDoubleClickAction) {
		//		RowActionData = self.getSelectRowActionData(this, self.settings.Prefix);
		//	}



		if (self.settings.RowDoubleClickAction) {

			$(this).bind('dblclick', function(e) {
				RowActionData = self.getSelectRowActionData(this, self.settings.Prefix);

				$.each(self.GetActionParams(), function(i, n) {
					//Session.Cookies.Set(i, n);
				});

				eval(self.settings.RowDoubleClickAction + "(" + RowActionData + ");");
			});
		}

		$(selects[i]).bind('click', function(e) {

			//alte deselectieren
			if (self.settings.SelectedRow != null) {
				$(self.settings.SelectedRow).removeClass("selected");
				//wieder entfernt
				//$(self.settings.SelectedRow).addClass("notselected");
			}
			//new selectieren
			self.settings.SelectedRow = this;
			$(this).addClass("selected");
			$(this).removeClass("notselected");

			//wenn der SelectedRowIdentifier(name der Id Spalte) null ist dann über index merken sonst die value dieser spalte holen
			if (self.settings.ColumnForSelectedRowIdentifier == null && self.settings.ColumnForSelectedRowIdentifier == '') {
				self.settings.SelectedRowIndex = i;
				var fieldname = settings.ID + '_SelectedRowIndex';
				$("#" + fieldname).val(self.settings.SelectedRowIndex);
			}
			else {
				//alert(self.settings.ColumnForSelectedRowIdentifier);
				var fieldname = self.settings.Prefix + '\\[' + i + '\\]_' + self.settings.ColumnForSelectedRowIdentifier;

				var field = $("#div_" + settings.ID).find('#' + fieldname);

				if (field.length > 0) {
					self.settings.SelectedRowValue = field.val();
					//alert(self.settings.SelectedRowValue);
					var fieldname = settings.ID + '_SelectedRowValue';
					$("#" + fieldname).val(self.settings.SelectedRowValue);
				}

			}

			$.each(self.GetActionParams(), function(i, n) {
				//Session.Cookies.Set(i, n);
			});

			//die Funktion aufrufen die für RowClickAction hinterlegt ist
			if (self.settings.RowClickAction) {
				//alert(self.settings.RowClickAction);
				var RowActionData = self.getSelectRowActionData(this, self.settings.Prefix);

				if (RowActionData != "")
					eval(self.settings.RowClickAction + "(" + RowActionData + ");");
			}
		});

	});
};

LyoGrid.prototype.getSelectRowActionData = function(row, prefix) {

	var self = this;
	var params = "({";
	var inputs = $(row).find("*");
	var ParamsCount = 0;
	//var x = y;
	inputs.each(function(j) {

		//alert(inputs[j].name);
		if (inputs[j].type == "text" || inputs[j].type == "hidden" || inputs[j].type == "select" && inputs[j].id != "") {
			var id = inputs[j].name.replace(prefix, '').replace('[', '<').replace(']', '>');
			var Suche = /(<)[0-9]+(>.)/;

			if (Suche.exec(id) != null && self.mayRowActionParam(id.replace(Suche.exec(id)[0], ''))) {

				ParamsCount++;
				var name = id.replace(Suche.exec(id)[0], '');
				var value = inputs[j].value.replace("\"", "");
				params += name + ':\"' + value + '\",';
			}
		}
	});

	params = params.substring(0, params.lastIndexOf(",")) + "})";
	//alert(params);
	if (ParamsCount > 0)
		return params;
	else
		return "";


}

LyoGrid.prototype.mayRowActionParam = function(field) {
	var self = this;
	//alert(self.RowActionParam.length);
	for (i = 0; i < self.RowActionParam.length; i++) {
		if (field == self.RowActionParam[i])
			return true;
	}
	return false;

}
LyoGrid.prototype.addRowActionParam = function(param, i) {

	var self = this;
	this.RowActionParam[i] = param;
	//alert(param);

}

LyoGrid.prototype.doOnChangeEvent = function(actionParams, search) {
	var self = this;

	var rows = LyoGrid.Instance(self.settings.ID).getDataRows();
	rows.each(function(i) {
		//var x = Y;
		var inputs = $(rows[i]).find("*");

		var hiddenDoSave = document.getElementById("ViewData.GridData.Rows[" + i + "].DoSave");
		var FormMode = document.getElementById("ViewData.GridData.Rows[" + i + "].FormMode");
		//alert(FormMode.value);

		if (FormMode && FormMode.value == "New") {

			inputs.each(function(j) {

				if (inputs[j].type == "text" || inputs[j].type == "select") {

					$(inputs[j]).bind('change', function(e) {
						//var x = y;
						var empty = true;
						inputs.each(function(x) {
							if (inputs[x].type == "text" || inputs[x].type == "select") {
								if (inputs[x].value != "")
									empty = false;
							}


						});
						if (empty)
							hiddenDoSave.value = false;
						else
							hiddenDoSave.value = true;
						//alert(hiddenDoSave.value);
						//alert(FormMode.value);
					});
				}
			});
		}

	});
};