// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS

/*
 * @license jqGrid  4.4.4  - jQuery Grid
 * Copyright (c) 2008, Tony Tomov, tony@trirand.com
 * Dual licensed under the MIT and GPL licenses
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
 * Date: 2013-01-30
 */
//jsHint options
/*jshint evil:true, eqeqeq:false, eqnull:true, devel:true */
/*global jQuery, DOMParser, ActiveXObject */

var rp_ge = {};

(function ($) {
	'use strict';
	$.jgrid = $.jgrid || {};
	$.extend($.jgrid,{
		version : '4.4.4',
		htmlDecode : function(value){
			if(value && (value=='&nbsp;' || value=='&#160;' || (value.length===1 && value.charCodeAt(0)===160))) { return '';}
			return !value ? value : String(value).replace(/&gt;/g, '>').replace(/&lt;/g, '<').replace(/&quot;/g, '"').replace(/&amp;/g, '&');
		},
		htmlEncode : function (value){
			return !value ? value : String(value).replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
		},
		format : function(format){ //jqgformat
			var args = $.makeArray(arguments).slice(1);
			if(format==null) { format = ''; }
			return format.replace(/\{(\d+)\}/g, function(m, i){
				return args[i];
			});
		},
		msie : navigator.appName == 'Microsoft Internet Explorer',
		msiever : function () {
			var rv = -1;
			var ua = navigator.userAgent;
			var re  = new RegExp('MSIE ([0-9]{1,}[\.0-9]{0,})');
			if (re.exec(ua) != null) {
				rv = parseFloat( RegExp.$1 );
			}
			return rv;
		},
		getCellIndex : function (cell) {
			var c = $(cell);
			if (c.is('tr')) { return -1; }
			c = (!c.is('td') && !c.is('th') ? c.closest('td,th') : c)[0];
			if ($.jgrid.msie) { return $.inArray(c, c.parentNode.cells); }
			return c.cellIndex;
		},
		stripHtml : function(v) {
			v = String(v);
			var regexp = /<("[^"]*"|'[^']*'|[^'">])*>/gi;
			if (v) {
				v = v.replace(regexp,'');
				return (v && v !== '&nbsp;' && v !== '&#160;') ? v.replace(/\"/g,'\'') : '';
			}
			return v;
		},
		stripPref : function (pref, id) {
			var obj = $.type( pref );
			if( obj == 'string' || obj =='number') {
				pref =  String(pref);
				id = pref !== '' ? String(id).replace(String(pref), '') : id;
			}
			return id;
		},
		stringToDoc : function (xmlString) {
			var xmlDoc;
			if(typeof xmlString !== 'string') { return xmlString; }
			try	{
				var parser = new DOMParser();
				xmlDoc = parser.parseFromString(xmlString,'text/xml');
			}
			catch(e) {
				xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
				xmlDoc.async=false;
				xmlDoc.loadXML(xmlString);
			}
			return (xmlDoc && xmlDoc.documentElement && xmlDoc.documentElement.tagName != 'parsererror') ? xmlDoc : null;
		},
		parse : function(jsonString) {
			var js = jsonString;
			if (js.substr(0,9) == 'while(1);') { js = js.substr(9); }
			if (js.substr(0,2) == '/*') { js = js.substr(2,js.length-4); }
			if(!js) { js = '{}'; }
			return ($.jgrid.useJSON===true && typeof JSON === 'object' && typeof JSON.parse === 'function') ?
				JSON.parse(js) :
				eval('(' + js + ')');
		},
		parseDate : function(format, date) {
			var tsp = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0, u:0},k,hl,dM, regdate = /[\\\/:_;.,\t\T\s-]/;
			if(date && date != null){
				date = $.trim(date);
				date = date.split(regdate);
				if ($.jgrid.formatter.date.masks[format] !== undefined) {
					format = $.jgrid.formatter.date.masks[format];
				}
				format = format.split(regdate);
				var dfmt  = $.jgrid.formatter.date.monthNames;
				var afmt  = $.jgrid.formatter.date.AmPm;
				var h12to24 = function(ampm, h){
					if (ampm === 0){ if (h === 12) { h = 0;} }
					else { if (h !== 12) { h += 12; } }
					return h;
				};
				for(k=0,hl=format.length;k<hl;k++){
					if(format[k] == 'M') {
						dM = $.inArray(date[k],dfmt);
						if(dM !== -1 && dM < 12){
							date[k] = dM+1;
							tsp.m = date[k];
						}
					}
					if(format[k] == 'F') {
						dM = $.inArray(date[k],dfmt);
						if(dM !== -1 && dM > 11){
							date[k] = dM+1-12;
							tsp.m = date[k];
						}
					}
					if(format[k] == 'a') {
						dM = $.inArray(date[k],afmt);
						if(dM !== -1 && dM < 2 && date[k] == afmt[dM]){
							date[k] = dM;
							tsp.h = h12to24(date[k], tsp.h);
						}
					}
					if(format[k] == 'A') {
						dM = $.inArray(date[k],afmt);
						if(dM !== -1 && dM > 1 && date[k] == afmt[dM]){
							date[k] = dM-2;
							tsp.h = h12to24(date[k], tsp.h);
						}
					}
					if (format[k] === 'g') {
						tsp.h = parseInt(date[k], 10);
					}
					if(date[k] !== undefined) {
						tsp[format[k].toLowerCase()] = parseInt(date[k],10);
					}
				}
				tsp.m = parseInt(tsp.m,10)-1;
				var ty = tsp.y;
				if (ty >= 70 && ty <= 99) {tsp.y = 1900+tsp.y;}
				else if (ty >=0 && ty <=69) {tsp.y= 2000+tsp.y;}
				if(tsp.j !== undefined) { tsp.d = tsp.j; }
				if(tsp.n !== undefined) { tsp.m = parseInt(tsp.n,10)-1; }
			}
			return new Date(tsp.y, tsp.m, tsp.d, tsp.h, tsp.i, tsp.s, tsp.u);
		},
		jqID : function(sid){
			return String(sid).replace(/[!"#$%&'()*+,.\/:; <=>?@\[\\\]\^`{|}~]/g,'\\$&');
		},
		guid : 1,
		uidPref: 'jqg',
		randId : function( prefix )	{
			return (prefix || $.jgrid.uidPref) + ($.jgrid.guid++);
		},
		getAccessor : function(obj, expr) {
			var ret,p,prm = [], i;
			if( typeof expr === 'function') { return expr(obj); }
			ret = obj[expr];
			if(ret===undefined) {
				try {
					if ( typeof expr === 'string' ) {
						prm = expr.split('.');
					}
					i = prm.length;
					if( i ) {
						ret = obj;
						while (ret && i--) {
							p = prm.shift();
							ret = ret[p];
						}
					}
				} catch (e) {}
			}
			return ret;
		},
		getXmlData: function (obj, expr, returnObj) {
			var ret, m = typeof expr === 'string' ? expr.match(/^(.*)\[(\w+)\]$/) : null;
			if (typeof expr === 'function') { return expr(obj); }
			if (m && m[2]) {
			// m[2] is the attribute selector
			// m[1] is an optional element selector
			// examples: "[id]", "rows[page]"
				return m[1] ? $(m[1], obj).attr(m[2]) : $(obj).attr(m[2]);
			}
			ret = $(expr, obj);
			if (returnObj) { return ret; }
			//$(expr, obj).filter(':last'); // we use ':last' to be more compatible with old version of jqGrid
			return ret.length > 0 ? $(ret).text() : undefined;
		},
		cellWidth : function () {
			var $testDiv = $('<div class=\'ui-jqgrid\' style=\'left:10000px\'><table class=\'ui-jqgrid-btable\' style=\'width:5px;\'><tr class=\'jqgrow\'><td style=\'width:5px;\'></td></tr></table></div>'),
				testCell = $testDiv.appendTo('body')
					.find('td')
					.width();
			$testDiv.remove();
			return testCell !== 5;
		},
		cell_width : true,
		ajaxOptions: {},
		from : function(source){
		// Original Author Hugo Bonacci
		// License MIT http://jlinq.codeplex.com/license
			var QueryObject=function(d,q){
				if(typeof d==='string'){
					d=$.data(d);
				}
				var self=this,
					_data=d,
					_usecase=true,
					_trim=false,
					_query=q,
					_stripNum = /[\$,%]/g,
					_lastCommand=null,
					_lastField=null,
					_orDepth=0,
					_negate=false,
					_queuedOperator='',
					_sorting=[],
					_useProperties=true;
				if(typeof d==='object'&&d.push) {
					if(d.length>0){
						if(typeof d[0]!=='object'){
							_useProperties=false;
						}else{
							_useProperties=true;
						}
					}
				}else{
					throw 'data provides is not an array';
				}
				this._hasData=function(){
					return _data===null?false:_data.length===0?false:true;
				};
				this._getStr=function(s){
					var phrase=[];
					if(_trim){
						phrase.push('jQuery.trim(');
					}
					phrase.push('String('+s+')');
					if(_trim){
						phrase.push(')');
					}
					if(!_usecase){
						phrase.push('.toLowerCase()');
					}
					return phrase.join('');
				};
				this._strComp=function(val){
					if(typeof val==='string'){
						return'.toString()';
					}
					return'';
				};
				this._group=function(f,u){
					return({field:f.toString(),unique:u,items:[]});
				};
				this._toStr=function(phrase){
					if(_trim){
						phrase=$.trim(phrase);
					}
					phrase=phrase.toString().replace(/\\/g,'\\\\').replace(/\"/g,'\\"');
					return _usecase ? phrase : phrase.toLowerCase();
				};
				this._funcLoop=function(func){
					var results=[];
					$.each(_data,function(i,v){
						results.push(func(v));
					});
					return results;
				};
				this._append=function(s){
					var i;
					if(_query===null){
						_query='';
					} else {
						_query+=_queuedOperator === '' ? ' && ' :_queuedOperator;
					}
					for (i=0;i<_orDepth;i++){
						_query+='(';
					}
					if(_negate){
						_query+='!';
					}
					_query+='('+s+')';
					_negate=false;
					_queuedOperator='';
					_orDepth=0;
				};
				this._setCommand=function(f,c){
					_lastCommand=f;
					_lastField=c;
				};
				this._resetNegate=function(){
					_negate=false;
				};
				this._repeatCommand=function(f,v){
					if(_lastCommand===null){
						return self;
					}
					if(f!==null&&v!==null){
						return _lastCommand(f,v);
					}
					if(_lastField===null){
						return _lastCommand(f);
					}
					if(!_useProperties){
						return _lastCommand(f);
					}
					return _lastCommand(_lastField,f);
				};
				this._equals=function(a,b){
					return(self._compare(a,b,1)===0);
				};
				this._compare=function(a,b,d){
					var toString = Object.prototype.toString;
					if( d === undefined) { d = 1; }
					if(a===undefined) { a = null; }
					if(b===undefined) { b = null; }
					if(a===null && b===null){
						return 0;
					}
					if(a===null&&b!==null){
						return 1;
					}
					if(a!==null&&b===null){
						return -1;
					}
					if (toString.call(a) === '[object Date]' && toString.call(b) === '[object Date]') {
						if (a < b) { return -d; }
						if (a > b) { return d; }
						return 0;
					}
					if(!_usecase && typeof a !== 'number' && typeof b !== 'number' ) {
						a=String(a);
						b=String(b);
					}
					if(a<b){return -d;}
					if(a>b){return d;}
					return 0;
				};
				this._performSort=function(){
					if(_sorting.length===0){return;}
					_data=self._doSort(_data,0);
				};
				this._doSort=function(d,q){
					var by=_sorting[q].by,
						dir=_sorting[q].dir,
						type = _sorting[q].type,
						dfmt = _sorting[q].datefmt;
					if(q==_sorting.length-1){
						return self._getOrder(d, by, dir, type, dfmt);
					}
					q++;
					var values=self._getGroup(d,by,dir,type,dfmt), results=[], i, j, sorted;
					for(i=0;i<values.length;i++){
						sorted=self._doSort(values[i].items,q);
						for(j=0;j<sorted.length;j++){
							results.push(sorted[j]);
						}
					}
					return results;
				};
				this._getOrder=function(data,by,dir,type, dfmt){
					var sortData=[],_sortData=[], newDir = dir=='a' ? 1 : -1, i,ab,j,
						findSortKey;

					if(type === undefined ) { type = 'text'; }
					if (type == 'float' || type== 'number' || type== 'currency' || type== 'numeric') {
						findSortKey = function($cell) {
							var key = parseFloat( String($cell).replace(_stripNum, ''));
							return isNaN(key) ? 0.00 : key;
						};
					} else if (type=='int' || type=='integer') {
						findSortKey = function($cell) {
							return $cell ? parseFloat(String($cell).replace(_stripNum, '')) : 0;
						};
					} else if(type == 'date' || type == 'datetime') {
						findSortKey = function($cell) {
							return $.jgrid.parseDate(dfmt,$cell).getTime();
						};
					} else if($.isFunction(type)) {
						findSortKey = type;
					} else {
						findSortKey = function($cell) {
							$cell = $cell ? $.trim(String($cell)) : '';
							return _usecase ? $cell : $cell.toLowerCase();
						};
					}
					$.each(data,function(i,v){
						ab = by!=='' ? $.jgrid.getAccessor(v,by) : v;
						if(ab === undefined) { ab = ''; }
						ab = findSortKey(ab, v);
						_sortData.push({ 'vSort': ab,'index':i});
					});

					_sortData.sort(function(a,b){
						a = a.vSort;
						b = b.vSort;
						return self._compare(a,b,newDir);
					});
					j=0;
					var nrec= data.length;
					// overhead, but we do not change the original data.
					while(j<nrec) {
						i = _sortData[j].index;
						sortData.push(data[i]);
						j++;
					}
					return sortData;
				};
				this._getGroup=function(data,by,dir,type, dfmt){
					var results=[],
						group=null,
						last=null, val;
					$.each(self._getOrder(data,by,dir,type, dfmt),function(i,v){
						val = $.jgrid.getAccessor(v, by);
						if(val == null) { val = ''; }
						if(!self._equals(last,val)){
							last=val;
							if(group !== null){
								results.push(group);
							}
							group=self._group(by,val);
						}
						group.items.push(v);
					});
					if(group !== null){
						results.push(group);
					}
					return results;
				};
				this.ignoreCase=function(){
					_usecase=false;
					return self;
				};
				this.useCase=function(){
					_usecase=true;
					return self;
				};
				this.trim=function(){
					_trim=true;
					return self;
				};
				this.noTrim=function(){
					_trim=false;
					return self;
				};
				this.execute=function(){
					var match=_query, results=[];
					if(match === null){
						return self;
					}
					$.each(_data,function(){
						if(eval(match)){results.push(this);}
					});
					_data=results;
					return self;
				};
				this.data=function(){
					return _data;
				};
				this.select=function(f){
					self._performSort();
					if(!self._hasData()){ return[]; }
					self.execute();
					if($.isFunction(f)){
						var results=[];
						$.each(_data,function(i,v){
							results.push(f(v));
						});
						return results;
					}
					return _data;
				};
				this.hasMatch=function(){
					if(!self._hasData()) { return false; }
					self.execute();
					return _data.length>0;
				};
				this.andNot=function(f,v,x){
					_negate=!_negate;
					return self.and(f,v,x);
				};
				this.orNot=function(f,v,x){
					_negate=!_negate;
					return self.or(f,v,x);
				};
				this.not=function(f,v,x){
					return self.andNot(f,v,x);
				};
				this.and=function(f,v,x){
					_queuedOperator=' && ';
					if(f===undefined){
						return self;
					}
					return self._repeatCommand(f,v,x);
				};
				this.or=function(f,v,x){
					_queuedOperator=' || ';
					if(f===undefined) { return self; }
					return self._repeatCommand(f,v,x);
				};
				this.orBegin=function(){
					_orDepth++;
					return self;
				};
				this.orEnd=function(){
					if (_query !== null){
						_query+=')';
					}
					return self;
				};
				this.isNot=function(f){
					_negate=!_negate;
					return self.is(f);
				};
				this.is=function(f){
					self._append('this.'+f);
					self._resetNegate();
					return self;
				};
				this._compareValues=function(func,f,v,how,t){
					var fld;
					if(_useProperties){
						fld='jQuery.jgrid.getAccessor(this,\''+f+'\')';
					}else{
						fld='this';
					}
					if(v===undefined) { v = null; }
					//var val=v===null?f:v,
					var val =v,
						swst = t.stype === undefined ? 'text' : t.stype;
					if(v !== null) {
						switch(swst) {
						case 'int':
						case 'integer':
							val = (isNaN(Number(val)) || val==='') ? '0' : val; // To be fixed with more inteligent code
							fld = 'parseInt('+fld+',10)';
							val = 'parseInt('+val+',10)';
							break;
						case 'float':
						case 'number':
						case 'numeric':
							val = String(val).replace(_stripNum, '');
							val = (isNaN(Number(val)) || val==='') ? '0' : val; // To be fixed with more inteligent code
							fld = 'parseFloat('+fld+')';
							val = 'parseFloat('+val+')';
							break;
						case 'date':
						case 'datetime':
							val = String($.jgrid.parseDate(t.newfmt || 'Y-m-d',val).getTime());
							fld = 'jQuery.jgrid.parseDate("'+t.srcfmt+'",'+fld+').getTime()';
							break;
						default :
							fld=self._getStr(fld);
							val=self._getStr('"'+self._toStr(val)+'"');
						}
					}
					self._append(fld+' '+how+' '+val);
					self._setCommand(func,f);
					self._resetNegate();
					return self;
				};
				this.equals=function(f,v,t){
					return self._compareValues(self.equals,f,v,'==',t);
				};
				this.notEquals=function(f,v,t){
					return self._compareValues(self.equals,f,v,'!==',t);
				};
				this.isNull = function(f,v,t){
					return self._compareValues(self.equals,f,null,'===',t);
				};
				this.greater=function(f,v,t){
					return self._compareValues(self.greater,f,v,'>',t);
				};
				this.less=function(f,v,t){
					return self._compareValues(self.less,f,v,'<',t);
				};
				this.greaterOrEquals=function(f,v,t){
					return self._compareValues(self.greaterOrEquals,f,v,'>=',t);
				};
				this.lessOrEquals=function(f,v,t){
					return self._compareValues(self.lessOrEquals,f,v,'<=',t);
				};
				this.startsWith=function(f,v){
					var val = (v==null) ? f: v,
						length=_trim ? $.trim(val.toString()).length : val.toString().length;
					if(_useProperties){
						self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.substr(0,'+length+') == '+self._getStr('"'+self._toStr(v)+'"'));
					}else{
						length=_trim?$.trim(v.toString()).length:v.toString().length;
						self._append(self._getStr('this')+'.substr(0,'+length+') == '+self._getStr('"'+self._toStr(f)+'"'));
					}
					self._setCommand(self.startsWith,f);
					self._resetNegate();
					return self;
				};
				this.endsWith=function(f,v){
					var val = (v==null) ? f: v,
						length=_trim ? $.trim(val.toString()).length:val.toString().length;
					if(_useProperties){
						self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.substr('+self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.length-'+length+','+length+') == "'+self._toStr(v)+'"');
					} else {
						self._append(self._getStr('this')+'.substr('+self._getStr('this')+'.length-"'+self._toStr(f)+'".length,"'+self._toStr(f)+'".length) == "'+self._toStr(f)+'"');
					}
					self._setCommand(self.endsWith,f);self._resetNegate();
					return self;
				};
				this.contains=function(f,v){
					if(_useProperties){
						self._append(self._getStr('jQuery.jgrid.getAccessor(this,\''+f+'\')')+'.indexOf("'+self._toStr(v)+'",0) > -1');
					}else{
						self._append(self._getStr('this')+'.indexOf("'+self._toStr(f)+'",0) > -1');
					}
					self._setCommand(self.contains,f);
					self._resetNegate();
					return self;
				};
				this.groupBy=function(by,dir,type, datefmt){
					if(!self._hasData()){
						return null;
					}
					return self._getGroup(_data,by,dir,type, datefmt);
				};
				this.orderBy=function(by,dir,stype, dfmt){
					dir = dir == null ? 'a' :$.trim(dir.toString().toLowerCase());
					if(stype == null) { stype = 'text'; }
					if(dfmt == null) { dfmt = 'Y-m-d'; }
					if(dir=='desc'||dir=='descending'){dir='d';}
					if(dir=='asc'||dir=='ascending'){dir='a';}
					_sorting.push({by:by,dir:dir,type:stype, datefmt: dfmt});
					return self;
				};
				return self;
			};
			return new QueryObject(source,null);
		},
		getMethod: function (name) {
			return this.getAccessor($.fn.jqGrid, name);
		},
		extend : function(methods) {
			$.extend($.fn.jqGrid,methods);
			if (!this.no_legacy_api) {
				$.fn.extend(methods);
			}
		}
	});

	$.fn.jqGrid = function( pin ) {
		if (typeof pin === 'string') {
			var fn = $.jgrid.getMethod(pin);
			if (!fn) {
				throw ('jqGrid - No such method: ' + pin);
			}
			var args = $.makeArray(arguments).slice(1);
			return fn.apply(this,args);
		}
		return this.each( function() {
			if(this.grid) {return;}

			var p = $.extend(true,{
				url: '',
				height: 150,
				page: 1,
				rowNum: 20,
				rowTotal : null,
				records: 0,
				pager: '',
				pgbuttons: true,
				pginput: true,
				colModel: [],
				rowList: [],
				colNames: [],
				sortorder: 'asc',
				sortname: '',
				datatype: 'xml',
				mtype: 'GET',
				altRows: false,
				selarrrow: [],
				savedRow: [],
				shrinkToFit: true,
				xmlReader: {},
				jsonReader: {},
				subGrid: false,
				subGridModel :[],
				reccount: 0,
				lastpage: 0,
				lastsort: 0,
				selrow: null,
				beforeSelectRow: null,
				onSelectRow: null,
				onSortCol: null,
				ondblClickRow: null,
				onRightClickRow: null,
				onPaging: null,
				onSelectAll: null,
				onInitGrid : null,
				loadComplete: null,
				gridComplete: null,
				loadError: null,
				loadBeforeSend: null,
				afterInsertRow: null,
				beforeRequest: null,
				beforeProcessing : null,
				onHeaderClick: null,
				viewrecords: false,
				loadonce: false,
				multiselect: false,
				multikey: false,
				editurl: null,
				search: false,
				caption: '',
				hidegrid: true,
				hiddengrid: false,
				postData: {},
				userData: {},
				treeGrid : false,
				treeGridModel : 'nested',
				treeReader : {},
				treeANode : -1,
				ExpandColumn: null,
				tree_root_level : 0,
				prmNames: {page:'page',rows:'rows', sort: 'sidx',order: 'sord', search:'_search', nd:'nd', id:'id',oper:'oper',editoper:'edit',addoper:'add',deloper:'del', subgridid:'id', npage: null, totalrows:'totalrows'},
				forceFit : false,
				gridstate : 'visible',
				cellEdit: false,
				cellsubmit: 'remote',
				nv:0,
				loadui: 'enable',
				toolbar: [false,''],
				scroll: false,
				multiboxonly : false,
				deselectAfterSort : true,
				scrollrows : false,
				autowidth: false,
				scrollOffset :18,
				cellLayout: 5,
				subGridWidth: 20,
				multiselectWidth: 20,
				gridview: false,
				rownumWidth: 25,
				rownumbers : false,
				pagerpos: 'center',
				recordpos: 'right',
				footerrow : false,
				userDataOnFooter : false,
				hoverrows : true,
				altclass : 'ui-priority-secondary',
				viewsortcols : [false,'vertical',true],
				resizeclass : '',
				autoencode : false,
				remapColumns : [],
				ajaxGridOptions :{},
				direction : 'ltr',
				toppager: false,
				headertitles: false,
				scrollTimeout: 40,
				data : [],
				_index : {},
				grouping : false,
				groupingView : {groupField:[],groupOrder:[], groupText:[],groupColumnShow:[],groupSummary:[], showSummaryOnHide: false, sortitems:[], sortnames:[], summary:[],summaryval:[], plusicon: 'ui-icon-circlesmall-plus', minusicon: 'ui-icon-circlesmall-minus', displayField: []},
				ignoreCase : false,
				cmTemplate : {},
				idPrefix : ''
			}, $.jgrid.defaults, pin || {});
			var ts= this, grid={
				headers:[],
				cols:[],
				footers: [],
				dragStart: function(i,x,y) {
					this.resizing = { idx: i, startX: x.clientX, sOL : y[0]};
					this.hDiv.style.cursor = 'col-resize';
					this.curGbox = $('#rs_m'+$.jgrid.jqID(p.id),'#gbox_'+$.jgrid.jqID(p.id));
					this.curGbox.css({display:'block',left:y[0],top:y[1],height:y[2]});
					$(ts).triggerHandler('jqGridResizeStart', [x, i]);
					if($.isFunction(p.resizeStart)) { p.resizeStart.call(this,x,i); }
					document.onselectstart=function(){return false;};
				},
				dragMove: function(x) {
					if(this.resizing) {
						var diff = x.clientX-this.resizing.startX,
							h = this.headers[this.resizing.idx],
							newWidth = p.direction === 'ltr' ? h.width + diff : h.width - diff, hn, nWn;
						if(newWidth > 33) {
							this.curGbox.css({left:this.resizing.sOL+diff});
							if(p.forceFit===true ){
								hn = this.headers[this.resizing.idx+p.nv];
								nWn = p.direction === 'ltr' ? hn.width - diff : hn.width + diff;
								if(nWn >33) {
									h.newWidth = newWidth;
									hn.newWidth = nWn;
								}
							} else {
								this.newWidth = p.direction === 'ltr' ? p.tblwidth+diff : p.tblwidth-diff;
								h.newWidth = newWidth;
							}
						}
					}
				},
				dragEnd: function() {
					this.hDiv.style.cursor = 'default';
					if(this.resizing) {
						var idx = this.resizing.idx,
							nw = this.headers[idx].newWidth || this.headers[idx].width;
						nw = parseInt(nw,10);
						this.resizing = false;
						$('#rs_m'+$.jgrid.jqID(p.id)).css('display','none');
						p.colModel[idx].width = nw;
						this.headers[idx].width = nw;
						this.headers[idx].el.style.width = nw + 'px';
						this.cols[idx].style.width = nw+'px';
						if(this.footers.length>0) {this.footers[idx].style.width = nw+'px';}
						if(p.forceFit===true){
							nw = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;
							this.headers[idx+p.nv].width = nw;
							this.headers[idx+p.nv].el.style.width = nw + 'px';
							this.cols[idx+p.nv].style.width = nw+'px';
							if(this.footers.length>0) {this.footers[idx+p.nv].style.width = nw+'px';}
							p.colModel[idx+p.nv].width = nw;
						} else {
							p.tblwidth = this.newWidth || p.tblwidth;
							$('table:first',this.bDiv).css('width',p.tblwidth+'px');
							$('table:first',this.hDiv).css('width',p.tblwidth+'px');
							this.hDiv.scrollLeft = this.bDiv.scrollLeft;
							if(p.footerrow) {
								$('table:first',this.sDiv).css('width',p.tblwidth+'px');
								this.sDiv.scrollLeft = this.bDiv.scrollLeft;
							}
						}
						$(ts).triggerHandler('jqGridResizeStop', [nw, idx]);
						if($.isFunction(p.resizeStop)) { p.resizeStop.call(this,nw,idx); }
					}
					this.curGbox = null;
					document.onselectstart=function(){return true;};
				},
				populateVisible: function() {
					if (grid.timer) { clearTimeout(grid.timer); }
					grid.timer = null;
					var dh = $(grid.bDiv).height();
					if (!dh) { return; }
					var table = $('table:first', grid.bDiv);
					var rows, rh;
					if(table[0].rows.length) {
						try {
							rows = table[0].rows[1];
							rh = rows ? $(rows).outerHeight() || grid.prevRowHeight : grid.prevRowHeight;
						} catch (pv) {
							rh = grid.prevRowHeight;
						}
					}
					if (!rh) { return; }
					grid.prevRowHeight = rh;
					var rn = p.rowNum;
					var scrollTop = grid.scrollTop = grid.bDiv.scrollTop;
					var ttop = Math.round(table.position().top) - scrollTop;
					var tbot = ttop + table.height();
					var div = rh * rn;
					var page, npage, empty;
					if ( tbot < dh && ttop <= 0 &&
					(p.lastpage===undefined||parseInt((tbot + scrollTop + div - 1) / div,10) <= p.lastpage))
					{
						npage = parseInt((dh - tbot + div - 1) / div,10);
						if (tbot >= 0 || npage < 2 || p.scroll === true) {
							page = Math.round((tbot + scrollTop) / div) + 1;
							ttop = -1;
						} else {
							ttop = 1;
						}
					}
					if (ttop > 0) {
						page = parseInt(scrollTop / div,10) + 1;
						npage = parseInt((scrollTop + dh) / div,10) + 2 - page;
						empty = true;
					}
					if (npage) {
						if (p.lastpage && (page > p.lastpage || p.lastpage==1 || (page === p.page && page===p.lastpage)) ) {
							return;
						}
						if (grid.hDiv.loading) {
							grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);
						} else {
							p.page = page;
							if (empty) {
								grid.selectionPreserver(table[0]);
								grid.emptyRows.call(table[0], false, false);
							}
							grid.populate(npage);
						}
					}
				},
				scrollGrid: function( e ) {
					if(p.scroll) {
						var scrollTop = grid.bDiv.scrollTop;
						if(grid.scrollTop === undefined) { grid.scrollTop = 0; }
						if (scrollTop != grid.scrollTop) {
							grid.scrollTop = scrollTop;
							if (grid.timer) { clearTimeout(grid.timer); }
							grid.timer = setTimeout(grid.populateVisible, p.scrollTimeout);
						}
					}
					grid.hDiv.scrollLeft = grid.bDiv.scrollLeft;
					if(p.footerrow) {
						grid.sDiv.scrollLeft = grid.bDiv.scrollLeft;
					}
					if( e ) { e.stopPropagation(); }
				},
				selectionPreserver : function(ts) {
					var p = ts.p,
						sr = p.selrow, sra = p.selarrrow ? $.makeArray(p.selarrrow) : null,
						left = ts.grid.bDiv.scrollLeft,
						restoreSelection = function() {
							var i;
							p.selrow = null;
							p.selarrrow = [];
							if(p.multiselect && sra && sra.length>0) {
								for(i=0;i<sra.length;i++){
									if (sra[i] != sr) {
										$(ts).jqGrid('setSelection',sra[i],false, null);
									}
								}
							}
							if (sr) {
								$(ts).jqGrid('setSelection',sr,false,null);
							}
							ts.grid.bDiv.scrollLeft = left;
							$(ts).unbind('.selectionPreserver', restoreSelection);
						};
					$(ts).bind('jqGridGridComplete.selectionPreserver', restoreSelection);
				}
			};
			if(this.tagName.toUpperCase()!='TABLE') {
				alert('Element is not a table');
				return;
			}
			if(document.documentMode !== undefined ) { // IE only
				if(document.documentMode <= 5) {
					alert('Grid can not be used in this (\'quirks\') mode!');
					return;
				}
			}
			$(this).empty().attr('tabindex','0');
			this.p = p ;
			this.p.useProp = !!$.fn.prop;
			var i, dir;
			if(this.p.colNames.length === 0) {
				for (i=0;i<this.p.colModel.length;i++){
					this.p.colNames[i] = this.p.colModel[i].label || this.p.colModel[i].name;
				}
			}
			if( this.p.colNames.length !== this.p.colModel.length ) {
				alert($.jgrid.errors.model);
				return;
			}
			var gv = $('<div class=\'ui-jqgrid-view\'></div>'),
				isMSIE = $.jgrid.msie;
			ts.p.direction = $.trim(ts.p.direction.toLowerCase());
			if($.inArray(ts.p.direction,['ltr','rtl']) == -1) { ts.p.direction = 'ltr'; }
			dir = ts.p.direction;

			$(gv).insertBefore(this);
			$(this).removeClass('scroll').appendTo(gv);
			var eg = $('<div class=\'ui-jqgrid ui-widget ui-widget-content ui-corner-all\'></div>');
			$(eg).attr({'id' : 'gbox_'+this.id,'dir':dir}).insertBefore(gv);
			$(gv).attr('id','gview_'+this.id).appendTo(eg);
			$('<div class=\'ui-widget-overlay jqgrid-overlay\' id=\'lui_'+this.id+'\'></div>').insertBefore(gv);
			$('<div class=\'loading ui-state-default ui-state-active\' id=\'load_'+this.id+'\'>'+this.p.loadtext+'</div>').insertBefore(gv);
			$(this).attr({cellspacing:'0',cellpadding:'0',border:'0','role':'grid','aria-multiselectable':!!this.p.multiselect,'aria-labelledby':'gbox_'+this.id});
			var sortkeys = ['shiftKey','altKey','ctrlKey'],
				intNum = function(val,defval) {
					val = parseInt(val,10);
					if (isNaN(val)) { return defval || 0;}
					return val;
				},
				formatCol = function (pos, rowInd, tv, rawObject, rowId, rdata){
					var cm = ts.p.colModel[pos],
						ral = cm.align, result='style="', clas = cm.classes, nm = cm.name, celp, acp=[];
					if(ral) { result += 'text-align:'+ral+';'; }
					if(cm.hidden===true) { result += 'display:none;'; }
					if(rowInd===0) {
						result += 'width: '+grid.headers[pos].width+'px;';
					} else if (cm.cellattr && $.isFunction(cm.cellattr))
					{
						celp = cm.cellattr.call(ts, rowId, tv, rawObject, cm, rdata);
						if(celp && typeof celp === 'string') {
							celp = celp.replace(/style/i,'style').replace(/title/i,'title');
							if(celp.indexOf('title') > -1) { cm.title=false;}
							if(celp.indexOf('class') > -1) { clas = undefined;}
							acp = celp.split('style');
							if(acp.length === 2 ) {
								acp[1] =  $.trim(acp[1].replace('=',''));
								if(acp[1].indexOf('\'') === 0 || acp[1].indexOf('"') === 0) {
									acp[1] = acp[1].substring(1);
								}
								result += acp[1].replace(/'/gi,'"');
							} else {
								result += '"';
							}
						}
					}
					if(!acp.length) { acp[0] = ''; result += '"';}
					result += (clas !== undefined ? (' class="'+clas+'"') :'') + ((cm.title && tv) ? (' title="'+$.jgrid.stripHtml(tv)+'"') :'');
					result += ' aria-describedby="'+ts.p.id+'_'+nm+'"';
					return result + acp[0];
				},
				cellVal =  function (val) {
					return val == null || val === '' ? '&#160;' : (ts.p.autoencode ? $.jgrid.htmlEncode(val) : String(val));
				},
				formatter = function (rowId, cellval , colpos, rwdat, _act){
					var cm = ts.p.colModel[colpos],v;
					if(cm.formatter !== undefined) {
						rowId = String(ts.p.idPrefix) !== '' ? $.jgrid.stripPref(ts.p.idPrefix, rowId) : rowId;
						var opts= {rowId: rowId, colModel:cm, gid:ts.p.id, pos:colpos };
						if($.isFunction( cm.formatter ) ) {
							v = cm.formatter.call(ts,cellval,opts,rwdat,_act);
						} else if($.fmatter){
							v = $.fn.fmatter.call(ts,cm.formatter,cellval,opts,rwdat,_act);
						} else {
							v = cellVal(cellval);
						}
					} else {
						v = cellVal(cellval);
					}
					return v;
				},
				addCell = function(rowId,cell,pos,irow, srvr, rdata) {
					var v,prp;
					v = formatter(rowId,cell,pos,srvr,'add');
					prp = formatCol( pos,irow, v, srvr, rowId, rdata);
					return '<td role="gridcell" '+prp+'>'+v+'</td>';
				},
				addMulti = function(rowid,pos,irow,checked){
					var	v = '<input role="checkbox" type="checkbox"'+' id="jqg_'+ts.p.id+'_'+rowid+'" class="cbox" name="jqg_'+ts.p.id+'_'+rowid+'"' + (checked ? 'checked="checked"' : '')+'/>',
						prp = formatCol( pos,irow,'',null, rowid, true);
					return '<td role="gridcell" '+prp+'>'+v+'</td>';
				},
				addRowNum = function (pos,irow,pG,rN) {
					var v =  (parseInt(pG,10)-1)*parseInt(rN,10)+1+irow,
						prp = formatCol( pos,irow,v, null, irow, true);
					return '<td role="gridcell" class="ui-state-default jqgrid-rownum" '+prp+'>'+v+'</td>';
				},
				reader = function (datatype) {
					var field, f=[], j=0, i;
					for(i =0; i<ts.p.colModel.length; i++){
						field = ts.p.colModel[i];
						if (field.name !== 'cb' && field.name !=='subgrid' && field.name !=='rn') {
							f[j]= datatype == 'local' ?
								field.name :
								( (datatype=='xml' || datatype === 'xmlstring') ? field.xmlmap || field.name : field.jsonmap || field.name );
							j++;
						}
					}
					return f;
				},
				orderedCols = function (offset) {
					var order = ts.p.remapColumns;
					if (!order || !order.length) {
						order = $.map(ts.p.colModel, function(v,i) { return i; });
					}
					if (offset) {
						order = $.map(order, function(v) { return v<offset?null:v-offset; });
					}
					return order;
				},
				emptyRows = function (scroll, locdata) {
					var firstrow;
					if (this.p.deepempty) {
						$(this.rows).slice(1).remove();
					} else {
						firstrow = this.rows.length > 0 ? this.rows[0] : null;
						$(this.firstChild).empty().append(firstrow);
					}
					if (scroll && this.p.scroll) {
						$(this.grid.bDiv.firstChild).css({height: 'auto'});
						$(this.grid.bDiv.firstChild.firstChild).css({height: 0, display: 'none'});
						if (this.grid.bDiv.scrollTop !== 0) {
							this.grid.bDiv.scrollTop = 0;
						}
					}
					if(locdata === true && this.p.treeGrid) {
						this.p.data = []; this.p._index = {};
					}
				},
				refreshIndex = function() {
					var datalen = ts.p.data.length, idname, i, val,
						ni = ts.p.rownumbers===true ? 1 :0,
						gi = ts.p.multiselect ===true ? 1 :0,
						si = ts.p.subGrid===true ? 1 :0;

					if(ts.p.keyIndex === false || ts.p.loadonce === true) {
						idname = ts.p.localReader.id;
					} else {
						idname = ts.p.colModel[ts.p.keyIndex+gi+si+ni].name;
					}
					for(i =0;i < datalen; i++) {
						val = $.jgrid.getAccessor(ts.p.data[i],idname);
						if (val === undefined) { val=String(i+1); }
						ts.p._index[val] = i;
					}
				},
				constructTr = function(id, hide, altClass, rd, cur, selected) {
					var tabindex = '-1', restAttr = '', attrName, style = hide ? 'display:none;' : '',
						classes = 'ui-widget-content jqgrow ui-row-' + ts.p.direction + altClass + (selected ? ' ui-state-highlight' : ''),
						rowAttrObj = $.isFunction(ts.p.rowattr) ? ts.p.rowattr.call(ts, rd, cur) : {};
					if(!$.isEmptyObject( rowAttrObj )) {
						if (rowAttrObj.hasOwnProperty('id')) {
							id = rowAttrObj.id;
							delete rowAttrObj.id;
						}
						if (rowAttrObj.hasOwnProperty('tabindex')) {
							tabindex = rowAttrObj.tabindex;
							delete rowAttrObj.tabindex;
						}
						if (rowAttrObj.hasOwnProperty('style')) {
							style += rowAttrObj.style;
							delete rowAttrObj.style;
						}
						if (rowAttrObj.hasOwnProperty('class')) {
							classes += ' ' + rowAttrObj['class'];
							delete rowAttrObj['class'];
						}
						// dot't allow to change role attribute
						try { delete rowAttrObj.role; } catch(ra){}
						for (attrName in rowAttrObj) {
							if (rowAttrObj.hasOwnProperty(attrName)) {
								restAttr += ' ' + attrName + '=' + rowAttrObj[attrName];
							}
						}
					}
					return '<tr role="row" id="' + id + '" tabindex="' + tabindex + '" class="' + classes + '"' +
				(style === '' ? '' : ' style="' + style + '"') + restAttr + '>';
				},
				addXmlData = function (xml,t, rcnt, more, adjust) {
					var startReq = new Date(),
						locdata = (ts.p.datatype != 'local' && ts.p.loadonce) || ts.p.datatype == 'xmlstring',
						xmlid = '_id_', xmlRd = ts.p.xmlReader,
						frd = ts.p.datatype == 'local' ? 'local' : 'xml';
					if(locdata) {
						ts.p.data = [];
						ts.p._index = {};
						ts.p.localReader.id = xmlid;
					}
					ts.p.reccount = 0;
					if($.isXMLDoc(xml)) {
						if(ts.p.treeANode===-1 && !ts.p.scroll) {
							emptyRows.call(ts, false, true);
							rcnt=1;
						} else { rcnt = rcnt > 1 ? rcnt :1; }
					} else { return; }
					var self= $(ts), i,fpos,ir=0,v,gi=ts.p.multiselect===true?1:0,si=0,addSubGridCell,ni=ts.p.rownumbers===true?1:0,idn, getId,f=[],F,rd ={}, xmlr,rid, rowData=[], cn=(ts.p.altRows === true) ? ' '+ts.p.altclass:'',cn1;
					if(ts.p.subGrid===true) {
						si = 1;
						addSubGridCell = $.jgrid.getMethod('addSubGridCell');
					}
					if(!xmlRd.repeatitems) {f = reader(frd);}
					if( ts.p.keyIndex===false) {
						idn = $.isFunction( xmlRd.id ) ?  xmlRd.id.call(ts, xml) : xmlRd.id;
					} else {
						idn = ts.p.keyIndex;
					}
					if(f.length>0 && !isNaN(idn)) {
						if (ts.p.remapColumns && ts.p.remapColumns.length) {
							idn = $.inArray(idn, ts.p.remapColumns);
						}
						idn=f[idn];
					}
					if( String(idn).indexOf('[') === -1 ) {
						if (f.length) {
							getId = function( trow, k) {return $(idn,trow).text() || k;};
						} else {
							getId = function( trow, k) {return $(xmlRd.cell,trow).eq(idn).text() || k;};
						}
					}
					else {
						getId = function( trow, k) {return trow.getAttribute(idn.replace(/[\[\]]/g,'')) || k;};
					}
					ts.p.userData = {};
					ts.p.page = $.jgrid.getXmlData( xml,xmlRd.page ) || ts.p.page || 0;
					ts.p.lastpage = $.jgrid.getXmlData( xml,xmlRd.total );
					if(ts.p.lastpage===undefined) { ts.p.lastpage=1; }
					ts.p.records = $.jgrid.getXmlData( xml,xmlRd.records ) || 0;
					if($.isFunction(xmlRd.userdata)) {
						ts.p.userData = xmlRd.userdata.call(ts, xml) || {};
					} else {
						$.jgrid.getXmlData(xml, xmlRd.userdata, true).each(function() {ts.p.userData[this.getAttribute('name')]= $(this).text();});
					}
					var gxml = $.jgrid.getXmlData( xml, xmlRd.root, true);
					gxml = $.jgrid.getXmlData( gxml, xmlRd.row, true);
					if (!gxml) { gxml = []; }
					var gl = gxml.length, j=0, grpdata=[], rn = parseInt(ts.p.rowNum,10), br=ts.p.scroll?$.jgrid.randId():1, altr;
					if (gl > 0 &&  ts.p.page <= 0) { ts.p.page = 1; }
					if(gxml && gl){
						if (adjust) { rn *= adjust+1; }
						var afterInsRow = $.isFunction(ts.p.afterInsertRow), hiderow=false, groupingPrepare;
						if(ts.p.grouping)  {
							hiderow = ts.p.groupingView.groupCollapse === true;
							groupingPrepare = $.jgrid.getMethod('groupingPrepare');
						}
						while (j<gl) {
							xmlr = gxml[j];
							rid = getId(xmlr,br+j);
							rid  = ts.p.idPrefix + rid;
							altr = rcnt === 0 ? 0 : rcnt+1;
							cn1 = (altr+j)%2 == 1 ? cn : '';
							var iStartTrTag = rowData.length;
							rowData.push('');
							if( ni ) {
								rowData.push( addRowNum(0,j,ts.p.page,ts.p.rowNum) );
							}
							if( gi ) {
								rowData.push( addMulti(rid,ni,j, false) );
							}
							if( si ) {
								rowData.push( addSubGridCell.call(self,gi+ni,j+rcnt) );
							}
							if(xmlRd.repeatitems){
								if (!F) { F=orderedCols(gi+si+ni); }
								var cells = $.jgrid.getXmlData( xmlr, xmlRd.cell, true);
								$.each(F, function (k) {
									var cell = cells[this];
									if (!cell) { return false; }
									v = cell.textContent || cell.text;
									rd[ts.p.colModel[k+gi+si+ni].name] = v;
									rowData.push( addCell(rid,v,k+gi+si+ni,j+rcnt,xmlr, rd) );
								});
							} else {
								for(i = 0; i < f.length;i++) {
									v = $.jgrid.getXmlData( xmlr, f[i]);
									rd[ts.p.colModel[i+gi+si+ni].name] = v;
									rowData.push( addCell(rid, v, i+gi+si+ni, j+rcnt, xmlr, rd) );
								}
							}
							rowData[iStartTrTag] = constructTr(rid, hiderow, cn1, rd, xmlr, false);
							rowData.push('</tr>');
							if(ts.p.grouping) {
								grpdata = groupingPrepare.call(self,rowData, grpdata, rd, j);
								rowData = [];
							}
							if(locdata || ts.p.treeGrid === true) {
								rd[xmlid] = rid;
								ts.p.data.push(rd);
								ts.p._index[rid] = ts.p.data.length-1;
							}
							if(ts.p.gridview === false ) {
								$('tbody:first',t).append(rowData.join(''));
								self.triggerHandler('jqGridAfterInsertRow', [rid, rd, xmlr]);
								if(afterInsRow) {ts.p.afterInsertRow.call(ts,rid,rd,xmlr);}
								rowData=[];
							}
							rd={};
							ir++;
							j++;
							if(ir==rn) {break;}
						}
					}
					if(ts.p.gridview === true) {
						fpos = ts.p.treeANode > -1 ? ts.p.treeANode: 0;
						if(ts.p.grouping) {
							self.jqGrid('groupingRender',grpdata,ts.p.colModel.length);
							grpdata = null;
						} else if(ts.p.treeGrid === true && fpos > 0) {
							$(ts.rows[fpos]).after(rowData.join(''));
						} else {
							$('tbody:first',t).append(rowData.join(''));
						}
					}
					if(ts.p.subGrid === true ) {
						try {self.jqGrid('addSubGrid',gi+ni);} catch (_){}
					}
					ts.p.totaltime = new Date() - startReq;
					if(ir>0) { if(ts.p.records===0) { ts.p.records=gl;} }
					rowData =null;
					if( ts.p.treeGrid === true) {
						try {self.jqGrid('setTreeNode', fpos+1, ir+fpos+1);} catch (e) {}
					}
					if(!ts.p.treeGrid && !ts.p.scroll) {ts.grid.bDiv.scrollTop = 0;}
					ts.p.reccount=ir;
					ts.p.treeANode = -1;
					if(ts.p.userDataOnFooter) { self.jqGrid('footerData','set',ts.p.userData,true); }
					if(locdata) {
						ts.p.records = gl;
						ts.p.lastpage = Math.ceil(gl/ rn);
					}
					if (!more) { ts.updatepager(false,true); }
					if(locdata) {
						while (ir<gl) {
							xmlr = gxml[ir];
							rid = getId(xmlr,ir+br);
							rid  = ts.p.idPrefix + rid;
							if(xmlRd.repeatitems){
								if (!F) { F=orderedCols(gi+si+ni); }
								var cells2 = $.jgrid.getXmlData( xmlr, xmlRd.cell, true);
								$.each(F, function (k) {
									var cell = cells2[this];
									if (!cell) { return false; }
									v = cell.textContent || cell.text;
									rd[ts.p.colModel[k+gi+si+ni].name] = v;
								});
							} else {
								for(i = 0; i < f.length;i++) {
									v = $.jgrid.getXmlData( xmlr, f[i]);
									rd[ts.p.colModel[i+gi+si+ni].name] = v;
								}
							}
							rd[xmlid] = rid;
							ts.p.data.push(rd);
							ts.p._index[rid] = ts.p.data.length-1;
							rd = {};
							ir++;
						}
					}
				},
				addJSONData = function(data,t, rcnt, more, adjust) {
					var startReq = new Date();
					if(data) {
						if(ts.p.treeANode === -1 && !ts.p.scroll) {
							emptyRows.call(ts, false, true);
							rcnt=1;
						} else { rcnt = rcnt > 1 ? rcnt :1; }
					} else { return; }

					var dReader, locid = '_id_', frd,
						locdata = (ts.p.datatype != 'local' && ts.p.loadonce) || ts.p.datatype == 'jsonstring';
					if(locdata) { ts.p.data = []; ts.p._index = {}; ts.p.localReader.id = locid;}
					ts.p.reccount = 0;
					if(ts.p.datatype == 'local') {
						dReader =  ts.p.localReader;
						frd= 'local';
					} else {
						dReader =  ts.p.jsonReader;
						frd='json';
					}
					var self = $(ts), ir=0,v,i,j,f=[],F,cur,gi=ts.p.multiselect?1:0,si=0,addSubGridCell,ni=ts.p.rownumbers===true?1:0,len,drows,idn,rd={}, fpos, idr,rowData=[],cn=(ts.p.altRows === true) ? ' '+ts.p.altclass:'',cn1,lp;
					ts.p.page = $.jgrid.getAccessor(data,dReader.page) || ts.p.page || 0;
					lp = $.jgrid.getAccessor(data,dReader.total);
					if(ts.p.subGrid===true) {
						si = 1;
						addSubGridCell = $.jgrid.getMethod('addSubGridCell');
					}
					ts.p.lastpage = lp === undefined ? 1 : lp;
					ts.p.records = $.jgrid.getAccessor(data,dReader.records) || 0;
					ts.p.userData = $.jgrid.getAccessor(data,dReader.userdata) || {};
					if(!dReader.repeatitems) {
						F = f = reader(frd);
					}
					if( ts.p.keyIndex===false ) {
						idn = $.isFunction(dReader.id) ? dReader.id.call(ts, data) : dReader.id;
					} else {
						idn = ts.p.keyIndex;
					}
					if(f.length>0 && !isNaN(idn)) {
						if (ts.p.remapColumns && ts.p.remapColumns.length) {
							idn = $.inArray(idn, ts.p.remapColumns);
						}
						idn=f[idn];
					}
					drows = $.jgrid.getAccessor(data,dReader.root);
					if (!drows) { drows = []; }
					len = drows.length; i=0;
					if (len > 0 && ts.p.page <= 0) { ts.p.page = 1; }
					var rn = parseInt(ts.p.rowNum,10),br=ts.p.scroll?$.jgrid.randId():1, altr, selected=false, selr;
					if (adjust) { rn *= adjust+1; }
					if(ts.p.datatype === 'local' && !ts.p.deselectAfterSort) {
						selected = true;
					}
					var afterInsRow = $.isFunction(ts.p.afterInsertRow), grpdata=[],hiderow=false, groupingPrepare;
					if(ts.p.grouping)  {
						hiderow = ts.p.groupingView.groupCollapse === true;
						groupingPrepare = $.jgrid.getMethod('groupingPrepare');
					}
					while (i<len) {
						cur = drows[i];
						idr = $.jgrid.getAccessor(cur,idn);
						if(idr === undefined) {
							idr = br+i;
							if(f.length===0){
								if(dReader.cell){
									var ccur = $.jgrid.getAccessor(cur,dReader.cell);
									idr = ccur !== undefined ? ccur[idn] || idr : idr;
									ccur=null;
								}
							}
						}
						idr  = ts.p.idPrefix + idr;
						altr = rcnt === 1 ? 0 : rcnt;
						cn1 = (altr+i)%2 == 1 ? cn : '';
						if( selected) {
							if( ts.p.multiselect) {
								selr = ($.inArray(idr, ts.p.selarrrow) !== -1);
							} else {
								selr = (idr === ts.p.selrow);
							}
						}
						var iStartTrTag = rowData.length;
						rowData.push('');
						if( ni ) {
							rowData.push( addRowNum(0,i,ts.p.page,ts.p.rowNum) );
						}
						if( gi ){
							rowData.push( addMulti(idr,ni,i,selr) );
						}
						if( si ) {
							rowData.push( addSubGridCell.call(self,gi+ni,i+rcnt) );
						}
						if (dReader.repeatitems) {
							if(dReader.cell) {cur = $.jgrid.getAccessor(cur,dReader.cell);}
							if (!F) { F=orderedCols(gi+si+ni); }
						}
						for (j=0;j<F.length;j++) {
							v = $.jgrid.getAccessor(cur,F[j]);
							rd[ts.p.colModel[j+gi+si+ni].name] = v;
							rowData.push( addCell(idr,v,j+gi+si+ni,i+rcnt,cur, rd) );
						}
						rowData[iStartTrTag] = constructTr(idr, hiderow, cn1, rd, cur, selr);
						rowData.push( '</tr>' );
						if(ts.p.grouping) {
							grpdata = groupingPrepare.call(self,rowData, grpdata, rd, i);
							rowData = [];
						}
						if(locdata || ts.p.treeGrid===true) {
							rd[locid] = idr;
							ts.p.data.push(rd);
							ts.p._index[idr] = ts.p.data.length-1;
						}
						if(ts.p.gridview === false ) {
							$('#'+$.jgrid.jqID(ts.p.id)+' tbody:first').append(rowData.join(''));
							self.triggerHandler('jqGridAfterInsertRow', [idr, rd, cur]);
							if(afterInsRow) {ts.p.afterInsertRow.call(ts,idr,rd,cur);}
							rowData=[];//ari=0;
						}
						rd={};
						ir++;
						i++;
						if(ir==rn) { break; }
					}
					if(ts.p.gridview === true ) {
						fpos = ts.p.treeANode > -1 ? ts.p.treeANode: 0;
						if(ts.p.grouping) {
							self.jqGrid('groupingRender',grpdata,ts.p.colModel.length);
							grpdata = null;
						} else if(ts.p.treeGrid === true && fpos > 0) {
							$(ts.rows[fpos]).after(rowData.join(''));
						} else {
							$('#'+$.jgrid.jqID(ts.p.id)+' tbody:first').append(rowData.join(''));
						}
					}
					if(ts.p.subGrid === true ) {
						try { self.jqGrid('addSubGrid',gi+ni);} catch (_){}
					}
					ts.p.totaltime = new Date() - startReq;
					if(ir>0) {
						if(ts.p.records===0) { ts.p.records=len; }
					}
					rowData = null;
					if( ts.p.treeGrid === true) {
						try {self.jqGrid('setTreeNode', fpos+1, ir+fpos+1);} catch (e) {}
					}
					if(!ts.p.treeGrid && !ts.p.scroll) {ts.grid.bDiv.scrollTop = 0;}
					ts.p.reccount=ir;
					ts.p.treeANode = -1;
					if(ts.p.userDataOnFooter) { self.jqGrid('footerData','set',ts.p.userData,true); }
					if(locdata) {
						ts.p.records = len;
						ts.p.lastpage = Math.ceil(len/ rn);
					}
					if (!more) { ts.updatepager(false,true); }
					if(locdata) {
						while (ir<len && drows[ir]) {
							cur = drows[ir];
							idr = $.jgrid.getAccessor(cur,idn);
							if(idr === undefined) {
								idr = br+ir;
								if(f.length===0){
									if(dReader.cell){
										var ccur2 = $.jgrid.getAccessor(cur,dReader.cell);
										idr = ccur2[idn] || idr;
										ccur2=null;
									}
								}
							}
							if(cur) {
								idr  = ts.p.idPrefix + idr;
								if (dReader.repeatitems) {
									if(dReader.cell) {cur = $.jgrid.getAccessor(cur,dReader.cell);}
									if (!F) { F=orderedCols(gi+si+ni); }
								}

								for (j=0;j<F.length;j++) {
									v = $.jgrid.getAccessor(cur,F[j]);
									rd[ts.p.colModel[j+gi+si+ni].name] = v;
								}
								rd[locid] = idr;
								ts.p.data.push(rd);
								ts.p._index[idr] = ts.p.data.length-1;
								rd = {};
							}
							ir++;
						}
					}
				},
				addLocalData = function() {
					var st, fndsort=false, cmtypes={}, grtypes=[], grindexes=[], srcformat, sorttype, newformat;
					if(!$.isArray(ts.p.data)) {
						return;
					}
					var grpview = ts.p.grouping ? ts.p.groupingView : false, lengrp, gin;
					$.each(ts.p.colModel,function(){
						sorttype = this.sorttype || 'text';
						if(sorttype == 'date' || sorttype == 'datetime') {
							if(this.formatter && typeof this.formatter === 'string' && this.formatter == 'date') {
								if(this.formatoptions && this.formatoptions.srcformat) {
									srcformat = this.formatoptions.srcformat;
								} else {
									srcformat = $.jgrid.formatter.date.srcformat;
								}
								if(this.formatoptions && this.formatoptions.newformat) {
									newformat = this.formatoptions.newformat;
								} else {
									newformat = $.jgrid.formatter.date.newformat;
								}
							} else {
								srcformat = newformat = this.datefmt || 'Y-m-d';
							}
							cmtypes[this.name] = {'stype': sorttype, 'srcfmt': srcformat,'newfmt':newformat};
						} else {
							cmtypes[this.name] = {'stype': sorttype, 'srcfmt':'','newfmt':''};
						}
						if(ts.p.grouping ) {
							for(gin =0, lengrp = grpview.groupField.length; gin< lengrp; gin++) {
								if( this.name == grpview.groupField[gin]) {
									var grindex = this.name;
									if (this.index) {
										grindex = this.index;
									}
									grtypes[gin] = cmtypes[grindex];
									grindexes[gin]= grindex;
								}
							}
						}
						if(!fndsort && (this.index == ts.p.sortname || this.name == ts.p.sortname)){
							st = this.name; // ???
							fndsort = true;
						}
					});
					if(ts.p.treeGrid) {
						$(ts).jqGrid('SortTree', st, ts.p.sortorder, cmtypes[st].stype, cmtypes[st].srcfmt);
						return;
					}
					var compareFnMap = {
							'eq':function(queryObj) {return queryObj.equals;},
							'ne':function(queryObj) {return queryObj.notEquals;},
							'lt':function(queryObj) {return queryObj.less;},
							'le':function(queryObj) {return queryObj.lessOrEquals;},
							'gt':function(queryObj) {return queryObj.greater;},
							'ge':function(queryObj) {return queryObj.greaterOrEquals;},
							'cn':function(queryObj) {return queryObj.contains;},
							'nc':function(queryObj,op) {return op === 'OR' ? queryObj.orNot().contains : queryObj.andNot().contains;},
							'bw':function(queryObj) {return queryObj.startsWith;},
							'bn':function(queryObj,op) {return op === 'OR' ? queryObj.orNot().startsWith : queryObj.andNot().startsWith;},
							'en':function(queryObj,op) {return op === 'OR' ? queryObj.orNot().endsWith : queryObj.andNot().endsWith;},
							'ew':function(queryObj) {return queryObj.endsWith;},
							'ni':function(queryObj,op) {return op === 'OR' ? queryObj.orNot().equals : queryObj.andNot().equals;},
							'in':function(queryObj) {return queryObj.equals;},
							'nu':function(queryObj) {return queryObj.isNull;},
							'nn':function(queryObj,op) {return op === 'OR' ? queryObj.orNot().isNull : queryObj.andNot().isNull;}

						},
						query = $.jgrid.from(ts.p.data);
					if (ts.p.ignoreCase) { query = query.ignoreCase(); }
					function tojLinq ( group ) {
						var s = 0, index, gor, ror, opr, rule;
						if (group.groups != null) {
							gor = group.groups.length && group.groupOp.toString().toUpperCase() === 'OR';
							if (gor) {
								query.orBegin();
							}
							for (index = 0; index < group.groups.length; index++) {
								if (s > 0 && gor) {
									query.or();
								}
								try {
									tojLinq(group.groups[index]);
								} catch (e) {alert(e);}
								s++;
							}
							if (gor) {
								query.orEnd();
							}
						}
						if (group.rules != null) {
							//if(s>0) {
							//	var result = query.select();
							//	query = $.jgrid.from( result);
							//	if (ts.p.ignoreCase) { query = query.ignoreCase(); }
							//}
							try{
								ror = group.rules.length && group.groupOp.toString().toUpperCase() === 'OR';
								if (ror) {
									query.orBegin();
								}
								for (index = 0; index < group.rules.length; index++) {
									rule = group.rules[index];
									opr = group.groupOp.toString().toUpperCase();
									if (compareFnMap[rule.op] && rule.field ) {
										if(s > 0 && opr && opr === 'OR') {
											query = query.or();
										}
										query = compareFnMap[rule.op](query, opr)(rule.field, rule.data, cmtypes[rule.field]);
									}
									s++;
								}
								if (ror) {
									query.orEnd();
								}
							} catch (g) {alert(g);}
						}
					}

					if (ts.p.search === true) {
						var srules = ts.p.postData.filters;
						if(srules) {
							if(typeof srules === 'string') { srules = $.jgrid.parse(srules);}
							tojLinq( srules );
						} else {
							try {
								query = compareFnMap[ts.p.postData.searchOper](query)(ts.p.postData.searchField, ts.p.postData.searchString,cmtypes[ts.p.postData.searchField]);
							} catch (se){}
						}
					}
					if(ts.p.grouping) {
						for(gin=0; gin<lengrp;gin++) {
							query.orderBy(grindexes[gin],grpview.groupOrder[gin],grtypes[gin].stype, grtypes[gin].srcfmt);
						}
					}
					if (st && ts.p.sortorder && fndsort) {
						if(ts.p.sortorder.toUpperCase() == 'DESC') {
							query.orderBy(ts.p.sortname, 'd', cmtypes[st].stype, cmtypes[st].srcfmt);
						} else {
							query.orderBy(ts.p.sortname, 'a', cmtypes[st].stype, cmtypes[st].srcfmt);
						}
					}
					var queryResults = query.select(),
						recordsperpage = parseInt(ts.p.rowNum,10),
						total = queryResults.length,
						page = parseInt(ts.p.page,10),
						totalpages = Math.ceil(total / recordsperpage),
						retresult = {};
					queryResults = queryResults.slice( (page-1)*recordsperpage , page*recordsperpage );
					query = null;
					cmtypes = null;
					retresult[ts.p.localReader.total] = totalpages;
					retresult[ts.p.localReader.page] = page;
					retresult[ts.p.localReader.records] = total;
					retresult[ts.p.localReader.root] = queryResults;
					retresult[ts.p.localReader.userdata] = ts.p.userData;
					queryResults = null;
					return  retresult;
				},
				updatepager = function(rn, dnd) {
					var cp, last, base, from,to,tot,fmt, pgboxes = '', sppg,
						tspg = ts.p.pager ? '_'+$.jgrid.jqID(ts.p.pager.substr(1)) : '',
						tspg_t = ts.p.toppager ? '_'+ts.p.toppager.substr(1) : '';
					base = parseInt(ts.p.page,10)-1;
					if(base < 0) { base = 0; }
					base = base*parseInt(ts.p.rowNum,10);
					to = base + ts.p.reccount;
					if (ts.p.scroll) {
						var rows = $('tbody:first > tr:gt(0)', ts.grid.bDiv);
						base = to - rows.length;
						ts.p.reccount = rows.length;
						var rh = rows.outerHeight() || ts.grid.prevRowHeight;
						if (rh) {
							var top = base * rh;
							var height = parseInt(ts.p.records,10) * rh;
							$('>div:first',ts.grid.bDiv).css({height : height}).children('div:first').css({height:top,display:top?'':'none'});
						}
						ts.grid.bDiv.scrollLeft = ts.grid.hDiv.scrollLeft;
					}
					pgboxes = ts.p.pager || '';
					pgboxes += ts.p.toppager ?  (pgboxes ? ',' + ts.p.toppager : ts.p.toppager) : '';
					if(pgboxes) {
						fmt = $.jgrid.formatter.integer || {};
						cp = intNum(ts.p.page);
						last = intNum(ts.p.lastpage);
						$('.selbox',pgboxes)[ this.p.useProp ? 'prop' : 'attr' ]('disabled',false);
						if(ts.p.pginput===true) {
							$('.ui-pg-input',pgboxes).val(ts.p.page);
							sppg = ts.p.toppager ? '#sp_1'+tspg+',#sp_1'+tspg_t : '#sp_1'+tspg;
							$(sppg).html($.fmatter ? $.fmatter.util.NumberFormat(ts.p.lastpage,fmt):ts.p.lastpage);

						}
						if (ts.p.viewrecords){
							if(ts.p.reccount === 0) {
								$('.ui-paging-info',pgboxes).html(ts.p.emptyrecords);
							} else {
								from = base+1;
								tot=ts.p.records;
								if($.fmatter) {
									from = $.fmatter.util.NumberFormat(from,fmt);
									to = $.fmatter.util.NumberFormat(to,fmt);
									tot = $.fmatter.util.NumberFormat(tot,fmt);
								}
								$('.ui-paging-info',pgboxes).html($.jgrid.format(ts.p.recordtext,from,to,tot));
							}
						}
						if(ts.p.pgbuttons===true) {
							if(cp<=0) {cp = last = 0;}
							if(cp==1 || cp === 0) {
								$('#first'+tspg+', #prev'+tspg).addClass('ui-state-disabled').removeClass('ui-state-hover');
								if(ts.p.toppager) { $('#first_t'+tspg_t+', #prev_t'+tspg_t).addClass('ui-state-disabled').removeClass('ui-state-hover'); }
							} else {
								$('#first'+tspg+', #prev'+tspg).removeClass('ui-state-disabled');
								if(ts.p.toppager) { $('#first_t'+tspg_t+', #prev_t'+tspg_t).removeClass('ui-state-disabled'); }
							}
							if(cp==last || cp === 0) {
								$('#next'+tspg+', #last'+tspg).addClass('ui-state-disabled').removeClass('ui-state-hover');
								if(ts.p.toppager) { $('#next_t'+tspg_t+', #last_t'+tspg_t).addClass('ui-state-disabled').removeClass('ui-state-hover'); }
							} else {
								$('#next'+tspg+', #last'+tspg).removeClass('ui-state-disabled');
								if(ts.p.toppager) { $('#next_t'+tspg_t+', #last_t'+tspg_t).removeClass('ui-state-disabled'); }
							}
						}
					}
					if(rn===true && ts.p.rownumbers === true) {
						$('td.jqgrid-rownum',ts.rows).each(function(i){
							$(this).html(base+1+i);
						});
					}
					if(dnd && ts.p.jqgdnd) { $(ts).jqGrid('gridDnD','updateDnD');}
					$(ts).triggerHandler('jqGridGridComplete');
					if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete.call(ts);}
					$(ts).triggerHandler('jqGridAfterGridComplete');
				},
				beginReq = function() {
					ts.grid.hDiv.loading = true;
					if(ts.p.hiddengrid) { return;}
					switch(ts.p.loadui) {
					case 'disable':
						break;
					case 'enable':
						$('#load_'+$.jgrid.jqID(ts.p.id)).show();
						break;
					case 'block':
						$('#lui_'+$.jgrid.jqID(ts.p.id)).show();
						$('#load_'+$.jgrid.jqID(ts.p.id)).show();
						break;
					}
				},
				endReq = function() {
					ts.grid.hDiv.loading = false;
					switch(ts.p.loadui) {
					case 'disable':
						break;
					case 'enable':
						$('#load_'+$.jgrid.jqID(ts.p.id)).hide();
						break;
					case 'block':
						$('#lui_'+$.jgrid.jqID(ts.p.id)).hide();
						$('#load_'+$.jgrid.jqID(ts.p.id)).hide();
						break;
					}
				},
				populate = function (npage) {
					if(!ts.grid.hDiv.loading) {
						var pvis = ts.p.scroll && npage === false,
							prm = {}, dt, dstr, pN=ts.p.prmNames;
						if(ts.p.page <=0) { ts.p.page = 1; }
						if(pN.search !== null) {prm[pN.search] = ts.p.search;} if(pN.nd !== null) {prm[pN.nd] = new Date().getTime();}
						if(pN.rows !== null) {prm[pN.rows]= ts.p.rowNum;} if(pN.page !== null) {prm[pN.page]= ts.p.page;}
						if(pN.sort !== null) {prm[pN.sort]= ts.p.sortname;} if(pN.order !== null) {prm[pN.order]= ts.p.sortorder;}
						if(ts.p.rowTotal !== null && pN.totalrows !== null) { prm[pN.totalrows]= ts.p.rowTotal; }
						var lcf = $.isFunction(ts.p.loadComplete), lc = lcf ? ts.p.loadComplete : null;
						var adjust = 0;
						npage = npage || 1;
						if (npage > 1) {
							if(pN.npage !== null) {
								prm[pN.npage] = npage;
								adjust = npage - 1;
								npage = 1;
							} else {
								lc = function(req) {
									ts.p.page++;
									ts.grid.hDiv.loading = false;
									if (lcf) {
										ts.p.loadComplete.call(ts,req);
									}
									populate(npage-1);
								};
							}
						} else if (pN.npage !== null) {
							delete ts.p.postData[pN.npage];
						}
						if(ts.p.grouping) {
							$(ts).jqGrid('groupingSetup');
							var grp = ts.p.groupingView, gi, gs='';
							for(gi=0;gi<grp.groupField.length;gi++) {
								var index = grp.groupField[gi];
								$.each(ts.p.colModel, function(cmIndex, cmValue) {
									if (cmValue.name == index && cmValue.index){
										index = cmValue.index;
									}
								} );
								gs += index +' '+grp.groupOrder[gi]+', ';
							}
							prm[pN.sort] = gs + prm[pN.sort];
						}
						$.extend(ts.p.postData,prm);
						var rcnt = !ts.p.scroll ? 1 : ts.rows.length-1;
						var bfr = $(ts).triggerHandler('jqGridBeforeRequest');
						if (bfr === false || bfr === 'stop') { return; }
						if ($.isFunction(ts.p.datatype)) { ts.p.datatype.call(ts,ts.p.postData,'load_'+ts.p.id); return;}
						if ($.isFunction(ts.p.beforeRequest)) {
							bfr = ts.p.beforeRequest.call(ts);
							if(bfr === undefined) { bfr = true; }
							if ( bfr === false ) { return; }
						}
						dt = ts.p.datatype.toLowerCase();
						switch(dt)
						{
						case 'json':
						case 'jsonp':
						case 'xml':
						case 'script':
							$.ajax($.extend({
								url:ts.p.url,
								type:ts.p.mtype,
								dataType: dt ,
								data: $.isFunction(ts.p.serializeGridData)? ts.p.serializeGridData.call(ts,ts.p.postData) : ts.p.postData,
								success:function(data,st, xhr) {
									if ($.isFunction(ts.p.beforeProcessing)) {
										if (ts.p.beforeProcessing.call(ts, data, st, xhr) === false) {
											endReq();
											return;
										}
									}
									if(dt === 'xml') { addXmlData(data,ts.grid.bDiv,rcnt,npage>1,adjust); }
									else { addJSONData(data,ts.grid.bDiv,rcnt,npage>1,adjust); }
									$(ts).triggerHandler('jqGridLoadComplete', [data]);
									if(lc) { lc.call(ts,data); }
									$(ts).triggerHandler('jqGridAfterLoadComplete', [data]);
									if (pvis) { ts.grid.populateVisible(); }
									if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = 'local';}
									data=null;
									if (npage === 1) { endReq(); }
								},
								error:function(xhr,st,err){
									if($.isFunction(ts.p.loadError)) { ts.p.loadError.call(ts,xhr,st,err); }
									if (npage === 1) { endReq(); }
									xhr=null;
								},
								beforeSend: function(xhr, settings ){
									var gotoreq = true;
									if($.isFunction(ts.p.loadBeforeSend)) {
										gotoreq = ts.p.loadBeforeSend.call(ts,xhr, settings);
									}
									if(gotoreq === undefined) { gotoreq = true; }
									if(gotoreq === false) {
										return false;
									}
									beginReq();
								}
							},$.jgrid.ajaxOptions, ts.p.ajaxGridOptions));
							break;
						case 'xmlstring':
							beginReq();
							dstr = $.jgrid.stringToDoc(ts.p.datastr);
							addXmlData(dstr,ts.grid.bDiv);
							$(ts).triggerHandler('jqGridLoadComplete', [dstr]);
							if(lcf) {ts.p.loadComplete.call(ts,dstr);}
							$(ts).triggerHandler('jqGridAfterLoadComplete', [dstr]);
							ts.p.datatype = 'local';
							ts.p.datastr = null;
							endReq();
							break;
						case 'jsonstring':
							beginReq();
							if(typeof ts.p.datastr === 'string') { dstr = $.jgrid.parse(ts.p.datastr); }
							else { dstr = ts.p.datastr; }
							addJSONData(dstr,ts.grid.bDiv);
							$(ts).triggerHandler('jqGridLoadComplete', [dstr]);
							if(lcf) {ts.p.loadComplete.call(ts,dstr);}
							$(ts).triggerHandler('jqGridAfterLoadComplete', [dstr]);
							ts.p.datatype = 'local';
							ts.p.datastr = null;
							endReq();
							break;
						case 'local':
						case 'clientside':
							beginReq();
							ts.p.datatype = 'local';
							var req = addLocalData();
							addJSONData(req,ts.grid.bDiv,rcnt,npage>1,adjust);
							$(ts).triggerHandler('jqGridLoadComplete', [req]);
							if(lc) { lc.call(ts,req); }
							$(ts).triggerHandler('jqGridAfterLoadComplete', [req]);
							if (pvis) { ts.grid.populateVisible(); }
							endReq();
							break;
						}
					}
				},
				setHeadCheckBox = function ( checked ) {
					$('#cb_'+$.jgrid.jqID(ts.p.id),ts.grid.hDiv)[ts.p.useProp ? 'prop': 'attr']('checked', checked);
					var fid = ts.p.frozenColumns ? ts.p.id+'_frozen' : '';
					if(fid) {
						$('#cb_'+$.jgrid.jqID(ts.p.id),ts.grid.fhDiv)[ts.p.useProp ? 'prop': 'attr']('checked', checked);
					}
				},
				setPager = function (pgid, tp){
					// TBD - consider escaping pgid with pgid = $.jgrid.jqID(pgid);
					var sep = '<td class=\'ui-pg-button ui-state-disabled\' style=\'width:4px;\'><span class=\'ui-separator\'></span></td>',
						pginp = '',
						pgl='<table cellspacing=\'0\' cellpadding=\'0\' border=\'0\' style=\'table-layout:auto;\' class=\'ui-pg-table\'><tbody><tr>',
						str='', pgcnt, lft, cent, rgt, twd, tdw, i,
						clearVals = function(onpaging){
							var ret;
							if ($.isFunction(ts.p.onPaging) ) { ret = ts.p.onPaging.call(ts,onpaging); }
							ts.p.selrow = null;
							if(ts.p.multiselect) {ts.p.selarrrow =[]; setHeadCheckBox( false );}
							ts.p.savedRow = [];
							if(ret=='stop') {return false;}
							return true;
						};
					pgid = pgid.substr(1);
					tp += '_' + pgid;
					pgcnt = 'pg_'+pgid;
					lft = pgid+'_left'; cent = pgid+'_center'; rgt = pgid+'_right';
					$('#'+$.jgrid.jqID(pgid) )
						.append('<div id=\''+pgcnt+'\' class=\'ui-pager-control\' role=\'group\'><table cellspacing=\'0\' cellpadding=\'0\' border=\'0\' class=\'ui-pg-table\' style=\'width:100%;table-layout:fixed;height:100%;\' role=\'row\'><tbody><tr><td id=\''+lft+'\' align=\'left\'></td><td id=\''+cent+'\' align=\'center\' style=\'white-space:pre;\'></td><td id=\''+rgt+'\' align=\'right\'></td></tr></tbody></table></div>')
						.attr('dir','ltr'); //explicit setting
					if(ts.p.rowList.length >0){
						str = '<td dir=\''+dir+'\'>';
						str +='<select class=\'ui-pg-selbox\' role=\'listbox\'>';
						for(i=0;i<ts.p.rowList.length;i++){
							str +='<option role="option" value="'+ts.p.rowList[i]+'"'+((ts.p.rowNum == ts.p.rowList[i])?' selected="selected"':'')+'>'+ts.p.rowList[i]+'</option>';
						}
						str +='</select></td>';
					}
					if(dir=='rtl') { pgl += str; }
					if(ts.p.pginput===true) { pginp= '<td dir=\''+dir+'\'>'+$.jgrid.format(ts.p.pgtext || '','<input class=\'ui-pg-input\' type=\'text\' size=\'2\' maxlength=\'7\' value=\'0\' role=\'textbox\'/>','<span id=\'sp_1_'+$.jgrid.jqID(pgid)+'\'></span>')+'</td>';}
					if(ts.p.pgbuttons===true) {
						var po=['first'+tp,'prev'+tp, 'next'+tp,'last'+tp]; if(dir=='rtl') { po.reverse(); }
						pgl += '<td id=\''+po[0]+'\' class=\'ui-pg-button ui-corner-all\'><span class=\'ui-icon ui-icon-seek-first\'></span></td>';
						pgl += '<td id=\''+po[1]+'\' class=\'ui-pg-button ui-corner-all\'><span class=\'ui-icon ui-icon-seek-prev\'></span></td>';
						pgl += pginp !== '' ? sep+pginp+sep:'';
						pgl += '<td id=\''+po[2]+'\' class=\'ui-pg-button ui-corner-all\'><span class=\'ui-icon ui-icon-seek-next\'></span></td>';
						pgl += '<td id=\''+po[3]+'\' class=\'ui-pg-button ui-corner-all\'><span class=\'ui-icon ui-icon-seek-end\'></span></td>';
					} else if (pginp !== '') { pgl += pginp; }
					if(dir=='ltr') { pgl += str; }
					pgl += '</tr></tbody></table>';
					if(ts.p.viewrecords===true) {$('td#'+pgid+'_'+ts.p.recordpos,'#'+pgcnt).append('<div dir=\''+dir+'\' style=\'text-align:'+ts.p.recordpos+'\' class=\'ui-paging-info\'></div>');}
					$('td#'+pgid+'_'+ts.p.pagerpos,'#'+pgcnt).append(pgl);
					tdw = $('.ui-jqgrid').css('font-size') || '11px';
					$(document.body).append('<div id=\'testpg\' class=\'ui-jqgrid ui-widget ui-widget-content\' style=\'font-size:'+tdw+';visibility:hidden;\' ></div>');
					twd = $(pgl).clone().appendTo('#testpg').width();
					$('#testpg').remove();
					if(twd > 0) {
						if(pginp !== '') { twd += 50; } //should be param
						$('td#'+pgid+'_'+ts.p.pagerpos,'#'+pgcnt).width(twd);
					}
					ts.p._nvtd = [];
					ts.p._nvtd[0] = twd ? Math.floor((ts.p.width - twd)/2) : Math.floor(ts.p.width/3);
					ts.p._nvtd[1] = 0;
					pgl=null;
					$('.ui-pg-selbox','#'+pgcnt).bind('change',function() {
						if(!clearVals('records')) { return false; }
						ts.p.page = Math.round(ts.p.rowNum*(ts.p.page-1)/this.value-0.5)+1;
						ts.p.rowNum = this.value;
						if(ts.p.pager) { $('.ui-pg-selbox',ts.p.pager).val(this.value); }
						if(ts.p.toppager) { $('.ui-pg-selbox',ts.p.toppager).val(this.value); }
						populate();
						return false;
					});
					if(ts.p.pgbuttons===true) {
						$('.ui-pg-button','#'+pgcnt).hover(function(){
							if($(this).hasClass('ui-state-disabled')) {
								this.style.cursor='default';
							} else {
								$(this).addClass('ui-state-hover');
								this.style.cursor='pointer';
							}
						},function() {
							if(!$(this).hasClass('ui-state-disabled')) {
								$(this).removeClass('ui-state-hover');
								this.style.cursor= 'default';
							}
						});
						$('#first'+$.jgrid.jqID(tp)+', #prev'+$.jgrid.jqID(tp)+', #next'+$.jgrid.jqID(tp)+', #last'+$.jgrid.jqID(tp)).click( function() {
							var cp = intNum(ts.p.page,1),
								last = intNum(ts.p.lastpage,1), selclick = false,
								fp=true, pp=true, np=true,lp=true;
							if(last ===0 || last===1) {fp=false;pp=false;np=false;lp=false; }
							else if( last>1 && cp >=1) {
								if( cp === 1) { fp=false; pp=false; }
								//else if( cp>1 && cp <last){ }
								else if( cp===last){ np=false;lp=false; }
							} else if( last>1 && cp===0 ) { np=false;lp=false; cp=last-1;}
							if(!clearVals(this.id)) { return false; }
							if( this.id === 'first'+tp && fp ) { ts.p.page=1; selclick=true;}
							if( this.id === 'prev'+tp && pp) { ts.p.page=(cp-1); selclick=true;}
							if( this.id === 'next'+tp && np) { ts.p.page=(cp+1); selclick=true;}
							if( this.id === 'last'+tp && lp) { ts.p.page=last; selclick=true;}
							if(selclick) {
								populate();
							}
							return false;
						});
					}
					if(ts.p.pginput===true) {
						$('input.ui-pg-input','#'+pgcnt).keypress( function(e) {
							var key = e.charCode || e.keyCode || 0;
							if(key == 13) {
								if(!clearVals('user')) { return false; }
								ts.p.page = ($(this).val()>0) ? $(this).val():ts.p.page;
								populate();
								return false;
							}
							return this;
						});
					}
				},
				sortData = function (index, idxcol,reload,sor){
					if(!ts.p.colModel[idxcol].sortable) { return; }
					var so;
					if(ts.p.savedRow.length > 0) {return;}
					if(!reload) {
						if( ts.p.lastsort == idxcol ) {
							if( ts.p.sortorder == 'asc') {
								ts.p.sortorder = 'desc';
							} else if(ts.p.sortorder == 'desc') { ts.p.sortorder = 'asc';}
						} else { ts.p.sortorder = ts.p.colModel[idxcol].firstsortorder || 'asc'; }
						ts.p.page = 1;
					}
					if(sor) {
						if(ts.p.lastsort == idxcol && ts.p.sortorder == sor && !reload) { return; }
						ts.p.sortorder = sor;
					}
					var previousSelectedTh = ts.grid.headers[ts.p.lastsort].el, newSelectedTh = ts.grid.headers[idxcol].el;

					$('span.ui-grid-ico-sort',previousSelectedTh).addClass('ui-state-disabled');
					$(previousSelectedTh).attr('aria-selected','false');
					$('span.ui-icon-'+ts.p.sortorder,newSelectedTh).removeClass('ui-state-disabled');
					$(newSelectedTh).attr('aria-selected','true');
					if(!ts.p.viewsortcols[0]) {
						if(ts.p.lastsort != idxcol) {
							$('span.s-ico',previousSelectedTh).hide();
							$('span.s-ico',newSelectedTh).show();
						}
					}
					index = index.substring(5 + ts.p.id.length + 1); // bad to be changed!?!
					ts.p.sortname = ts.p.colModel[idxcol].index || index;
					so = ts.p.sortorder;
					if ($(ts).triggerHandler('jqGridSortCol', [index, idxcol, so]) === 'stop') {
						ts.p.lastsort = idxcol;
						return;
					}
					if($.isFunction(ts.p.onSortCol)) {if (ts.p.onSortCol.call(ts,index,idxcol,so)=='stop') {ts.p.lastsort = idxcol; return;}}
					if(ts.p.datatype == 'local') {
						if(ts.p.deselectAfterSort) {$(ts).jqGrid('resetSelection');}
					} else {
						ts.p.selrow = null;
						if(ts.p.multiselect){setHeadCheckBox( false );}
						ts.p.selarrrow =[];
						ts.p.savedRow =[];
					}
					if(ts.p.scroll) {
						var sscroll = ts.grid.bDiv.scrollLeft;
						emptyRows.call(ts, true, false);
						ts.grid.hDiv.scrollLeft = sscroll;
					}
					if(ts.p.subGrid && ts.p.datatype=='local') {
						$('td.sgexpanded','#'+$.jgrid.jqID(ts.p.id)).each(function(){
							$(this).trigger('click');
						});
					}
					populate();
					ts.p.lastsort = idxcol;
					if(ts.p.sortname != index && idxcol) {ts.p.lastsort = idxcol;}
				},
				setColWidth = function () {
					var initwidth = 0, brd=$.jgrid.cell_width? 0: intNum(ts.p.cellLayout,0), vc=0, lvc, scw=intNum(ts.p.scrollOffset,0),cw,hs=false,aw,gw=0,
						cl = 0, cr;
					$.each(ts.p.colModel, function() {
						if(this.hidden === undefined) {this.hidden=false;}
						if(ts.p.grouping && ts.p.autowidth) {
							var ind = $.inArray(this.name, ts.p.groupingView.groupField);
							if(ind !== -1) {
								this.hidden = !ts.p.groupingView.groupColumnShow[ind];
							}
						}
						this.widthOrg = cw = intNum(this.width,0);
						if(this.hidden===false){
							initwidth += cw+brd;
							if(this.fixed) {
								gw += cw+brd;
							} else {
								vc++;
							}
							cl++;
						}
					});
					if(isNaN(ts.p.width)) {
						ts.p.width  = initwidth + ((ts.p.shrinkToFit ===false && !isNaN(ts.p.height)) ? scw : 0);
					}
					grid.width = ts.p.width;
					ts.p.tblwidth = initwidth;
					if(ts.p.shrinkToFit ===false && ts.p.forceFit === true) {ts.p.forceFit=false;}
					if(ts.p.shrinkToFit===true && vc > 0) {
						aw = grid.width-brd*vc-gw;
						if(!isNaN(ts.p.height)) {
							aw -= scw;
							hs = true;
						}
						initwidth =0;
						$.each(ts.p.colModel, function(i) {
							if(this.hidden === false && !this.fixed){
								cw = Math.round(aw*this.width/(ts.p.tblwidth-brd*vc-gw));
								this.width =cw;
								initwidth += cw;
								lvc = i;
							}
						});
						cr =0;
						if (hs) {
							if(grid.width-gw-(initwidth+brd*vc) !== scw){
								cr = grid.width-gw-(initwidth+brd*vc)-scw;
							}
						} else if(!hs && Math.abs(grid.width-gw-(initwidth+brd*vc)) !== 1) {
							cr = grid.width-gw-(initwidth+brd*vc);
						}
						ts.p.colModel[lvc].width += cr;
						ts.p.tblwidth = initwidth+cr+brd*vc+gw;
						if(ts.p.tblwidth > ts.p.width) {
							ts.p.colModel[lvc].width -= (ts.p.tblwidth - parseInt(ts.p.width,10));
							ts.p.tblwidth = ts.p.width;
						}
					}
				},
				nextVisible= function(iCol) {
					var ret = iCol, j=iCol, i;
					for (i = iCol+1;i<ts.p.colModel.length;i++){
						if(ts.p.colModel[i].hidden !== true ) {
							j=i; break;
						}
					}
					return j-ret;
				},
				getOffset = function (iCol) {
					var i, ret = [0], brd1 = $.jgrid.cell_width ? 0 : ts.p.cellLayout;
					for(i=0;i<=iCol;i++){
						if(ts.p.colModel[i].hidden === false ) {
							ret[0] += ts.p.colModel[i].width+brd1;
						}
					}
					if(ts.p.direction=='rtl') { ret[0] = ts.p.width - ret[0]; }
					ret[0] -= ts.grid.bDiv.scrollLeft;
					ret.push($(ts.grid.hDiv).position().top);
					ret.push($(ts.grid.bDiv).offset().top - $(ts.grid.hDiv).offset().top + $(ts.grid.bDiv).height());
					return ret;
				},
				getColumnHeaderIndex = function (th) {
					var i, headers = ts.grid.headers, ci = $.jgrid.getCellIndex(th);
					for (i = 0; i < headers.length; i++) {
						if (th === headers[i].el) {
							ci = i;
							break;
						}
					}
					return ci;
				};
			this.p.id = this.id;
			if ($.inArray(ts.p.multikey,sortkeys) == -1 ) {ts.p.multikey = false;}
			ts.p.keyIndex=false;
			for (i=0; i<ts.p.colModel.length;i++) {
				ts.p.colModel[i] = $.extend(true, {}, ts.p.cmTemplate, ts.p.colModel[i].template || {}, ts.p.colModel[i]);
				if (ts.p.keyIndex === false && ts.p.colModel[i].key===true) {
					ts.p.keyIndex = i;
				}
			}
			ts.p.sortorder = ts.p.sortorder.toLowerCase();
			$.jgrid.cell_width = $.jgrid.cellWidth();
			if(ts.p.grouping===true) {
				ts.p.scroll = false;
				ts.p.rownumbers = false;
				//ts.p.subGrid = false; expiremental
				//			ts.p.treeGrid = false;
				ts.p.gridview = true;
			}
			if(this.p.treeGrid === true) {
				try { $(this).jqGrid('setTreeGrid');} catch (_) {}
				if(ts.p.datatype != 'local') { ts.p.localReader = {id: '_id_'};	}
			}
			if(this.p.subGrid) {
				try { $(ts).jqGrid('setSubGrid');} catch (s){}
			}
			if(this.p.multiselect) {
				this.p.colNames.unshift('<input role=\'checkbox\' id=\'cb_'+this.p.id+'\' class=\'cbox\' type=\'checkbox\'/>');
				this.p.colModel.unshift({name:'cb',width:$.jgrid.cell_width ? ts.p.multiselectWidth+ts.p.cellLayout : ts.p.multiselectWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:'center',fixed:true});
			}
			if(this.p.rownumbers) {
				this.p.colNames.unshift('');
				this.p.colModel.unshift({name:'rn',width:ts.p.rownumWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:'center',fixed:true});
			}
			ts.p.xmlReader = $.extend(true,{
				root: 'rows',
				row: 'row',
				page: 'rows>page',
				total: 'rows>total',
				records : 'rows>records',
				repeatitems: true,
				cell: 'cell',
				id: '[id]',
				userdata: 'userdata',
				subgrid: {root:'rows', row: 'row', repeatitems: true, cell:'cell'}
			}, ts.p.xmlReader);
			ts.p.jsonReader = $.extend(true,{
				root: 'rows',
				page: 'page',
				total: 'total',
				records: 'records',
				repeatitems: true,
				cell: 'cell',
				id: 'id',
				userdata: 'userdata',
				subgrid: {root:'rows', repeatitems: true, cell:'cell'}
			},ts.p.jsonReader);
			ts.p.localReader = $.extend(true,{
				root: 'rows',
				page: 'page',
				total: 'total',
				records: 'records',
				repeatitems: false,
				cell: 'cell',
				id: 'id',
				userdata: 'userdata',
				subgrid: {root:'rows', repeatitems: true, cell:'cell'}
			},ts.p.localReader);
			if(ts.p.scroll){
				ts.p.pgbuttons = false; ts.p.pginput=false; ts.p.rowList=[];
			}
			if(ts.p.data.length) { refreshIndex(); }
			var thead = '<thead><tr class=\'ui-jqgrid-labels\' role=\'rowheader\'>',
				tdc, idn, w, res, sort,
				td, ptr, tbody, imgs,iac='',idc='';
			if(ts.p.shrinkToFit===true && ts.p.forceFit===true) {
				for (i=ts.p.colModel.length-1;i>=0;i--){
					if(!ts.p.colModel[i].hidden) {
						ts.p.colModel[i].resizable=false;
						break;
					}
				}
			}
			if(ts.p.viewsortcols[1] == 'horizontal') {iac=' ui-i-asc';idc=' ui-i-desc';}
			tdc = isMSIE ?  'class=\'ui-th-div-ie\'' :'';
			imgs = '<span class=\'s-ico\' style=\'display:none\'><span sort=\'asc\' class=\'ui-grid-ico-sort ui-icon-asc'+iac+' ui-state-disabled ui-icon ui-icon-triangle-1-n ui-sort-'+dir+'\'></span>';
			imgs += '<span sort=\'desc\' class=\'ui-grid-ico-sort ui-icon-desc'+idc+' ui-state-disabled ui-icon ui-icon-triangle-1-s ui-sort-'+dir+'\'></span></span>';
			for(i=0;i<this.p.colNames.length;i++){
				var tooltip = ts.p.headertitles ? (' title="'+$.jgrid.stripHtml(ts.p.colNames[i])+'"') :'';
				thead += '<th id=\''+ts.p.id+'_'+ts.p.colModel[i].name+'\' role=\'columnheader\' class=\'ui-state-default ui-th-column ui-th-'+dir+'\''+ tooltip+'>';
				idn = ts.p.colModel[i].index || ts.p.colModel[i].name;
				thead += '<div id=\'jqgh_'+ts.p.id+'_'+ts.p.colModel[i].name+'\' '+tdc+'>'+ts.p.colNames[i];
				if(!ts.p.colModel[i].width)  { ts.p.colModel[i].width = 150; }
				else { ts.p.colModel[i].width = parseInt(ts.p.colModel[i].width,10); }
				if(typeof ts.p.colModel[i].title !== 'boolean') { ts.p.colModel[i].title = true; }
				if (idn == ts.p.sortname) {
					ts.p.lastsort = i;
				}
				thead += imgs+'</div></th>';
			}
			thead += '</tr></thead>';
			imgs = null;
			$(this).append(thead);
			$('thead tr:first th',this).hover(function(){$(this).addClass('ui-state-hover');},function(){$(this).removeClass('ui-state-hover');});
			if(this.p.multiselect) {
				var emp=[], chk;
				$('#cb_'+$.jgrid.jqID(ts.p.id),this).bind('click',function(){
					ts.p.selarrrow = [];
					var froz = ts.p.frozenColumns === true ? ts.p.id + '_frozen' : '';
					if (this.checked) {
						$(ts.rows).each(function(i) {
							if (i>0) {
								if(!$(this).hasClass('ui-subgrid') && !$(this).hasClass('jqgroup') && !$(this).hasClass('ui-state-disabled')){
									$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(this.id) )[ts.p.useProp ? 'prop': 'attr']('checked',true);
									$(this).addClass('ui-state-highlight').attr('aria-selected','true');
									ts.p.selarrrow.push(this.id);
									ts.p.selrow = this.id;
									if(froz) {
										$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(this.id), ts.grid.fbDiv )[ts.p.useProp ? 'prop': 'attr']('checked',true);
										$('#'+$.jgrid.jqID(this.id), ts.grid.fbDiv).addClass('ui-state-highlight');
									}
								}
							}
						});
						chk=true;
						emp=[];
					}
					else {
						$(ts.rows).each(function(i) {
							if(i>0) {
								if(!$(this).hasClass('ui-subgrid') && !$(this).hasClass('ui-state-disabled')){
									$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(this.id) )[ts.p.useProp ? 'prop': 'attr']('checked', false);
									$(this).removeClass('ui-state-highlight').attr('aria-selected','false');
									emp.push(this.id);
									if(froz) {
										$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(this.id), ts.grid.fbDiv )[ts.p.useProp ? 'prop': 'attr']('checked',false);
										$('#'+$.jgrid.jqID(this.id), ts.grid.fbDiv).removeClass('ui-state-highlight');
									}
								}
							}
						});
						ts.p.selrow = null;
						chk=false;
					}
					$(ts).triggerHandler('jqGridSelectAll', [chk ? ts.p.selarrrow : emp, chk]);
					if($.isFunction(ts.p.onSelectAll)) {ts.p.onSelectAll.call(ts, chk ? ts.p.selarrrow : emp,chk);}
				});
			}

			if(ts.p.autowidth===true) {
				var pw = $(eg).innerWidth();
				ts.p.width = pw > 0?  pw: 'nw';
			}
			setColWidth();
			$(eg).css('width',grid.width+'px').append('<div class=\'ui-jqgrid-resize-mark\' id=\'rs_m'+ts.p.id+'\'>&#160;</div>');
			$(gv).css('width',grid.width+'px');
			thead = $('thead:first',ts).get(0);
			var	tfoot = '';
			if(ts.p.footerrow) { tfoot += '<table role=\'grid\' style=\'width:'+ts.p.tblwidth+'px\' class=\'ui-jqgrid-ftable\' cellspacing=\'0\' cellpadding=\'0\' border=\'0\'><tbody><tr role=\'row\' class=\'ui-widget-content footrow footrow-'+dir+'\'>'; }
			var thr = $('tr:first',thead),
				firstr = '<tr class=\'jqgfirstrow\' role=\'row\' style=\'height:auto\'>';
			ts.p.disableClick=false;
			$('th',thr).each(function ( j ) {
				w = ts.p.colModel[j].width;
				if(ts.p.colModel[j].resizable === undefined) {ts.p.colModel[j].resizable = true;}
				if(ts.p.colModel[j].resizable){
					res = document.createElement('span');
					$(res).html('&#160;').addClass('ui-jqgrid-resize ui-jqgrid-resize-'+dir)
						.css('cursor','col-resize');
					$(this).addClass(ts.p.resizeclass);
				} else {
					res = '';
				}
				$(this).css('width',w+'px').prepend(res);
				var hdcol = '';
				if( ts.p.colModel[j].hidden ) {
					$(this).css('display','none');
					hdcol = 'display:none;';
				}
				firstr += '<td role=\'gridcell\' style=\'height:0px;width:'+w+'px;'+hdcol+'\'></td>';
				grid.headers[j] = { width: w, el: this };
				sort = ts.p.colModel[j].sortable;
				if( typeof sort !== 'boolean') {ts.p.colModel[j].sortable =  true; sort=true;}
				var nm = ts.p.colModel[j].name;
				if( !(nm == 'cb' || nm=='subgrid' || nm=='rn') ) {
					if(ts.p.viewsortcols[2]){
						$('>div',this).addClass('ui-jqgrid-sortable');
					}
				}
				if(sort) {
					if(ts.p.viewsortcols[0]) {$('div span.s-ico',this).show(); if(j==ts.p.lastsort){ $('div span.ui-icon-'+ts.p.sortorder,this).removeClass('ui-state-disabled');}}
					else if( j == ts.p.lastsort) {$('div span.s-ico',this).show();$('div span.ui-icon-'+ts.p.sortorder,this).removeClass('ui-state-disabled');}
				}
				if(ts.p.footerrow) { tfoot += '<td role=\'gridcell\' '+formatCol(j,0,'', null, '', false)+'>&#160;</td>'; }
			}).mousedown(function(e) {
				if ($(e.target).closest('th>span.ui-jqgrid-resize').length != 1) { return; }
				var ci = getColumnHeaderIndex(this);
				if(ts.p.forceFit===true) {ts.p.nv= nextVisible(ci);}
				grid.dragStart(ci, e, getOffset(ci));
				return false;
			}).click(function(e) {
				if (ts.p.disableClick) {
					ts.p.disableClick = false;
					return false;
				}
				var s = 'th>div.ui-jqgrid-sortable',r,d;
				if (!ts.p.viewsortcols[2]) { s = 'th>div>span>span.ui-grid-ico-sort'; }
				var t = $(e.target).closest(s);
				if (t.length != 1) { return; }
				var ci = getColumnHeaderIndex(this);
				if (!ts.p.viewsortcols[2]) { r=true;d=t.attr('sort'); }
				sortData( $('div',this)[0].id, ci, r, d);
				return false;
			});
			if (ts.p.sortable && $.fn.sortable) {
				try {
					$(ts).jqGrid('sortableColumns', thr);
				} catch (e){}
			}
			if(ts.p.footerrow) { tfoot += '</tr></tbody></table>'; }
			firstr += '</tr>';
			tbody = document.createElement('tbody');
			this.appendChild(tbody);
			$(this).addClass('ui-jqgrid-btable').append(firstr);
			firstr = null;
			var hTable = $('<table class=\'ui-jqgrid-htable\' style=\'width:'+ts.p.tblwidth+'px\' role=\'grid\' aria-labelledby=\'gbox_'+this.id+'\' cellspacing=\'0\' cellpadding=\'0\' border=\'0\'></table>').append(thead),
				hg = (ts.p.caption && ts.p.hiddengrid===true) ? true : false,
				hb = $('<div class=\'ui-jqgrid-hbox' + (dir=='rtl' ? '-rtl' : '' )+'\'></div>');
			thead = null;
			grid.hDiv = document.createElement('div');
			$(grid.hDiv)
				.css({ width: grid.width+'px'})
				.addClass('ui-state-default ui-jqgrid-hdiv')
				.append(hb);
			$(hb).append(hTable);
			hTable = null;
			if(hg) { $(grid.hDiv).hide(); }
			if(ts.p.pager){
			// TBD -- escape ts.p.pager here?
				if(typeof ts.p.pager === 'string') {if(ts.p.pager.substr(0,1) !='#') { ts.p.pager = '#'+ts.p.pager;} }
				else { ts.p.pager = '#'+ $(ts.p.pager).attr('id');}
				$(ts.p.pager).css({width: grid.width+'px'}).addClass('ui-state-default ui-jqgrid-pager ui-corner-bottom').appendTo(eg);
				if(hg) {$(ts.p.pager).hide();}
				setPager(ts.p.pager,'');
			}
			if( ts.p.cellEdit === false && ts.p.hoverrows === true) {
				$(ts).bind('mouseover',function(e) {
					ptr = $(e.target).closest('tr.jqgrow');
					if($(ptr).attr('class') !== 'ui-subgrid') {
						$(ptr).addClass('ui-state-hover');
					}
				}).bind('mouseout',function(e) {
					ptr = $(e.target).closest('tr.jqgrow');
					$(ptr).removeClass('ui-state-hover');
				});
			}
			var ri,ci, tdHtml;
			$(ts).before(grid.hDiv).click(function(e) {
				td = e.target;
				ptr = $(td,ts.rows).closest('tr.jqgrow');
				if($(ptr).length === 0 || ptr[0].className.indexOf( 'ui-state-disabled' ) > -1 || ($(td,ts).closest('table.ui-jqgrid-btable').attr('id') || '').replace('_frozen','') !== ts.id ) {
					return this;
				}
				var scb = $(td).hasClass('cbox'),
					cSel = $(ts).triggerHandler('jqGridBeforeSelectRow', [ptr[0].id, e]);
				cSel = (cSel === false || cSel === 'stop') ? false : true;
				if(cSel && $.isFunction(ts.p.beforeSelectRow)) { cSel = ts.p.beforeSelectRow.call(ts,ptr[0].id, e); }
				if (td.tagName == 'A' || ((td.tagName == 'INPUT' || td.tagName == 'TEXTAREA' || td.tagName == 'OPTION' || td.tagName == 'SELECT' ) && !scb) ) { return; }
				if(cSel === true) {
					ri = ptr[0].id;
					ci = $.jgrid.getCellIndex(td);
					tdHtml = $(td).closest('td,th').html();
					$(ts).triggerHandler('jqGridCellSelect', [ri,ci,tdHtml,e]);
					if($.isFunction(ts.p.onCellSelect)) {
						ts.p.onCellSelect.call(ts,ri,ci,tdHtml,e);
					}
					if(ts.p.cellEdit === true) {
						if(ts.p.multiselect && scb){
							$(ts).jqGrid('setSelection', ri ,true,e);
						} else {
							ri = ptr[0].rowIndex;
							try {$(ts).jqGrid('editCell',ri,ci,true);} catch (_) {}
						}
					} else if ( !ts.p.multikey ) {
						if(ts.p.multiselect && ts.p.multiboxonly) {
							if(scb){$(ts).jqGrid('setSelection',ri,true,e);}
							else {
								var frz = ts.p.frozenColumns ? ts.p.id+'_frozen' : '';
								$(ts.p.selarrrow).each(function(i,n){
									var ind = ts.rows.namedItem(n);
									$(ind).removeClass('ui-state-highlight');
									$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(n))[ts.p.useProp ? 'prop': 'attr']('checked', false);
									if(frz) {
										$('#'+$.jgrid.jqID(n), '#'+$.jgrid.jqID(frz)).removeClass('ui-state-highlight');
										$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+$.jgrid.jqID(n), '#'+$.jgrid.jqID(frz))[ts.p.useProp ? 'prop': 'attr']('checked', false);
									}
								});
								ts.p.selarrrow = [];
								$(ts).jqGrid('setSelection',ri,true,e);
							}
						} else {
							$(ts).jqGrid('setSelection',ri,true,e);
						}
					} else {
						if(e[ts.p.multikey]) {
							$(ts).jqGrid('setSelection',ri,true,e);
						} else if(ts.p.multiselect && scb) {
							scb = $('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+ri).is(':checked');
							$('#jqg_'+$.jgrid.jqID(ts.p.id)+'_'+ri)[ts.p.useProp ? 'prop' : 'attr']('checked', scb);
						}
					}
				}
			}).bind('reloadGrid', function(e,opts) {
				if(ts.p.treeGrid ===true) {	ts.p.datatype = ts.p.treedatatype;}
				if (opts && opts.current) {
					ts.grid.selectionPreserver(ts);
				}
				if(ts.p.datatype=='local'){ $(ts).jqGrid('resetSelection');  if(ts.p.data.length) { refreshIndex();} }
				else if(!ts.p.treeGrid) {
					ts.p.selrow=null;
					if(ts.p.multiselect) {ts.p.selarrrow =[];setHeadCheckBox(false);}
					ts.p.savedRow = [];
				}
				if(ts.p.scroll) {emptyRows.call(ts, true, false);}
				if (opts && opts.page) {
					var page = opts.page;
					if (page > ts.p.lastpage) { page = ts.p.lastpage; }
					if (page < 1) { page = 1; }
					ts.p.page = page;
					if (ts.grid.prevRowHeight) {
						ts.grid.bDiv.scrollTop = (page - 1) * ts.grid.prevRowHeight * ts.p.rowNum;
					} else {
						ts.grid.bDiv.scrollTop = 0;
					}
				}
				if (ts.grid.prevRowHeight && ts.p.scroll) {
					delete ts.p.lastpage;
					ts.grid.populateVisible();
				} else {
					ts.grid.populate();
				}
				if(ts.p._inlinenav===true) {$(ts).jqGrid('showAddEditButtons');}
				return false;
			})
				.dblclick(function(e) {
					td = e.target;
					ptr = $(td,ts.rows).closest('tr.jqgrow');
					if($(ptr).length === 0 ){return;}
					ri = ptr[0].rowIndex;
					ci = $.jgrid.getCellIndex(td);
					$(ts).triggerHandler('jqGridDblClickRow', [$(ptr).attr('id'),ri,ci,e]);
					if ($.isFunction(this.p.ondblClickRow)) { ts.p.ondblClickRow.call(ts,$(ptr).attr('id'),ri,ci, e); }
				})
				.bind('contextmenu', function(e) {
					td = e.target;
					ptr = $(td,ts.rows).closest('tr.jqgrow');
					if($(ptr).length === 0 ){return;}
					if(!ts.p.multiselect) {	$(ts).jqGrid('setSelection',ptr[0].id,true,e);	}
					ri = ptr[0].rowIndex;
					ci = $.jgrid.getCellIndex(td);
					$(ts).triggerHandler('jqGridRightClickRow', [$(ptr).attr('id'),ri,ci,e]);
					if ($.isFunction(this.p.onRightClickRow)) { ts.p.onRightClickRow.call(ts,$(ptr).attr('id'),ri,ci, e); }
				});
			grid.bDiv = document.createElement('div');
			if(isMSIE) { if(String(ts.p.height).toLowerCase() === 'auto') { ts.p.height = '100%'; } }
			$(grid.bDiv)
				.append($('<div style="position:relative;'+(isMSIE && $.jgrid.msiever() < 8 ? 'height:0.01%;' : '')+'"></div>').append('<div></div>').append(this))
				.addClass('ui-jqgrid-bdiv')
				.css({ height: ts.p.height+(isNaN(ts.p.height)?'':'px'), width: (grid.width)+'px'})
				.scroll(grid.scrollGrid);
			$('table:first',grid.bDiv).css({width:ts.p.tblwidth+'px'});
			if( !$.support.tbody ) { //IE
				if( $('tbody',this).length == 2 ) { $('tbody:gt(0)',this).remove();}
			}
			if(ts.p.multikey){
				if( $.jgrid.msie) {
					$(grid.bDiv).bind('selectstart',function(){return false;});
				} else {
					$(grid.bDiv).bind('mousedown',function(){return false;});
				}
			}
			if(hg) {$(grid.bDiv).hide();}
			grid.cDiv = document.createElement('div');
			var arf = ts.p.hidegrid===true ? $('<a role=\'link\' href=\'javascript:void(0)\'></a>').addClass('ui-jqgrid-titlebar-close HeaderButton').hover(
				function(){ arf.addClass('ui-state-hover');},
				function() {arf.removeClass('ui-state-hover');})
				.append('<span class=\'ui-icon ui-icon-circle-triangle-n\'></span>').css((dir=='rtl'?'left':'right'),'0px') : '';
			$(grid.cDiv).append(arf).append('<span class=\'ui-jqgrid-title'+(dir=='rtl' ? '-rtl' :'' )+'\'>'+ts.p.caption+'</span>')
				.addClass('ui-jqgrid-titlebar ui-widget-header ui-corner-top ui-helper-clearfix');
			$(grid.cDiv).insertBefore(grid.hDiv);
			if( ts.p.toolbar[0] ) {
				grid.uDiv = document.createElement('div');
				if(ts.p.toolbar[1] == 'top') {$(grid.uDiv).insertBefore(grid.hDiv);}
				else if (ts.p.toolbar[1]=='bottom' ) {$(grid.uDiv).insertAfter(grid.hDiv);}
				if(ts.p.toolbar[1]=='both') {
					grid.ubDiv = document.createElement('div');
					$(grid.uDiv).addClass('ui-userdata ui-state-default').attr('id','t_'+this.id).insertBefore(grid.hDiv);
					$(grid.ubDiv).addClass('ui-userdata ui-state-default').attr('id','tb_'+this.id).insertAfter(grid.hDiv);
					if(hg)  {$(grid.ubDiv).hide();}
				} else {
					$(grid.uDiv).width(grid.width).addClass('ui-userdata ui-state-default').attr('id','t_'+this.id);
				}
				if(hg) {$(grid.uDiv).hide();}
			}
			if(ts.p.toppager) {
				ts.p.toppager = $.jgrid.jqID(ts.p.id)+'_toppager';
				grid.topDiv = $('<div id=\''+ts.p.toppager+'\'></div>')[0];
				ts.p.toppager = '#'+ts.p.toppager;
				$(grid.topDiv).addClass('ui-state-default ui-jqgrid-toppager').width(grid.width).insertBefore(grid.hDiv);
				setPager(ts.p.toppager,'_t');
			}
			if(ts.p.footerrow) {
				grid.sDiv = $('<div class=\'ui-jqgrid-sdiv\'></div>')[0];
				hb = $('<div class=\'ui-jqgrid-hbox'+(dir=='rtl'?'-rtl':'')+'\'></div>');
				$(grid.sDiv).append(hb).width(grid.width).insertAfter(grid.hDiv);
				$(hb).append(tfoot);
				grid.footers = $('.ui-jqgrid-ftable',grid.sDiv)[0].rows[0].cells;
				if(ts.p.rownumbers) { grid.footers[0].className = 'ui-state-default jqgrid-rownum'; }
				if(hg) {$(grid.sDiv).hide();}
			}
			hb = null;
			if(ts.p.caption) {
				var tdt = ts.p.datatype;
				if(ts.p.hidegrid===true) {
					$('.ui-jqgrid-titlebar-close',grid.cDiv).click( function(e){
						var onHdCl = $.isFunction(ts.p.onHeaderClick),
							elems = '.ui-jqgrid-bdiv, .ui-jqgrid-hdiv, .ui-jqgrid-pager, .ui-jqgrid-sdiv',
							counter, self = this;
						if(ts.p.toolbar[0]===true) {
							if( ts.p.toolbar[1]=='both') {
								elems += ', #' + $(grid.ubDiv).attr('id');
							}
							elems += ', #' + $(grid.uDiv).attr('id');
						}
						counter = $(elems,'#gview_'+$.jgrid.jqID(ts.p.id)).length;

						if(ts.p.gridstate == 'visible') {
							$(elems,'#gbox_'+$.jgrid.jqID(ts.p.id)).slideUp('fast', function() {
								counter--;
								if (counter === 0) {
									$('span',self).removeClass('ui-icon-circle-triangle-n').addClass('ui-icon-circle-triangle-s');
									ts.p.gridstate = 'hidden';
									if($('#gbox_'+$.jgrid.jqID(ts.p.id)).hasClass('ui-resizable')) { $('.ui-resizable-handle','#gbox_'+$.jgrid.jqID(ts.p.id)).hide(); }
									$(ts).triggerHandler('jqGridHeaderClick', [ts.p.gridstate,e]);
									if(onHdCl) {if(!hg) {ts.p.onHeaderClick.call(ts,ts.p.gridstate,e);}}
								}
							});
						} else if(ts.p.gridstate == 'hidden'){
							$(elems,'#gbox_'+$.jgrid.jqID(ts.p.id)).slideDown('fast', function() {
								counter--;
								if (counter === 0) {
									$('span',self).removeClass('ui-icon-circle-triangle-s').addClass('ui-icon-circle-triangle-n');
									if(hg) {ts.p.datatype = tdt;populate();hg=false;}
									ts.p.gridstate = 'visible';
									if($('#gbox_'+$.jgrid.jqID(ts.p.id)).hasClass('ui-resizable')) { $('.ui-resizable-handle','#gbox_'+$.jgrid.jqID(ts.p.id)).show(); }
									$(ts).triggerHandler('jqGridHeaderClick', [ts.p.gridstate,e]);
									if(onHdCl) {if(!hg) {ts.p.onHeaderClick.call(ts,ts.p.gridstate,e);}}
								}
							});
						}
						return false;
					});
					if(hg) {ts.p.datatype='local'; $('.ui-jqgrid-titlebar-close',grid.cDiv).trigger('click');}
				}
			} else {$(grid.cDiv).hide();}
			$(grid.hDiv).after(grid.bDiv)
				.mousemove(function (e) {
					if(grid.resizing){grid.dragMove(e);return false;}
				});
			$('.ui-jqgrid-labels',grid.hDiv).bind('selectstart', function () { return false; });
			$(document).mouseup(function () {
				if(grid.resizing) {	grid.dragEnd(); return false;}
				return true;
			});
			ts.formatCol = formatCol;
			ts.sortData = sortData;
			ts.updatepager = updatepager;
			ts.refreshIndex = refreshIndex;
			ts.setHeadCheckBox = setHeadCheckBox;
			ts.constructTr = constructTr;
			ts.formatter = function ( rowId, cellval , colpos, rwdat, act){return formatter(rowId, cellval , colpos, rwdat, act);};
			$.extend(grid,{populate : populate, emptyRows: emptyRows});
			this.grid = grid;
			ts.addXmlData = function(d) {addXmlData(d,ts.grid.bDiv);};
			ts.addJSONData = function(d) {addJSONData(d,ts.grid.bDiv);};
			this.grid.cols = this.rows[0].cells;
			$(ts).triggerHandler('jqGridInitGrid');
			if ($.isFunction( ts.p.onInitGrid )) { ts.p.onInitGrid.call(ts); }

			populate();ts.p.hiddengrid=false;
		});
	};
	$.jgrid.extend({
		getGridParam : function(pName) {
			var $t = this[0];
			if (!$t || !$t.grid) {return;}
			if (!pName) { return $t.p; }
			return $t.p[pName] !== undefined ? $t.p[pName] : null;
		},
		setGridParam : function (newParams){
			return this.each(function(){
				if (this.grid && typeof newParams === 'object') {$.extend(true,this.p,newParams);}
			});
		},
		getDataIDs : function () {
			var ids=[], i=0, len, j=0;
			this.each(function(){
				len = this.rows.length;
				if(len && len>0){
					while(i<len) {
						if($(this.rows[i]).hasClass('jqgrow')) {
							ids[j] = this.rows[i].id;
							j++;
						}
						i++;
					}
				}
			});
			return ids;
		},
		setSelection : function(selection,onsr, e) {
			return this.each(function(){
				var $t = this, stat,pt, ner, ia, tpsr, fid;
				if(selection === undefined) { return; }
				onsr = onsr === false ? false : true;
				pt=$t.rows.namedItem(String(selection));
				if(!pt || !pt.className || pt.className.indexOf( 'ui-state-disabled' ) > -1 ) { return; }
				function scrGrid(iR){
					var ch = $($t.grid.bDiv)[0].clientHeight,
						st = $($t.grid.bDiv)[0].scrollTop,
						rpos = $($t.rows[iR]).position().top,
						rh = $t.rows[iR].clientHeight;
					if(rpos+rh >= ch+st) { $($t.grid.bDiv)[0].scrollTop = rpos-(ch+st)+rh+st; }
					else if(rpos < ch+st) {
						if(rpos < st) {
							$($t.grid.bDiv)[0].scrollTop = rpos;
						}
					}
				}
				if($t.p.scrollrows===true) {
					ner = $t.rows.namedItem(selection).rowIndex;
					if(ner >=0 ){
						scrGrid(ner);
					}
				}
				if($t.p.frozenColumns === true ) {
					fid = $t.p.id+'_frozen';
				}
				if(!$t.p.multiselect) {
					if(pt.className !== 'ui-subgrid') {
						if( $t.p.selrow != pt.id) {
							$($t.rows.namedItem($t.p.selrow)).removeClass('ui-state-highlight').attr({'aria-selected':'false', 'tabindex' : '-1'});
							$(pt).addClass('ui-state-highlight').attr({'aria-selected':'true', 'tabindex' : '0'});//.focus();
							if(fid) {
								$('#'+$.jgrid.jqID($t.p.selrow), '#'+$.jgrid.jqID(fid)).removeClass('ui-state-highlight');
								$('#'+$.jgrid.jqID(selection), '#'+$.jgrid.jqID(fid)).addClass('ui-state-highlight');
							}
							stat = true;
						} else {
							stat = false;
						}
						$t.p.selrow = pt.id;
						$($t).triggerHandler('jqGridSelectRow', [pt.id, stat, e]);
						if( $t.p.onSelectRow && onsr) { $t.p.onSelectRow.call($t, pt.id, stat, e); }
					}
				} else {
				//unselect selectall checkbox when deselecting a specific row
					$t.setHeadCheckBox( false );
					$t.p.selrow = pt.id;
					ia = $.inArray($t.p.selrow,$t.p.selarrrow);
					if (  ia === -1 ){
						if(pt.className !== 'ui-subgrid') { $(pt).addClass('ui-state-highlight').attr('aria-selected','true');}
						stat = true;
						$t.p.selarrrow.push($t.p.selrow);
					} else {
						if(pt.className !== 'ui-subgrid') { $(pt).removeClass('ui-state-highlight').attr('aria-selected','false');}
						stat = false;
						$t.p.selarrrow.splice(ia,1);
						tpsr = $t.p.selarrrow[0];
						$t.p.selrow = (tpsr === undefined) ? null : tpsr;
					}
					$('#jqg_'+$.jgrid.jqID($t.p.id)+'_'+$.jgrid.jqID(pt.id))[$t.p.useProp ? 'prop': 'attr']('checked',stat);
					if(fid) {
						if(ia === -1) {
							$('#'+$.jgrid.jqID(selection), '#'+$.jgrid.jqID(fid)).addClass('ui-state-highlight');
						} else {
							$('#'+$.jgrid.jqID(selection), '#'+$.jgrid.jqID(fid)).removeClass('ui-state-highlight');
						}
						$('#jqg_'+$.jgrid.jqID($t.p.id)+'_'+$.jgrid.jqID(selection), '#'+$.jgrid.jqID(fid))[$t.p.useProp ? 'prop': 'attr']('checked',stat);
					}
					$($t).triggerHandler('jqGridSelectRow', [pt.id, stat, e]);
					if( $t.p.onSelectRow && onsr) { $t.p.onSelectRow.call($t, pt.id , stat, e); }
				}
			});
		},
		resetSelection : function( rowid ){
			return this.each(function(){
				var t = this, ind, sr, fid;
				if( t.p.frozenColumns === true ) {
					fid = t.p.id+'_frozen';
				}
				if(rowid !== undefined ) {
					sr = rowid === t.p.selrow ? t.p.selrow : rowid;
					$('#'+$.jgrid.jqID(t.p.id)+' tbody:first tr#'+$.jgrid.jqID(sr)).removeClass('ui-state-highlight').attr('aria-selected','false');
					if (fid) { $('#'+$.jgrid.jqID(sr), '#'+$.jgrid.jqID(fid)).removeClass('ui-state-highlight'); }
					if(t.p.multiselect) {
						$('#jqg_'+$.jgrid.jqID(t.p.id)+'_'+$.jgrid.jqID(sr), '#'+$.jgrid.jqID(t.p.id))[t.p.useProp ? 'prop': 'attr']('checked',false);
						if(fid) { $('#jqg_'+$.jgrid.jqID(t.p.id)+'_'+$.jgrid.jqID(sr), '#'+$.jgrid.jqID(fid))[t.p.useProp ? 'prop': 'attr']('checked',false); }
						t.setHeadCheckBox( false);
					}
					sr = null;
				} else if(!t.p.multiselect) {
					if(t.p.selrow) {
						$('#'+$.jgrid.jqID(t.p.id)+' tbody:first tr#'+$.jgrid.jqID(t.p.selrow)).removeClass('ui-state-highlight').attr('aria-selected','false');
						if(fid) { $('#'+$.jgrid.jqID(t.p.selrow), '#'+$.jgrid.jqID(fid)).removeClass('ui-state-highlight'); }
						t.p.selrow = null;
					}
				} else {
					$(t.p.selarrrow).each(function(i,n){
						ind = t.rows.namedItem(n);
						$(ind).removeClass('ui-state-highlight').attr('aria-selected','false');
						$('#jqg_'+$.jgrid.jqID(t.p.id)+'_'+$.jgrid.jqID(n))[t.p.useProp ? 'prop': 'attr']('checked',false);
						if(fid) {
							$('#'+$.jgrid.jqID(n), '#'+$.jgrid.jqID(fid)).removeClass('ui-state-highlight');
							$('#jqg_'+$.jgrid.jqID(t.p.id)+'_'+$.jgrid.jqID(n), '#'+$.jgrid.jqID(fid))[t.p.useProp ? 'prop': 'attr']('checked',false);
						}
					});
					t.setHeadCheckBox( false );
					t.p.selarrrow = [];
				}
				if(t.p.cellEdit === true) {
					if(parseInt(t.p.iCol,10)>=0  && parseInt(t.p.iRow,10)>=0) {
						$('td:eq('+t.p.iCol+')',t.rows[t.p.iRow]).removeClass('edit-cell ui-state-highlight');
						$(t.rows[t.p.iRow]).removeClass('selected-row ui-state-hover');
					}
				}
				t.p.savedRow = [];
			});
		},
		getRowData : function( rowid ) {
			var res = {}, resall, getall=false, len, j=0;
			this.each(function(){
				var $t = this,nm,ind;
				if(rowid === undefined) {
					getall = true;
					resall = [];
					len = $t.rows.length;
				} else {
					ind = $t.rows.namedItem(rowid);
					if(!ind) { return res; }
					len = 2;
				}
				while(j<len){
					if(getall) { ind = $t.rows[j]; }
					if( $(ind).hasClass('jqgrow') ) {
						$('td[role="gridcell"]',ind).each( function(i) {
							nm = $t.p.colModel[i].name;
							if ( nm !== 'cb' && nm !== 'subgrid' && nm !== 'rn') {
								if($t.p.treeGrid===true && nm == $t.p.ExpandColumn) {
									res[nm] = $.jgrid.htmlDecode($('span:first',this).html());
								} else {
									try {
										res[nm] = $.unformat.call($t,this,{rowId:ind.id, colModel:$t.p.colModel[i]},i);
									} catch (e){
										res[nm] = $.jgrid.htmlDecode($(this).html());
									}
								}
							}
						});
						if(getall) { resall.push(res); res={}; }
					}
					j++;
				}
			});
			return resall || res;
		},
		delRowData : function(rowid) {
			var success = false, rowInd, ia, ri;
			this.each(function() {
				var $t = this;
				rowInd = $t.rows.namedItem(rowid);
				if(!rowInd) {return false;}
				ri = rowInd.rowIndex;
				$(rowInd).remove();
				$t.p.records--;
				$t.p.reccount--;
				$t.updatepager(true,false);
				success=true;
				if($t.p.multiselect) {
					ia = $.inArray(rowid,$t.p.selarrrow);
					if(ia != -1) { $t.p.selarrrow.splice(ia,1);}
				}
				if ($t.p.multiselect && $t.p.selarrrow.length > 0) {
					$t.p.selrow = $t.p.selarrrow[$t.p.selarrrow.length-1];
				} else {
					$t.p.selrow = null;
				}
				if($t.p.datatype == 'local') {
					var id = $.jgrid.stripPref($t.p.idPrefix, rowid),
						pos = $t.p._index[id];
					if(pos !== undefined) {
						$t.p.data.splice(pos,1);
						$t.refreshIndex();
					}
				}
				if( $t.p.altRows === true && success ) {
					var cn = $t.p.altclass;
					$($t.rows).each(function(i){
						if(i % 2 ==1) { $(this).addClass(cn); }
						else { $(this).removeClass(cn); }
					});
				}
			});
			return success;
		},
		setRowData : function(rowid, data, cssp) {
			var nm, success=true, title;
			this.each(function(){
				if(!this.grid) {return false;}
				var t = this, vl, ind, cp = typeof cssp, lcdata={};
				ind = t.rows.namedItem(rowid);
				if(!ind) { return false; }
				if( data ) {
					try {
						$(this.p.colModel).each(function(i){
							nm = this.name;
							if( data[nm] !== undefined) {
								lcdata[nm] = this.formatter && typeof this.formatter === 'string' && this.formatter == 'date' ? $.unformat.date.call(t,data[nm],this) : data[nm];
								vl = t.formatter( rowid, data[nm], i, data, 'edit');
								title = this.title ? {'title':$.jgrid.stripHtml(vl)} : {};
								if(t.p.treeGrid===true && nm == t.p.ExpandColumn) {
									$('td[role=\'gridcell\']:eq('+i+') > span:first',ind).html(vl).attr(title);
								} else {
									$('td[role=\'gridcell\']:eq('+i+')',ind).html(vl).attr(title);
								}
							}
						});
						if(t.p.datatype == 'local') {
							var id = $.jgrid.stripPref(t.p.idPrefix, rowid),
								pos = t.p._index[id], key;
							if(t.p.treeGrid) {
								for(key in t.p.treeReader){
									if(t.p.treeReader.hasOwnProperty(key)) {
										delete lcdata[t.p.treeReader[key]];
									}
								}
							}
							if(pos !== undefined) {
								t.p.data[pos] = $.extend(true, t.p.data[pos], lcdata);
							}
							lcdata = null;
						}
					} catch (e) {
						success = false;
					}
				}
				if(success) {
					if(cp === 'string') {$(ind).addClass(cssp);} else if(cp === 'object') {$(ind).css(cssp);}
					$(t).triggerHandler('jqGridAfterGridComplete');
				}
			});
			return success;
		},
		addRowData : function(rowid,rdata,pos,src) {
			if(!pos) {pos = 'last';}
			var success = false, nm, row, gi, si, ni,sind, i, v, prp='', aradd, cnm, cn, data, cm, id;
			if(rdata) {
				if($.isArray(rdata)) {
					aradd=true;
					pos = 'last';
					cnm = rowid;
				} else {
					rdata = [rdata];
					aradd = false;
				}
				this.each(function() {
					var t = this, datalen = rdata.length;
					ni = t.p.rownumbers===true ? 1 :0;
					gi = t.p.multiselect ===true ? 1 :0;
					si = t.p.subGrid===true ? 1 :0;
					if(!aradd) {
						if(rowid !== undefined) { rowid = String(rowid);}
						else {
							rowid = $.jgrid.randId();
							if(t.p.keyIndex !== false) {
								cnm = t.p.colModel[t.p.keyIndex+gi+si+ni].name;
								if(rdata[0][cnm] !== undefined) { rowid = rdata[0][cnm]; }
							}
						}
					}
					cn = t.p.altclass;
					var k = 0, cna ='', lcdata = {},
						air = $.isFunction(t.p.afterInsertRow) ? true : false;
					while(k < datalen) {
						data = rdata[k];
						row=[];
						if(aradd) {
							try {
								rowid = data[cnm];
								if(rowid===undefined) {
									rowid = $.jgrid.randId();
								}
							}
							catch (e) {rowid = $.jgrid.randId();}
							cna = t.p.altRows === true ?  (t.rows.length-1)%2 === 0 ? cn : '' : '';
						}
						id = rowid;
						rowid  = t.p.idPrefix + rowid;
						if(ni){
							prp = t.formatCol(0,1,'',null,rowid, true);
							row[row.length] = '<td role="gridcell" class="ui-state-default jqgrid-rownum" '+prp+'>0</td>';
						}
						if(gi) {
							v = '<input role="checkbox" type="checkbox"'+' id="jqg_'+t.p.id+'_'+rowid+'" class="cbox"/>';
							prp = t.formatCol(ni,1,'', null, rowid, true);
							row[row.length] = '<td role="gridcell" '+prp+'>'+v+'</td>';
						}
						if(si) {
							row[row.length] = $(t).jqGrid('addSubGridCell',gi+ni,1);
						}
						for(i = gi+si+ni; i < t.p.colModel.length;i++){
							cm = t.p.colModel[i];
							nm = cm.name;
							lcdata[nm] = data[nm];
							v = t.formatter( rowid, $.jgrid.getAccessor(data,nm), i, data );
							prp = t.formatCol(i,1,v, data, rowid, lcdata);
							row[row.length] = '<td role="gridcell" '+prp+'>'+v+'</td>';
						}
						row.unshift( t.constructTr(rowid, false, cna, lcdata, data, false ) );
						row[row.length] = '</tr>';
						if(t.rows.length === 0){
							$('table:first',t.grid.bDiv).append(row.join(''));
						} else {
							switch (pos) {
							case 'last':
								$(t.rows[t.rows.length-1]).after(row.join(''));
								sind = t.rows.length-1;
								break;
							case 'first':
								$(t.rows[0]).after(row.join(''));
								sind = 1;
								break;
							case 'after':
								sind = t.rows.namedItem(src);
								if (sind) {
									if($(t.rows[sind.rowIndex+1]).hasClass('ui-subgrid')) { $(t.rows[sind.rowIndex+1]).after(row); }
									else { $(sind).after(row.join('')); }
								}
								sind++;
								break;
							case 'before':
								sind = t.rows.namedItem(src);
								if(sind) {$(sind).before(row.join(''));sind=sind.rowIndex;}
								sind--;
								break;
							}
						}
						if(t.p.subGrid===true) {
							$(t).jqGrid('addSubGrid',gi+ni, sind);
						}
						t.p.records++;
						t.p.reccount++;
						$(t).triggerHandler('jqGridAfterInsertRow', [rowid,data,data]);
						if(air) { t.p.afterInsertRow.call(t,rowid,data,data); }
						k++;
						if(t.p.datatype == 'local') {
							lcdata[t.p.localReader.id] = id;
							t.p._index[id] = t.p.data.length;
							t.p.data.push(lcdata);
							lcdata = {};
						}
					}
					if( t.p.altRows === true && !aradd) {
						if (pos == 'last') {
							if ((t.rows.length-1)%2 == 1)  {$(t.rows[t.rows.length-1]).addClass(cn);}
						} else {
							$(t.rows).each(function(i){
								if(i % 2 ==1) { $(this).addClass(cn); }
								else { $(this).removeClass(cn); }
							});
						}
					}
					t.updatepager(true,true);
					success = true;
				});
			}
			return success;
		},
		footerData : function(action,data, format) {
			var nm, success=false, res={}, title;
			function isEmpty(obj) {
				var i;
				for(i in obj) {
					if (obj.hasOwnProperty(i)) { return false; }
				}
				return true;
			}
			if(action === undefined) { action = 'get'; }
			if(typeof format !== 'boolean') { format  = true; }
			action = action.toLowerCase();
			this.each(function(){
				var t = this, vl;
				if(!t.grid || !t.p.footerrow) {return false;}
				if(action == 'set') { if(isEmpty(data)) { return false; } }
				success=true;
				$(this.p.colModel).each(function(i){
					nm = this.name;
					if(action == 'set') {
						if( data[nm] !== undefined) {
							vl = format ? t.formatter( '', data[nm], i, data, 'edit') : data[nm];
							title = this.title ? {'title':$.jgrid.stripHtml(vl)} : {};
							$('tr.footrow td:eq('+i+')',t.grid.sDiv).html(vl).attr(title);
							success = true;
						}
					} else if(action == 'get') {
						res[nm] = $('tr.footrow td:eq('+i+')',t.grid.sDiv).html();
					}
				});
			});
			return action == 'get' ? res : success;
		},
		showHideCol : function(colname,show) {
			return this.each(function() {
				var $t = this, fndh=false, brd=$.jgrid.cell_width ? 0: $t.p.cellLayout, cw;
				if (!$t.grid ) {return;}
				if( typeof colname === 'string') {colname=[colname];}
				show = show != 'none' ? '' : 'none';
				var sw = show === '' ? true :false,
					gh = $t.p.groupHeader && (typeof $t.p.groupHeader === 'object' || $.isFunction($t.p.groupHeader) );
				if(gh) { $($t).jqGrid('destroyGroupHeader', false); }
				$(this.p.colModel).each(function(i) {
					if ($.inArray(this.name,colname) !== -1 && this.hidden === sw) {
						if($t.p.frozenColumns === true && this.frozen === true) {
							return true;
						}
						$('tr',$t.grid.hDiv).each(function(){
							$(this.cells[i]).css('display', show);
						});
						$($t.rows).each(function(){
							if (!$(this).hasClass('jqgroup')) {
								$(this.cells[i]).css('display', show);
							}
						});
						if($t.p.footerrow) { $('tr.footrow td:eq('+i+')', $t.grid.sDiv).css('display', show); }
						cw =  parseInt(this.width,10);
						if(show === 'none') {
							$t.p.tblwidth -= cw+brd;
						} else {
							$t.p.tblwidth += cw+brd;
						}
						this.hidden = !sw;
						fndh=true;
						$($t).triggerHandler('jqGridShowHideCol', [sw,this.name,i]);
					}
				});
				if(fndh===true) {
					if($t.p.shrinkToFit === true && !isNaN($t.p.height)) { $t.p.tblwidth += parseInt($t.p.scrollOffset,10);}
					$($t).jqGrid('setGridWidth',$t.p.shrinkToFit === true ? $t.p.tblwidth : $t.p.width );
				}
				if( gh )  {
					$($t).jqGrid('setGroupHeaders',$t.p.groupHeader);
				}
			});
		},
		hideCol : function (colname) {
			return this.each(function(){$(this).jqGrid('showHideCol',colname,'none');});
		},
		showCol : function(colname) {
			return this.each(function(){$(this).jqGrid('showHideCol',colname,'');});
		},
		remapColumns : function(permutation, updateCells, keepHeader)
		{
			function resortArray(a) {
				var ac;
				if (a.length) {
					ac = $.makeArray(a);
				} else {
					ac = $.extend({}, a);
				}
				$.each(permutation, function(i) {
					a[i] = ac[this];
				});
			}
			var ts = this.get(0);
			function resortRows(parent, clobj) {
				$('>tr'+(clobj||''), parent).each(function() {
					var row = this;
					var elems = $.makeArray(row.cells);
					$.each(permutation, function() {
						var e = elems[this];
						if (e) {
							row.appendChild(e);
						}
					});
				});
			}
			resortArray(ts.p.colModel);
			resortArray(ts.p.colNames);
			resortArray(ts.grid.headers);
			resortRows($('thead:first', ts.grid.hDiv), keepHeader && ':not(.ui-jqgrid-labels)');
			if (updateCells) {
				resortRows($('#'+$.jgrid.jqID(ts.p.id)+' tbody:first'), '.jqgfirstrow, tr.jqgrow, tr.jqfoot');
			}
			if (ts.p.footerrow) {
				resortRows($('tbody:first', ts.grid.sDiv));
			}
			if (ts.p.remapColumns) {
				if (!ts.p.remapColumns.length){
					ts.p.remapColumns = $.makeArray(permutation);
				} else {
					resortArray(ts.p.remapColumns);
				}
			}
			ts.p.lastsort = $.inArray(ts.p.lastsort, permutation);
			if(ts.p.treeGrid) { ts.p.expColInd = $.inArray(ts.p.expColInd, permutation); }
			$(ts).triggerHandler('jqGridRemapColumns', [permutation, updateCells, keepHeader]);
		},
		setGridWidth : function(nwidth, shrink) {
			return this.each(function(){
				if (!this.grid ) {return;}
				var $t = this, cw,
					initwidth = 0, brd=$.jgrid.cell_width ? 0: $t.p.cellLayout, lvc, vc=0, hs=false, scw=$t.p.scrollOffset, aw, gw=0,
					cl = 0,cr;
				if(typeof shrink !== 'boolean') {
					shrink=$t.p.shrinkToFit;
				}
				if(isNaN(nwidth)) {return;}
				nwidth = parseInt(nwidth,10);
				$t.grid.width = $t.p.width = nwidth;
				$('#gbox_'+$.jgrid.jqID($t.p.id)).css('width',nwidth+'px');
				$('#gview_'+$.jgrid.jqID($t.p.id)).css('width',nwidth+'px');
				$($t.grid.bDiv).css('width',nwidth+'px');
				$($t.grid.hDiv).css('width',nwidth+'px');
				if($t.p.pager ) {$($t.p.pager).css('width',nwidth+'px');}
				if($t.p.toppager ) {$($t.p.toppager).css('width',nwidth+'px');}
				if($t.p.toolbar[0] === true){
					$($t.grid.uDiv).css('width',nwidth+'px');
					if($t.p.toolbar[1]=='both') {$($t.grid.ubDiv).css('width',nwidth+'px');}
				}
				if($t.p.footerrow) { $($t.grid.sDiv).css('width',nwidth+'px'); }
				if(shrink ===false && $t.p.forceFit === true) {$t.p.forceFit=false;}
				if(shrink===true) {
					$.each($t.p.colModel, function() {
						if(this.hidden===false){
							cw = this.widthOrg;
							initwidth += cw+brd;
							if(this.fixed) {
								gw += cw+brd;
							} else {
								vc++;
							}
							cl++;
						}
					});
					if(vc  === 0) { return; }
					$t.p.tblwidth = initwidth;
					aw = nwidth-brd*vc-gw;
					if(!isNaN($t.p.height)) {
						if($($t.grid.bDiv)[0].clientHeight < $($t.grid.bDiv)[0].scrollHeight || $t.rows.length === 1){
							hs = true;
							aw -= scw;
						}
					}
					initwidth =0;
					var cle = $t.grid.cols.length >0;
					$.each($t.p.colModel, function(i) {
						if(this.hidden === false && !this.fixed){
							cw = this.widthOrg;
							cw = Math.round(aw*cw/($t.p.tblwidth-brd*vc-gw));
							if (cw < 0) { return; }
							this.width =cw;
							initwidth += cw;
							$t.grid.headers[i].width=cw;
							$t.grid.headers[i].el.style.width=cw+'px';
							if($t.p.footerrow) { $t.grid.footers[i].style.width = cw+'px'; }
							if(cle) { $t.grid.cols[i].style.width = cw+'px'; }
							lvc = i;
						}
					});

					if (!lvc) { return; }

					cr =0;
					if (hs) {
						if(nwidth-gw-(initwidth+brd*vc) !== scw){
							cr = nwidth-gw-(initwidth+brd*vc)-scw;
						}
					} else if( Math.abs(nwidth-gw-(initwidth+brd*vc)) !== 1) {
						cr = nwidth-gw-(initwidth+brd*vc);
					}
					$t.p.colModel[lvc].width += cr;
					$t.p.tblwidth = initwidth+cr+brd*vc+gw;
					if($t.p.tblwidth > nwidth) {
						var delta = $t.p.tblwidth - parseInt(nwidth,10);
						$t.p.tblwidth = nwidth;
						cw = $t.p.colModel[lvc].width = $t.p.colModel[lvc].width-delta;
					} else {
						cw= $t.p.colModel[lvc].width;
					}
					$t.grid.headers[lvc].width = cw;
					$t.grid.headers[lvc].el.style.width=cw+'px';
					if(cle) { $t.grid.cols[lvc].style.width = cw+'px'; }
					if($t.p.footerrow) {
						$t.grid.footers[lvc].style.width = cw+'px';
					}
				}
				if($t.p.tblwidth) {
					$('table:first',$t.grid.bDiv).css('width',$t.p.tblwidth+'px');
					$('table:first',$t.grid.hDiv).css('width',$t.p.tblwidth+'px');
					$t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;
					if($t.p.footerrow) {
						$('table:first',$t.grid.sDiv).css('width',$t.p.tblwidth+'px');
					}
				}
			});
		},
		setGridHeight : function (nh) {
			return this.each(function (){
				var $t = this;
				if(!$t.grid) {return;}
				var bDiv = $($t.grid.bDiv);
				bDiv.css({height: nh+(isNaN(nh)?'':'px')});
				if($t.p.frozenColumns === true){
				//follow the original set height to use 16, better scrollbar width detection
					$('#'+$.jgrid.jqID($t.p.id)+'_frozen').parent().height(bDiv.height() - 16);
				}
				$t.p.height = nh;
				if ($t.p.scroll) { $t.grid.populateVisible(); }
			});
		},
		setCaption : function (newcap){
			return this.each(function(){
				this.p.caption=newcap;
				$('span.ui-jqgrid-title, span.ui-jqgrid-title-rtl',this.grid.cDiv).html(newcap);
				$(this.grid.cDiv).show();
			});
		},
		setLabel : function(colname, nData, prop, attrp ){
			return this.each(function(){
				var $t = this, pos=-1;
				if(!$t.grid) {return;}
				if(colname !== undefined) {
					$($t.p.colModel).each(function(i){
						if (this.name == colname) {
							pos = i;return false;
						}
					});
				} else { return; }
				if(pos>=0) {
					var thecol = $('tr.ui-jqgrid-labels th:eq('+pos+')',$t.grid.hDiv);
					if (nData){
						var ico = $('.s-ico',thecol);
						$('[id^=jqgh_]',thecol).empty().html(nData).append(ico);
						$t.p.colNames[pos] = nData;
					}
					if (prop) {
						if(typeof prop === 'string') {$(thecol).addClass(prop);} else {$(thecol).css(prop);}
					}
					if(typeof attrp === 'object') {$(thecol).attr(attrp);}
				}
			});
		},
		setCell : function(rowid,colname,nData,cssp,attrp, forceupd) {
			return this.each(function(){
				var $t = this, pos =-1,v, title;
				if(!$t.grid) {return;}
				if(isNaN(colname)) {
					$($t.p.colModel).each(function(i){
						if (this.name == colname) {
							pos = i;return false;
						}
					});
				} else {pos = parseInt(colname,10);}
				if(pos>=0) {
					var ind = $t.rows.namedItem(rowid);
					if (ind){
						var tcell = $('td:eq('+pos+')',ind);
						if(nData !== '' || forceupd === true) {
							v = $t.formatter(rowid, nData, pos,ind,'edit');
							title = $t.p.colModel[pos].title ? {'title':$.jgrid.stripHtml(v)} : {};
							if($t.p.treeGrid && $('.tree-wrap',$(tcell)).length>0) {
								$('span',$(tcell)).html(v).attr(title);
							} else {
								$(tcell).html(v).attr(title);
							}
							if($t.p.datatype == 'local') {
								var cm = $t.p.colModel[pos], index;
								nData = cm.formatter && typeof cm.formatter === 'string' && cm.formatter == 'date' ? $.unformat.date.call($t,nData,cm) : nData;
								index = $t.p._index[rowid];
								if(index !== undefined) {
									$t.p.data[index][cm.name] = nData;
								}
							}
						}
						if(typeof cssp === 'string'){
							$(tcell).addClass(cssp);
						} else if(cssp) {
							$(tcell).css(cssp);
						}
						if(typeof attrp === 'object') {$(tcell).attr(attrp);}
					}
				}
			});
		},
		getCell : function(rowid,col) {
			var ret = false;
			this.each(function(){
				var $t=this, pos=-1;
				if(!$t.grid) {return;}
				if(isNaN(col)) {
					$($t.p.colModel).each(function(i){
						if (this.name === col) {
							pos = i;return false;
						}
					});
				} else {pos = parseInt(col,10);}
				if(pos>=0) {
					var ind = $t.rows.namedItem(rowid);
					if(ind) {
						try {
							ret = $.unformat.call($t,$('td:eq('+pos+')',ind),{rowId:ind.id, colModel:$t.p.colModel[pos]},pos);
						} catch (e){
							ret = $.jgrid.htmlDecode($('td:eq('+pos+')',ind).html());
						}
					}
				}
			});
			return ret;
		},
		getCol : function (col, obj, mathopr) {
			var ret = [], val, sum=0, min, max, v;
			obj = typeof obj !== 'boolean' ? false : obj;
			if(mathopr === undefined) { mathopr = false; }
			this.each(function(){
				var $t=this, pos=-1;
				if(!$t.grid) {return;}
				if(isNaN(col)) {
					$($t.p.colModel).each(function(i){
						if (this.name === col) {
							pos = i;return false;
						}
					});
				} else {pos = parseInt(col,10);}
				if(pos>=0) {
					var ln = $t.rows.length, i =0;
					if (ln && ln>0){
						while(i<ln){
							if($($t.rows[i]).hasClass('jqgrow')) {
								try {
									val = $.unformat.call($t,$($t.rows[i].cells[pos]),{rowId:$t.rows[i].id, colModel:$t.p.colModel[pos]},pos);
								} catch (e) {
									val = $.jgrid.htmlDecode($t.rows[i].cells[pos].innerHTML);
								}
								if(mathopr) {
									v = parseFloat(val);
									sum += v;
									if (max === undefined) {max = min = v;}
									min = Math.min(min, v);
									max = Math.max(max, v);
								}
								else if(obj) { ret.push( {id:$t.rows[i].id,value:val} ); }
								else { ret.push( val ); }
							}
							i++;
						}
						if(mathopr) {
							switch(mathopr.toLowerCase()){
							case 'sum': ret =sum; break;
							case 'avg': ret = sum/ln; break;
							case 'count': ret = ln; break;
							case 'min': ret = min; break;
							case 'max': ret = max; break;
							}
						}
					}
				}
			});
			return ret;
		},
		clearGridData : function(clearfooter) {
			return this.each(function(){
				var $t = this;
				if(!$t.grid) {return;}
				if(typeof clearfooter !== 'boolean') { clearfooter = false; }
				if($t.p.deepempty) {$('#'+$.jgrid.jqID($t.p.id)+' tbody:first tr:gt(0)').remove();}
				else {
					var trf = $('#'+$.jgrid.jqID($t.p.id)+' tbody:first tr:first')[0];
					$('#'+$.jgrid.jqID($t.p.id)+' tbody:first').empty().append(trf);
				}
				if($t.p.footerrow && clearfooter) { $('.ui-jqgrid-ftable td',$t.grid.sDiv).html('&#160;'); }
				$t.p.selrow = null; $t.p.selarrrow= []; $t.p.savedRow = [];
				$t.p.records = 0;$t.p.page=1;$t.p.lastpage=0;$t.p.reccount=0;
				$t.p.data = []; $t.p._index = {};
				$t.updatepager(true,false);
			});
		},
		getInd : function(rowid,rc){
			var ret =false,rw;
			this.each(function(){
				rw = this.rows.namedItem(rowid);
				if(rw) {
					ret = rc===true ? rw: rw.rowIndex;
				}
			});
			return ret;
		},
		bindKeys : function( settings ){
			var o = $.extend({
				onEnter: null,
				onSpace: null,
				onLeftKey: null,
				onRightKey: null,
				scrollingRows : true
			},settings || {});
			return this.each(function(){
				var $t = this;
				if( !$('body').is('[role]') ){$('body').attr('role','application');}
				$t.p.scrollrows = o.scrollingRows;
				$($t).keydown(function(event){
					var target = $($t).find('tr[tabindex=0]')[0], id, r, mind,
						expanded = $t.p.treeReader.expanded_field;
					//check for arrow keys
					if(target) {
						mind = $t.p._index[target.id];
						if(event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 39 || event.keyCode === 40){
						// up key
							if(event.keyCode === 38 ){
								r = target.previousSibling;
								id = '';
								if(r) {
									if($(r).is(':hidden')) {
										while(r) {
											r = r.previousSibling;
											if(!$(r).is(':hidden') && $(r).hasClass('jqgrow')) {id = r.id;break;}
										}
									} else {
										id = r.id;
									}
								}
								$($t).jqGrid('setSelection', id, true, event);
								event.preventDefault();
							}
							//if key is down arrow
							if(event.keyCode === 40){
								r = target.nextSibling;
								id ='';
								if(r) {
									if($(r).is(':hidden')) {
										while(r) {
											r = r.nextSibling;
											if(!$(r).is(':hidden') && $(r).hasClass('jqgrow') ) {id = r.id;break;}
										}
									} else {
										id = r.id;
									}
								}
								$($t).jqGrid('setSelection', id, true, event);
								event.preventDefault();
							}
							// left
							if(event.keyCode === 37 ){
								if($t.p.treeGrid && $t.p.data[mind][expanded]) {
									$(target).find('div.treeclick').trigger('click');
								}
								$($t).triggerHandler('jqGridKeyLeft', [$t.p.selrow]);
								if($.isFunction(o.onLeftKey)) {
									o.onLeftKey.call($t, $t.p.selrow);
								}
							}
							// right
							if(event.keyCode === 39 ){
								if($t.p.treeGrid && !$t.p.data[mind][expanded]) {
									$(target).find('div.treeclick').trigger('click');
								}
								$($t).triggerHandler('jqGridKeyRight', [$t.p.selrow]);
								if($.isFunction(o.onRightKey)) {
									o.onRightKey.call($t, $t.p.selrow);
								}
							}
						}
						//check if enter was pressed on a grid or treegrid node
						else if( event.keyCode === 13 ){
							$($t).triggerHandler('jqGridKeyEnter', [$t.p.selrow]);
							if($.isFunction(o.onEnter)) {
								o.onEnter.call($t, $t.p.selrow);
							}
						} else if(event.keyCode === 32) {
							$($t).triggerHandler('jqGridKeySpace', [$t.p.selrow]);
							if($.isFunction(o.onSpace)) {
								o.onSpace.call($t, $t.p.selrow);
							}
						}
					}
				});
			});
		},
		unbindKeys : function(){
			return this.each(function(){
				$(this).unbind('keydown');
			});
		},
		getLocalRow : function (rowid) {
			var ret = false, ind;
			this.each(function(){
				if(rowid !== undefined) {
					ind = this.p._index[rowid];
					if(ind >= 0 ) {
						ret = this.p.data[ind];
					}
				}
			});
			return ret;
		}
	});
})(jQuery);
/*jshint eqeqeq:false */
/*global jQuery */
(function($){
/**
 * jqGrid extension for custom methods
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 *
 * Wildraid wildraid@mail.ru
 * Oleg Kiriljuk oleg.kiriljuk@ok-soft-gmbh.com
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
	'use strict';
	$.jgrid.extend({
		getColProp : function(colname){
			var ret ={}, $t = this[0];
			if ( !$t.grid ) { return false; }
			var cM = $t.p.colModel, i;
			for ( i=0;i<cM.length;i++ ) {
				if ( cM[i].name == colname ) {
					ret = cM[i];
					break;
				}
			}
			return ret;
		},
		setColProp : function(colname, obj){
		//do not set width will not work
			return this.each(function(){
				if ( this.grid ) {
					if ( obj ) {
						var cM = this.p.colModel, i;
						for ( i=0;i<cM.length;i++ ) {
							if ( cM[i].name == colname ) {
								$.extend(true, this.p.colModel[i],obj);
								break;
							}
						}
					}
				}
			});
		},
		sortGrid : function(colname,reload, sor){
			return this.each(function(){
				var $t=this,idx=-1,i;
				if ( !$t.grid ) { return;}
				if ( !colname ) { colname = $t.p.sortname; }
				for ( i=0;i<$t.p.colModel.length;i++ ) {
					if ( $t.p.colModel[i].index == colname || $t.p.colModel[i].name==colname ) {
						idx = i;
						break;
					}
				}
				if ( idx!=-1 ){
					var sort = $t.p.colModel[idx].sortable;
					if ( typeof sort !== 'boolean' ) { sort =  true; }
					if ( typeof reload !=='boolean' ) { reload = false; }
					if ( sort ) { $t.sortData('jqgh_'+$t.p.id+'_' + colname, idx, reload, sor); }
				}
			});
		},
		clearBeforeUnload : function () {
			return this.each(function(){
				var grid = this.grid;
				grid.emptyRows.call(this, true, true); // this work quick enough and reduce the size of memory leaks if we have someone

				//$(document).unbind("mouseup"); // TODO add namespace
				$(grid.hDiv).unbind('mousemove'); // TODO add namespace
				$(this).unbind();

				grid.dragEnd = null;
				grid.dragMove = null;
				grid.dragStart = null;
				grid.emptyRows = null;
				grid.populate = null;
				grid.populateVisible = null;
				grid.scrollGrid = null;
				grid.selectionPreserver = null;

				grid.bDiv = null;
				grid.cDiv = null;
				grid.hDiv = null;
				grid.cols = null;
				var i, l = grid.headers.length;
				for (i = 0; i < l; i++) {
					grid.headers[i].el = null;
				}

				this.formatCol = null;
				this.sortData = null;
				this.updatepager = null;
				this.refreshIndex = null;
				this.setHeadCheckBox = null;
				this.constructTr = null;
				this.formatter = null;
				this.addXmlData = null;
				this.addJSONData = null;
			});
		},
		GridDestroy : function () {
			return this.each(function(){
				if ( this.grid ) {
					if ( this.p.pager ) { // if not part of grid
						$(this.p.pager).remove();
					}
					try {
						$(this).jqGrid('clearBeforeUnload');
						$('#gbox_'+$.jgrid.jqID(this.id)).remove();
					} catch (_) {}
				}
			});
		},
		GridUnload : function(){
			return this.each(function(){
				if ( !this.grid ) {return;}
				var defgrid = {id: $(this).attr('id'),cl: $(this).attr('class')};
				if (this.p.pager) {
					$(this.p.pager).empty().removeClass('ui-state-default ui-jqgrid-pager corner-bottom');
				}
				var newtable = document.createElement('table');
				$(newtable).attr({id:defgrid.id});
				newtable.className = defgrid.cl;
				var gid = $.jgrid.jqID(this.id);
				$(newtable).removeClass('ui-jqgrid-btable');
				if( $(this.p.pager).parents('#gbox_'+gid).length === 1 ) {
					$(newtable).insertBefore('#gbox_'+gid).show();
					$(this.p.pager).insertBefore('#gbox_'+gid);
				} else {
					$(newtable).insertBefore('#gbox_'+gid).show();
				}
				$(this).jqGrid('clearBeforeUnload');
				$('#gbox_'+gid).remove();
			});
		},
		setGridState : function(state) {
			return this.each(function(){
				if ( !this.grid ) {return;}
				var $t = this;
				if(state == 'hidden'){
					$('.ui-jqgrid-bdiv, .ui-jqgrid-hdiv','#gview_'+$.jgrid.jqID($t.p.id)).slideUp('fast');
					if($t.p.pager) {$($t.p.pager).slideUp('fast');}
					if($t.p.toppager) {$($t.p.toppager).slideUp('fast');}
					if($t.p.toolbar[0]===true) {
						if( $t.p.toolbar[1]=='both') {
							$($t.grid.ubDiv).slideUp('fast');
						}
						$($t.grid.uDiv).slideUp('fast');
					}
					if($t.p.footerrow) { $('.ui-jqgrid-sdiv','#gbox_'+$.jgrid.jqID($t.p.id)).slideUp('fast'); }
					$('.ui-jqgrid-titlebar-close span',$t.grid.cDiv).removeClass('ui-icon-circle-triangle-n').addClass('ui-icon-circle-triangle-s');
					$t.p.gridstate = 'hidden';
				} else if(state=='visible') {
					$('.ui-jqgrid-hdiv, .ui-jqgrid-bdiv','#gview_'+$.jgrid.jqID($t.p.id)).slideDown('fast');
					if($t.p.pager) {$($t.p.pager).slideDown('fast');}
					if($t.p.toppager) {$($t.p.toppager).slideDown('fast');}
					if($t.p.toolbar[0]===true) {
						if( $t.p.toolbar[1]=='both') {
							$($t.grid.ubDiv).slideDown('fast');
						}
						$($t.grid.uDiv).slideDown('fast');
					}
					if($t.p.footerrow) { $('.ui-jqgrid-sdiv','#gbox_'+$.jgrid.jqID($t.p.id)).slideDown('fast'); }
					$('.ui-jqgrid-titlebar-close span',$t.grid.cDiv).removeClass('ui-icon-circle-triangle-s').addClass('ui-icon-circle-triangle-n');
					$t.p.gridstate = 'visible';
				}

			});
		},
		filterToolbar : function(p){
			p = $.extend({
				autosearch: true,
				searchOnEnter : true,
				beforeSearch: null,
				afterSearch: null,
				beforeClear: null,
				afterClear: null,
				searchurl : '',
				stringResult: false,
				groupOp: 'AND',
				defaultSearch : 'bw'
			},p  || {});
			return this.each(function(){
				var $t = this;
				if(this.ftoolbar) { return; }
				var triggerToolbar = function() {
					var sdata={}, j=0, v, nm, sopt={},so;
					$.each($t.p.colModel,function(){
						nm = this.index || this.name;
						so  = (this.searchoptions && this.searchoptions.sopt) ? this.searchoptions.sopt[0] : this.stype=='select'?  'eq' : p.defaultSearch;
						v = $('#gs_'+$.jgrid.jqID(this.name), (this.frozen===true && $t.p.frozenColumns === true) ?  $t.grid.fhDiv : $t.grid.hDiv).val();
						if(v) {
							sdata[nm] = v;
							sopt[nm] = so;
							j++;
						} else {
							try {
								delete $t.p.postData[nm];
							} catch (z) {}
						}
					});
					var sd =  j>0 ? true : false;
					if(p.stringResult === true || $t.p.datatype == 'local') {
						var ruleGroup = '{"groupOp":"' + p.groupOp + '","rules":[';
						var gi=0;
						$.each(sdata,function(i,n){
							if (gi > 0) {ruleGroup += ',';}
							ruleGroup += '{"field":"' + i + '",';
							ruleGroup += '"op":"' + sopt[i] + '",';
							n+='';
							ruleGroup += '"data":"' + n.replace(/\\/g,'\\\\').replace(/\"/g,'\\"') + '"}';
							gi++;
						});
						ruleGroup += ']}';
						$.extend($t.p.postData,{filters:ruleGroup});
						$.each(['searchField', 'searchString', 'searchOper'], function(i, n){
							if($t.p.postData.hasOwnProperty(n)) { delete $t.p.postData[n];}
						});
					} else {
						$.extend($t.p.postData,sdata);
					}
					var saveurl;
					if($t.p.searchurl) {
						saveurl = $t.p.url;
						$($t).jqGrid('setGridParam',{url:$t.p.searchurl});
					}
					var bsr = $($t).triggerHandler('jqGridToolbarBeforeSearch') === 'stop' ? true : false;
					if(!bsr && $.isFunction(p.beforeSearch)){bsr = p.beforeSearch.call($t);}
					if(!bsr) { $($t).jqGrid('setGridParam',{search:sd}).trigger('reloadGrid',[{page:1}]); }
					if(saveurl) {$($t).jqGrid('setGridParam',{url:saveurl});}
					$($t).triggerHandler('jqGridToolbarAfterSearch');
					if($.isFunction(p.afterSearch)){p.afterSearch.call($t);}
				};
				var clearToolbar = function(trigger){
					var sdata={}, j=0, nm;
					trigger = (typeof trigger !== 'boolean') ? true : trigger;
					$.each($t.p.colModel,function(){
						var v;
						if(this.searchoptions && this.searchoptions.defaultValue !== undefined) { v = this.searchoptions.defaultValue; }
						nm = this.index || this.name;
						switch (this.stype) {
						case 'select' :
							$('#gs_'+$.jgrid.jqID(this.name)+' option',(this.frozen===true && $t.p.frozenColumns === true) ?  $t.grid.fhDiv : $t.grid.hDiv).each(function (i){
								if(i===0) { this.selected = true; }
								if ($(this).val() == v) {
									this.selected = true;
									return false;
								}
							});
							if ( v !== undefined ) {
								// post the key and not the text
								sdata[nm] = v;
								j++;
							} else {
								try {
									delete $t.p.postData[nm];
								} catch(e) {}
							}
							break;
						case 'text':
							$('#gs_'+$.jgrid.jqID(this.name),(this.frozen===true && $t.p.frozenColumns === true) ?  $t.grid.fhDiv : $t.grid.hDiv).val(v);
							if(v !== undefined) {
								sdata[nm] = v;
								j++;
							} else {
								try {
									delete $t.p.postData[nm];
								} catch (y){}
							}
							break;
						}
					});
					var sd =  j>0 ? true : false;
					if(p.stringResult === true || $t.p.datatype == 'local') {
						var ruleGroup = '{"groupOp":"' + p.groupOp + '","rules":[';
						var gi=0;
						$.each(sdata,function(i,n){
							if (gi > 0) {ruleGroup += ',';}
							ruleGroup += '{"field":"' + i + '",';
							ruleGroup += '"op":"' + 'eq' + '",';
							n+='';
							ruleGroup += '"data":"' + n.replace(/\\/g,'\\\\').replace(/\"/g,'\\"') + '"}';
							gi++;
						});
						ruleGroup += ']}';
						$.extend($t.p.postData,{filters:ruleGroup});
						$.each(['searchField', 'searchString', 'searchOper'], function(i, n){
							if($t.p.postData.hasOwnProperty(n)) { delete $t.p.postData[n];}
						});
					} else {
						$.extend($t.p.postData,sdata);
					}
					var saveurl;
					if($t.p.searchurl) {
						saveurl = $t.p.url;
						$($t).jqGrid('setGridParam',{url:$t.p.searchurl});
					}
					var bcv = $($t).triggerHandler('jqGridToolbarBeforeClear') === 'stop' ? true : false;
					if(!bcv && $.isFunction(p.beforeClear)){bcv = p.beforeClear.call($t);}
					if(!bcv) {
						if(trigger) {
							$($t).jqGrid('setGridParam',{search:sd}).trigger('reloadGrid',[{page:1}]);
						}
					}
					if(saveurl) {$($t).jqGrid('setGridParam',{url:saveurl});}
					$($t).triggerHandler('jqGridToolbarAfterClear');
					if($.isFunction(p.afterClear)){p.afterClear();}
				};
				var toggleToolbar = function(){
					var trow = $('tr.ui-search-toolbar',$t.grid.hDiv),
						trow2 = $t.p.frozenColumns === true ?  $('tr.ui-search-toolbar',$t.grid.fhDiv) : false;
					if(trow.css('display')=='none') {
						trow.show();
						if(trow2) {
							trow2.show();
						}
					} else {
						trow.hide();
						if(trow2) {
							trow2.hide();
						}
					}
				};
				// create the row
				var tr = $('<tr class=\'ui-search-toolbar\' role=\'rowheader\'></tr>');
				var timeoutHnd;
				$.each($t.p.colModel,function(){
					var cm=this, thd , th, soptions,surl,self;
					th = $('<th role=\'columnheader\' class=\'ui-state-default ui-th-column ui-th-'+$t.p.direction+'\'></th>');
					thd = $('<div style=\'position:relative;height:100%;padding-right:0.3em;\'></div>');
					if(this.hidden===true) { $(th).css('display','none');}
					this.search = this.search === false ? false : true;
					if(this.stype === undefined) {this.stype='text';}
					soptions = $.extend({},this.searchoptions || {});
					if(this.search){
						switch (this.stype)
						{
						case 'select':
							surl = this.surl || soptions.dataUrl;
							if(surl) {
							// data returned should have already constructed html select
							// primitive jQuery load
								self = thd;
								$.ajax($.extend({
									url: surl,
									dataType: 'html',
									success: function(res) {
										if(soptions.buildSelect !== undefined) {
											var d = soptions.buildSelect(res);
											if (d) { $(self).append(d); }
										} else {
											$(self).append(res);
										}
										if(soptions.defaultValue !== undefined) { $('select',self).val(soptions.defaultValue); }
										$('select',self).attr({name:cm.index || cm.name, id: 'gs_'+cm.name});
										if(soptions.attr) {$('select',self).attr(soptions.attr);}
										$('select',self).css({width: '100%'});
										// preserve autoserch
										$.jgrid.bindEv( $('select',self)[0], soptions, $t);
										if(p.autosearch===true){
											$('select',self).change(function(){
												triggerToolbar();
												return false;
											});
										}
										res=null;
									}
								}, $.jgrid.ajaxOptions, $t.p.ajaxSelectOptions || {} ));
							} else {
								var oSv, sep, delim;
								if(cm.searchoptions) {
									oSv = cm.searchoptions.value === undefined ? '' : cm.searchoptions.value;
									sep = cm.searchoptions.separator === undefined ? ':' : cm.searchoptions.separator;
									delim = cm.searchoptions.delimiter === undefined ? ';' : cm.searchoptions.delimiter;
								} else if(cm.editoptions) {
									oSv = cm.editoptions.value === undefined ? '' : cm.editoptions.value;
									sep = cm.editoptions.separator === undefined ? ':' : cm.editoptions.separator;
									delim = cm.editoptions.delimiter === undefined ? ';' : cm.editoptions.delimiter;
								}
								if (oSv) {
									var elem = document.createElement('select');
									elem.style.width = '100%';
									$(elem).attr({name:cm.index || cm.name, id: 'gs_'+cm.name});
									var so, sv, ov, key, k;
									if(typeof oSv === 'string') {
										so = oSv.split(delim);
										for(k=0; k<so.length;k++){
											sv = so[k].split(sep);
											ov = document.createElement('option');
											ov.value = sv[0]; ov.innerHTML = sv[1];
											elem.appendChild(ov);
										}
									} else if(typeof oSv === 'object' ) {
										for (key in oSv) {
											if(oSv.hasOwnProperty(key)) {
												ov = document.createElement('option');
												ov.value = key; ov.innerHTML = oSv[key];
												elem.appendChild(ov);
											}
										}
									}
									if(soptions.defaultValue !== undefined) { $(elem).val(soptions.defaultValue); }
									if(soptions.attr) {$(elem).attr(soptions.attr);}
									$.jgrid.bindEv( elem , soptions, $t);
									$(thd).append(elem);
									if(p.autosearch===true){
										$(elem).change(function(){
											triggerToolbar();
											return false;
										});
									}
								}
							}
							break;
						case 'text':
							var df = soptions.defaultValue !== undefined ? soptions.defaultValue: '';
							$(thd).append('<input type=\'text\' style=\'width:95%;padding:0px;\' name=\''+(cm.index || cm.name)+'\' id=\'gs_'+cm.name+'\' value=\''+df+'\'/>');
							if(soptions.attr) {$('input',thd).attr(soptions.attr);}
							$.jgrid.bindEv( $('input',thd)[0], soptions, $t);
							if(p.autosearch===true){
								if(p.searchOnEnter) {
									$('input',thd).keypress(function(e){
										var key = e.charCode || e.keyCode || 0;
										if(key == 13){
											triggerToolbar();
											return false;
										}
										return this;
									});
								} else {
									$('input',thd).keydown(function(e){
										var key = e.which;
										switch (key) {
										case 13:
											return false;
										case 9 :
										case 16:
										case 37:
										case 38:
										case 39:
										case 40:
										case 27:
											break;
										default :
											if(timeoutHnd) { clearTimeout(timeoutHnd); }
											timeoutHnd = setTimeout(function(){triggerToolbar();},500);
										}
									});
								}
							}
							break;
						}
					}
					$(th).append(thd);
					$(tr).append(th);
				});
				$('table thead',$t.grid.hDiv).append(tr);
				this.ftoolbar = true;
				this.triggerToolbar = triggerToolbar;
				this.clearToolbar = clearToolbar;
				this.toggleToolbar = toggleToolbar;
			});
		},
		destroyFilterToolbar: function () {
			return this.each(function () {
				if (!this.ftoolbar) {
					return;
				}
				this.triggerToolbar = null;
				this.clearToolbar = null;
				this.toggleToolbar = null;
				this.ftoolbar = false;
				$(this.grid.hDiv).find('table thead tr.ui-search-toolbar').remove();
			});
		},
		destroyGroupHeader : function(nullHeader)
		{
			if(nullHeader === undefined) {
				nullHeader = true;
			}
			return this.each(function()
			{
				var $t = this, $tr, i, l, headers, $th, $resizing, grid = $t.grid,
					thead = $('table.ui-jqgrid-htable thead', grid.hDiv), cm = $t.p.colModel, hc;
				if(!grid) { return; }

				$(this).unbind('.setGroupHeaders');
				$tr = $('<tr>', {role: 'rowheader'}).addClass('ui-jqgrid-labels');
				headers = grid.headers;
				for (i = 0, l = headers.length; i < l; i++) {
					hc = cm[i].hidden ? 'none' : '';
					$th = $(headers[i].el)
						.width(headers[i].width)
						.css('display',hc);
					try {
						$th.removeAttr('rowSpan');
					} catch (rs) {
					//IE 6/7
						$th.attr('rowSpan',1);
					}
					$tr.append($th);
					$resizing = $th.children('span.ui-jqgrid-resize');
					if ($resizing.length>0) {// resizable column
						$resizing[0].style.height = '';
					}
					$th.children('div')[0].style.top = '';
				}
				$(thead).children('tr.ui-jqgrid-labels').remove();
				$(thead).prepend($tr);

				if(nullHeader === true) {
					$($t).jqGrid('setGridParam',{ 'groupHeader': null});
				}
			});
		},
		setGroupHeaders : function ( o ) {
			o = $.extend({
				useColSpanStyle :  false,
				groupHeaders: []
			},o  || {});
			return this.each(function(){
				this.p.groupHeader = o;
				var ts = this,
					i, cmi, skip = 0, $tr, $colHeader, th, $th, thStyle,
					iCol,
					cghi,
					//startColumnName,
					numberOfColumns,
					titleText,
					cVisibleColumns,
					colModel = ts.p.colModel,
					cml = colModel.length,
					ths = ts.grid.headers,
					$htable = $('table.ui-jqgrid-htable', ts.grid.hDiv),
					$trLabels = $htable.children('thead').children('tr.ui-jqgrid-labels:last').addClass('jqg-second-row-header'),
					$thead = $htable.children('thead'),
					$theadInTable,
					$firstHeaderRow = $htable.find('.jqg-first-row-header');
				if($firstHeaderRow[0] === undefined) {
					$firstHeaderRow = $('<tr>', {role: 'row', 'aria-hidden': 'true'}).addClass('jqg-first-row-header').css('height', 'auto');
				} else {
					$firstHeaderRow.empty();
				}
				var $firstRow,
					inColumnHeader = function (text, columnHeaders) {
						var length = columnHeaders.length, i;
						for (i = 0; i < length; i++) {
							if (columnHeaders[i].startColumnName === text) {
								return i;
							}
						}
						return -1;
					};

				$(ts).prepend($thead);
				$tr = $('<tr>', {role: 'rowheader'}).addClass('ui-jqgrid-labels jqg-third-row-header');
				for (i = 0; i < cml; i++) {
					th = ths[i].el;
					$th = $(th);
					cmi = colModel[i];
					// build the next cell for the first header row
					thStyle = { height: '0px', width: ths[i].width + 'px', display: (cmi.hidden ? 'none' : '')};
					$('<th>', {role: 'gridcell'}).css(thStyle).addClass('ui-first-th-'+ts.p.direction).appendTo($firstHeaderRow);

					th.style.width = ''; // remove unneeded style
					iCol = inColumnHeader(cmi.name, o.groupHeaders);
					if (iCol >= 0) {
						cghi = o.groupHeaders[iCol];
						numberOfColumns = cghi.numberOfColumns;
						titleText = cghi.titleText;

						// caclulate the number of visible columns from the next numberOfColumns columns
						for (cVisibleColumns = 0, iCol = 0; iCol < numberOfColumns && (i + iCol < cml); iCol++) {
							if (!colModel[i + iCol].hidden) {
								cVisibleColumns++;
							}
						}

						// The next numberOfColumns headers will be moved in the next row
						// in the current row will be placed the new column header with the titleText.
						// The text will be over the cVisibleColumns columns
						$colHeader = $('<th>').attr({role: 'columnheader'})
							.addClass('ui-state-default ui-th-column-header ui-th-'+ts.p.direction)
							.css({'height':'22px', 'border-top': '0px none'})
							.html(titleText);
						if(cVisibleColumns > 0) {
							$colHeader.attr('colspan', String(cVisibleColumns));
						}
						if (ts.p.headertitles) {
							$colHeader.attr('title', $colHeader.text());
						}
						// hide if not a visible cols
						if( cVisibleColumns === 0) {
							$colHeader.hide();
						}

						$th.before($colHeader); // insert new column header before the current
						$tr.append(th);         // move the current header in the next row

						// set the coumter of headers which will be moved in the next row
						skip = numberOfColumns - 1;
					} else {
						if (skip === 0) {
							if (o.useColSpanStyle) {
							// expand the header height to two rows
								$th.attr('rowspan', '2');
							} else {
								$('<th>', {role: 'columnheader'})
									.addClass('ui-state-default ui-th-column-header ui-th-'+ts.p.direction)
									.css({'display': cmi.hidden ? 'none' : '', 'border-top': '0px none'})
									.insertBefore($th);
								$tr.append(th);
							}
						} else {
						// move the header to the next row
						//$th.css({"padding-top": "2px", height: "19px"});
							$tr.append(th);
							skip--;
						}
					}
				}
				$theadInTable = $(ts).children('thead');
				$theadInTable.prepend($firstHeaderRow);
				$tr.insertAfter($trLabels);
				$htable.append($theadInTable);

				if (o.useColSpanStyle) {
				// Increase the height of resizing span of visible headers
					$htable.find('span.ui-jqgrid-resize').each(function () {
						var $parent = $(this).parent();
						if ($parent.is(':visible')) {
							this.style.cssText = 'height: ' + $parent.height() + 'px !important; cursor: col-resize;';
						}
					});

					// Set position of the sortable div (the main lable)
					// with the column header text to the middle of the cell.
					// One should not do this for hidden headers.
					$htable.find('div.ui-jqgrid-sortable').each(function () {
						var $ts = $(this), $parent = $ts.parent();
						if ($parent.is(':visible') && $parent.is(':has(span.ui-jqgrid-resize)')) {
							$ts.css('top', ($parent.height() - $ts.outerHeight()) / 2 + 'px');
						}
					});
				}

				$firstRow = $theadInTable.find('tr.jqg-first-row-header');
				$(ts).bind('jqGridResizeStop.setGroupHeaders', function (e, nw, idx) {
					$firstRow.find('th').eq(idx).width(nw);
				});
			});
		},
		setFrozenColumns : function () {
			return this.each(function() {
				if ( !this.grid ) {return;}
				var $t = this, cm = $t.p.colModel,i=0, len = cm.length, maxfrozen = -1, frozen= false;
				// TODO treeGrid and grouping  Support
				if($t.p.subGrid === true || $t.p.treeGrid === true || $t.p.cellEdit === true || $t.p.sortable || $t.p.scroll || $t.p.grouping )
				{
					return;
				}
				if($t.p.rownumbers) { i++; }
				if($t.p.multiselect) { i++; }

				// get the max index of frozen col
				while(i<len)
				{
				// from left, no breaking frozen
					if(cm[i].frozen === true)
					{
						frozen = true;
						maxfrozen = i;
					} else {
						break;
					}
					i++;
				}
				if( maxfrozen>=0 && frozen) {
					var top = $t.p.caption ? $($t.grid.cDiv).outerHeight() : 0,
						hth = $('.ui-jqgrid-htable','#gview_'+$.jgrid.jqID($t.p.id)).height();
					//headers
					if($t.p.toppager) {
						top = top + $($t.grid.topDiv).outerHeight();
					}
					if($t.p.toolbar[0] === true) {
						if($t.p.toolbar[1] != 'bottom') {
							top = top + $($t.grid.uDiv).outerHeight();
						}
					}
					$t.grid.fhDiv = $('<div style="position:absolute;left:0px;top:'+top+'px;height:'+hth+'px;" class="frozen-div ui-state-default ui-jqgrid-hdiv"></div>');
					$t.grid.fbDiv = $('<div style="position:absolute;left:0px;top:'+(parseInt(top,10)+parseInt(hth,10) + 1)+'px;overflow-y:hidden" class="frozen-bdiv ui-jqgrid-bdiv"></div>');
					$('#gview_'+$.jgrid.jqID($t.p.id)).append($t.grid.fhDiv);
					var htbl = $('.ui-jqgrid-htable','#gview_'+$.jgrid.jqID($t.p.id)).clone(true);
					// groupheader support - only if useColSpanstyle is false
					if($t.p.groupHeader) {
						$('tr.jqg-first-row-header, tr.jqg-third-row-header', htbl).each(function(){
							$('th:gt('+maxfrozen+')',this).remove();
						});
						var swapfroz = -1, fdel = -1;
						$('tr.jqg-second-row-header th', htbl).each(function(){
							var cs= parseInt($(this).attr('colspan'),10);
							if(cs) {
								swapfroz = swapfroz+cs;
								fdel++;
							}
							if(swapfroz === maxfrozen) {
								return false;
							}
						});
						if(swapfroz !== maxfrozen) {
							fdel = maxfrozen;
						}
						$('tr.jqg-second-row-header', htbl).each(function(){
							$('th:gt('+fdel+')',this).remove();
						});
					} else {
						$('tr',htbl).each(function(){
							$('th:gt('+maxfrozen+')',this).remove();
						});
					}
					$(htbl).width(1);
					// resizing stuff
					$($t.grid.fhDiv).append(htbl)
						.mousemove(function (e) {
							if($t.grid.resizing){ $t.grid.dragMove(e);return false; }
						});
					$($t).bind('jqGridResizeStop.setFrozenColumns', function (e, w, index) {
						var rhth = $('.ui-jqgrid-htable',$t.grid.fhDiv);
						$('th:eq('+index+')',rhth).width( w );
						var btd = $('.ui-jqgrid-btable',$t.grid.fbDiv);
						$('tr:first td:eq('+index+')',btd).width( w );
					});
					// sorting stuff
					$($t).bind('jqGridOnSortCol.setFrozenColumns', function (index, idxcol) {

						var previousSelectedTh = $('tr.ui-jqgrid-labels:last th:eq('+$t.p.lastsort+')',$t.grid.fhDiv), newSelectedTh = $('tr.ui-jqgrid-labels:last th:eq('+idxcol+')',$t.grid.fhDiv);

						$('span.ui-grid-ico-sort',previousSelectedTh).addClass('ui-state-disabled');
						$(previousSelectedTh).attr('aria-selected','false');
						$('span.ui-icon-'+$t.p.sortorder,newSelectedTh).removeClass('ui-state-disabled');
						$(newSelectedTh).attr('aria-selected','true');
						if(!$t.p.viewsortcols[0]) {
							if($t.p.lastsort != idxcol) {
								$('span.s-ico',previousSelectedTh).hide();
								$('span.s-ico',newSelectedTh).show();
							}
						}
					});

					// data stuff
					//TODO support for setRowData
					$('#gview_'+$.jgrid.jqID($t.p.id)).append($t.grid.fbDiv);
					$($t.grid.bDiv).scroll(function () {
						$($t.grid.fbDiv).scrollTop($(this).scrollTop());
					});
					if($t.p.hoverrows === true) {
						$('#'+$.jgrid.jqID($t.p.id)).unbind('mouseover').unbind('mouseout');
					}
					$($t).bind('jqGridAfterGridComplete.setFrozenColumns', function () {
						$('#'+$.jgrid.jqID($t.p.id)+'_frozen').remove();
						$($t.grid.fbDiv).height($($t.grid.bDiv).height()-16);
						var btbl = $('#'+$.jgrid.jqID($t.p.id)).clone(true);
						$('tr',btbl).each(function(){
							$('td:gt('+maxfrozen+')',this).remove();
						});

						$(btbl).width(1).attr('id',$t.p.id+'_frozen');
						$($t.grid.fbDiv).append(btbl);
						if($t.p.hoverrows === true) {
							$('tr.jqgrow', btbl).hover(
								function(){ $(this).addClass('ui-state-hover'); $('#'+$.jgrid.jqID(this.id), '#'+$.jgrid.jqID($t.p.id)).addClass('ui-state-hover'); },
								function(){ $(this).removeClass('ui-state-hover'); $('#'+$.jgrid.jqID(this.id), '#'+$.jgrid.jqID($t.p.id)).removeClass('ui-state-hover'); }
							);
							$('tr.jqgrow', '#'+$.jgrid.jqID($t.p.id)).hover(
								function(){ $(this).addClass('ui-state-hover'); $('#'+$.jgrid.jqID(this.id), '#'+$.jgrid.jqID($t.p.id)+'_frozen').addClass('ui-state-hover');},
								function(){ $(this).removeClass('ui-state-hover'); $('#'+$.jgrid.jqID(this.id), '#'+$.jgrid.jqID($t.p.id)+'_frozen').removeClass('ui-state-hover'); }
							);
						}
						btbl=null;
					});
					$t.p.frozenColumns = true;
				}
			});
		},
		destroyFrozenColumns :  function() {
			return this.each(function() {
				if ( !this.grid ) {return;}
				if(this.p.frozenColumns === true) {
					var $t = this;
					$($t.grid.fhDiv).remove();
					$($t.grid.fbDiv).remove();
					$t.grid.fhDiv = null; $t.grid.fbDiv=null;
					$(this).unbind('.setFrozenColumns');
					if($t.p.hoverrows === true) {
						var ptr;
						$('#'+$.jgrid.jqID($t.p.id)).bind('mouseover',function(e) {
							ptr = $(e.target).closest('tr.jqgrow');
							if($(ptr).attr('class') !== 'ui-subgrid') {
								$(ptr).addClass('ui-state-hover');
							}
						}).bind('mouseout',function(e) {
							ptr = $(e.target).closest('tr.jqgrow');
							$(ptr).removeClass('ui-state-hover');
						});
					}
					this.p.frozenColumns = false;
				}
			});
		}
	});
})(jQuery);
/*
 * jqModal - Minimalist Modaling with jQuery
 *   (http://dev.iceburg.net/jquery/jqmodal/)
 *
 * Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net>
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * $Version: 07/06/2008 +r13
 */
(function($) {
	$.fn.jqm=function(o){
		var p={
			overlay: 50,
			closeoverlay : true,
			overlayClass: 'jqmOverlay',
			closeClass: 'jqmClose',
			trigger: '.jqModal',
			ajax: F,
			ajaxText: '',
			target: F,
			modal: F,
			toTop: F,
			onShow: F,
			onHide: F,
			onLoad: F
		};
		return this.each(function(){if(this._jqm)return H[this._jqm].c=$.extend({},H[this._jqm].c,o);s++;this._jqm=s;
			H[s]={c:$.extend(p,$.jqm.params,o),a:F,w:$(this).addClass('jqmID'+s),s:s};
			if(p.trigger)$(this).jqmAddTrigger(p.trigger);
		});};

	$.fn.jqmAddClose=function(e){return hs(this,e,'jqmHide');};
	$.fn.jqmAddTrigger=function(e){return hs(this,e,'jqmShow');};
	$.fn.jqmShow=function(t){return this.each(function(){$.jqm.open(this._jqm,t);});};
	$.fn.jqmHide=function(t){return this.each(function(){$.jqm.close(this._jqm,t);});};

	$.jqm = {
		hash:{},
		open:function(s,t){var h=H[s],c=h.c,cc='.'+c.closeClass,z=(parseInt(h.w.css('z-index')));z=(z>0)?z:3000;var o=$('<div></div>').css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':z-1,opacity:c.overlay/100});if(h.a)return F;h.t=t;h.a=true;h.w.css('z-index',z);
			if(c.modal) {if(!A[0])setTimeout(function(){L('bind');},1);A.push(s);}
			else if(c.overlay > 0) {if(c.closeoverlay) h.w.jqmAddClose(o);}
			else o=F;

			h.o=(o)?o.addClass(c.overlayClass).prependTo('body'):F;

			if(c.ajax) {var r=c.target||h.w,u=c.ajax;r=(typeof r == 'string')?$(r,h.w):$(r);u=(u.substr(0,1) == '@')?$(t).attr(u.substring(1)):u;
				r.html(c.ajaxText).load(u,function(){if(c.onLoad)c.onLoad.call(this,h);if(cc)h.w.jqmAddClose($(cc,h.w));e(h);});}
			else if(cc)h.w.jqmAddClose($(cc,h.w));

			if(c.toTop&&h.o)h.w.before('<span id="jqmP'+h.w[0]._jqm+'"></span>').insertAfter(h.o);
			(c.onShow)?c.onShow(h):h.w.show();e(h);return F;
		},
		close:function(s){var h=H[s];if(!h.a)return F;h.a=F;
			if(A[0]){A.pop();if(!A[0])L('unbind');}
			if(h.c.toTop&&h.o)$('#jqmP'+h.w[0]._jqm).after(h.w).remove();
			if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return F;
		},
		params:{}};
	var s=0,H=$.jqm.hash,A=[],F=false,
		e=function(h){f(h);},
		f=function(h){try{$(':input:visible',h.w)[0].focus();}catch(_){}},
		L=function(t){$(document)[t]('keypress',m)[t]('keydown',m)[t]('mousedown',m);},
		m=function(e){var h=H[A[A.length-1]],r=(!$(e.target).parents('.jqmID'+h.s)[0]);if(r)f(h);return !r;},
		hs=function(w,t,c){return w.each(function(){var s=this._jqm;$(t).each(function() {
			if(!this[c]){this[c]=[];$(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in this[i])if(H[this[i][s]])H[this[i][s]].w[i](this);return F;});}this[c].push(s);});});};
})(jQuery);/*
 * jqDnR - Minimalistic Drag'n'Resize for jQuery.
 *
 * Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * $Version: 2007.08.19 +r2
 */

(function($){
	$.fn.jqDrag=function(h){return i(this,h,'d');};
	$.fn.jqResize=function(h,ar){return i(this,h,'r',ar);};
	$.jqDnR={
		dnr:{},
		e:0,
		drag:function(v){
			if(M.k == 'd'){E.css({left:M.X+v.pageX-M.pX,top:M.Y+v.pageY-M.pY});}
			else {
				E.css({width:Math.max(v.pageX-M.pX+M.W,0),height:Math.max(v.pageY-M.pY+M.H,0)});
				if(M1){E1.css({width:Math.max(v.pageX-M1.pX+M1.W,0),height:Math.max(v.pageY-M1.pY+M1.H,0)});}
			}
			return false;
		},
		stop:function(){
		//E.css('opacity',M.o);
			$(document).unbind('mousemove',J.drag).unbind('mouseup',J.stop);
		}
	};
	var J=$.jqDnR,M=J.dnr,E=J.e,E1,M1,
		i=function(e,h,k,aR){
			return e.each(function(){
				h=(h)?$(h,e):e;
				h.bind('mousedown',{e:e,k:k},function(v){
					var d=v.data,p={};E=d.e;E1 = aR ? $(aR) : false;
					// attempt utilization of dimensions plugin to fix IE issues
					if(E.css('position') != 'relative'){try{E.position(p);}catch(e){}}
					M={
						X:p.left||f('left')||0,
						Y:p.top||f('top')||0,
						W:f('width')||E[0].scrollWidth||0,
						H:f('height')||E[0].scrollHeight||0,
						pX:v.pageX,
						pY:v.pageY,
						k:d.k
						//o:E.css('opacity')
					};
					// also resize
					if(E1 && d.k != 'd'){
						M1={
							X:p.left||f1('left')||0,
							Y:p.top||f1('top')||0,
							W:E1[0].offsetWidth||f1('width')||0,
							H:E1[0].offsetHeight||f1('height')||0,
							pX:v.pageX,
							pY:v.pageY,
							k:d.k
						};
					} else {M1 = false;}
					//E.css({opacity:0.8});
					if($('input.hasDatepicker',E[0])[0]) {
						try {$('input.hasDatepicker',E[0]).datepicker('hide');}catch (dpe){}
					}
					$(document).mousemove($.jqDnR.drag).mouseup($.jqDnR.stop);
					return false;
				});
			});
		},
		f=function(k){return parseInt(E.css(k),10)||false;},
		f1=function(k){return parseInt(E1.css(k),10)||false;};
})(jQuery);/*
	The below work is licensed under Creative Commons GNU LGPL License.

	Original work:

	License:     http://creativecommons.org/licenses/LGPL/2.1/
	Author:      Stefan Goessner/2006
	Web:         http://goessner.net/

	Modifications made:

	Version:     0.9-p5
	Description: Restructured code, JSLint validated (no strict whitespaces),
	             added handling of empty arrays, empty strings, and int/floats values.
	Author:      Michael Schøler/2008-01-29
	Web:         http://michael.hinnerup.net/blog/2008/01/26/converting-json-to-xml-and-xml-to-json/

	Description: json2xml added support to convert functions as CDATA
	             so it will be easy to write characters that cause some problems when convert
	Author:      Tony Tomov
*/

/*global alert */
var xmlJsonClass = {
	// Param "xml": Element or document DOM node.
	// Param "tab": Tab or indent string for pretty output formatting omit or use empty string "" to supress.
	// Returns:     JSON string
	xml2json: function(xml, tab) {
		if (xml.nodeType === 9) {
			// document node
			xml = xml.documentElement;
		}
		var nws = this.removeWhite(xml);
		var obj = this.toObj(nws);
		var json = this.toJson(obj, xml.nodeName, '\t');
		return '{\n' + tab + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, '')) + '\n}';
	},

	// Param "o":   JavaScript object
	// Param "tab": tab or indent string for pretty output formatting omit or use empty string "" to supress.
	// Returns:     XML string
	json2xml: function(o, tab) {
		var toXml = function(v, name, ind) {
			var xml = '';
			var i, n;
			if (v instanceof Array) {
				if (v.length === 0) {
					xml += ind + '<'+name+'>__EMPTY_ARRAY_</'+name+'>\n';
				}
				else {
					for (i = 0, n = v.length; i < n; i += 1) {
						var sXml = ind + toXml(v[i], name, ind+'\t') + '\n';
						xml += sXml;
					}
				}
			}
			else if (typeof(v) === 'object') {
				var hasChild = false;
				xml += ind + '<' + name;
				var m;
				for (m in v) if (v.hasOwnProperty(m)) {
					if (m.charAt(0) === '@') {
						xml += ' ' + m.substr(1) + '="' + v[m].toString() + '"';
					}
					else {
						hasChild = true;
					}
				}
				xml += hasChild ? '>' : '/>';
				if (hasChild) {
					for (m in v) if (v.hasOwnProperty(m)) {
						if (m === '#text') {
							xml += v[m];
						}
						else if (m === '#cdata') {
							xml += '<![CDATA[' + v[m] + ']]>';
						}
						else if (m.charAt(0) !== '@') {
							xml += toXml(v[m], m, ind+'\t');
						}
					}
					xml += (xml.charAt(xml.length - 1) === '\n' ? ind : '') + '</' + name + '>';
				}
			}
			else if (typeof(v) === 'function') {
				xml += ind + '<' + name + '>' + '<![CDATA[' + v + ']]>' + '</' + name + '>';
			}
			else {
				if (v === undefined ) { v = ''; }
				if (v.toString() === '""' || v.toString().length === 0) {
					xml += ind + '<' + name + '>__EMPTY_STRING_</' + name + '>';
				}
				else {
					xml += ind + '<' + name + '>' + v.toString() + '</' + name + '>';
				}
			}
			return xml;
		};
		var xml = '';
		var m;
		for (m in o) if (o.hasOwnProperty(m)) {
			xml += toXml(o[m], m, '');
		}
		return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, '');
	},
	// Internal methods
	toObj: function(xml) {
		var o = {};
		var FuncTest = /function/i;
		if (xml.nodeType === 1) {
			// element node ..
			if (xml.attributes.length) {
				// element with attributes ..
				var i;
				for (i = 0; i < xml.attributes.length; i += 1) {
					o['@' + xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue || '').toString();
				}
			}
			if (xml.firstChild) {
				// element has child nodes ..
				var textChild = 0, cdataChild = 0, hasElementChild = false;
				var n;
				for (n = xml.firstChild; n; n = n.nextSibling) {
					if (n.nodeType === 1) {
						hasElementChild = true;
					}
					else if (n.nodeType === 3 && n.nodeValue.match(/[^ \f\n\r\t\v]/)) {
						// non-whitespace text
						textChild += 1;
					}
					else if (n.nodeType === 4) {
						// cdata section node
						cdataChild += 1;
					}
				}
				if (hasElementChild) {
					if (textChild < 2 && cdataChild < 2) {
						// structured element with evtl. a single text or/and cdata node ..
						this.removeWhite(xml);
						for (n = xml.firstChild; n; n = n.nextSibling) {
							if (n.nodeType === 3) {
								// text node
								o['#text'] = this.escape(n.nodeValue);
							}
							else if (n.nodeType === 4) {
								// cdata node
								if (FuncTest.test(n.nodeValue)) {
									o[n.nodeName] = [o[n.nodeName], n.nodeValue];
								} else {
									o['#cdata'] = this.escape(n.nodeValue);
								}
							}
							else if (o[n.nodeName]) {
								// multiple occurence of element ..
								if (o[n.nodeName] instanceof Array) {
									o[n.nodeName][o[n.nodeName].length] = this.toObj(n);
								}
								else {
									o[n.nodeName] = [o[n.nodeName], this.toObj(n)];
								}
							}
							else {
								// first occurence of element ..
								o[n.nodeName] = this.toObj(n);
							}
						}
					}
					else {
						// mixed content
						if (!xml.attributes.length) {
							o = this.escape(this.innerXml(xml));
						}
						else {
							o['#text'] = this.escape(this.innerXml(xml));
						}
					}
				}
				else if (textChild) {
					// pure text
					if (!xml.attributes.length) {
						o = this.escape(this.innerXml(xml));
						if (o === '__EMPTY_ARRAY_') {
							o = '[]';
						} else if (o === '__EMPTY_STRING_') {
							o = '';
						}
					}
					else {
						o['#text'] = this.escape(this.innerXml(xml));
					}
				}
				else if (cdataChild) {
					// cdata
					if (cdataChild > 1) {
						o = this.escape(this.innerXml(xml));
					}
					else {
						for (n = xml.firstChild; n; n = n.nextSibling) {
							if(FuncTest.test(xml.firstChild.nodeValue)) {
								o = xml.firstChild.nodeValue;
								break;
							} else {
								o['#cdata'] = this.escape(n.nodeValue);
							}
						}
					}
				}
			}
			if (!xml.attributes.length && !xml.firstChild) {
				o = null;
			}
		}
		else if (xml.nodeType === 9) {
			// document.node
			o = this.toObj(xml.documentElement);
		}
		else {
			alert('unhandled node type: ' + xml.nodeType);
		}
		return o;
	},
	toJson: function(o, name, ind, wellform) {
		if(wellform === undefined) wellform = true;
		var json = name ? ('"' + name + '"') : '', tab = '\t', newline = '\n';
		if(!wellform) {
			tab= ''; newline= '';
		}

		if (o === '[]') {
			json += (name ? ':[]' : '[]');
		}
		else if (o instanceof Array) {
			var n, i, ar=[];
			for (i = 0, n = o.length; i < n; i += 1) {
				ar[i] = this.toJson(o[i], '', ind + tab, wellform);
			}
			json += (name ? ':[' : '[') + (ar.length > 1 ? (newline + ind + tab + ar.join(','+newline + ind + tab) + newline + ind) : ar.join('')) + ']';
		}
		else if (o === null) {
			json += (name && ':') + 'null';
		}
		else if (typeof(o) === 'object') {
			var arr = [], m;
			for (m in o) {
				if (o.hasOwnProperty(m)) {
					arr[arr.length] = this.toJson(o[m], m, ind + tab, wellform);
				}
			}
			json += (name ? ':{' : '{') + (arr.length > 1 ? (newline + ind + tab + arr.join(','+newline + ind + tab) + newline + ind) : arr.join('')) + '}';
		}
		else if (typeof(o) === 'string') {
			/*
			var objRegExp  = /(^-?\d+\.?\d*$)/;
			var FuncTest = /function/i;
			var os = o.toString();
			if (objRegExp.test(os) || FuncTest.test(os) || os==="false" || os==="true") {
				// int or float
				json += (name && ":")  + "\"" +os + "\"";
			}
			else {
			*/
			json += (name && ':') + '"' + o.replace(/\\/g,'\\\\').replace(/\"/g,'\\"') + '"';
			//}
		}
		else {
			json += (name && ':') +  o.toString();
		}
		return json;
	},
	innerXml: function(node) {
		var s = '';
		if ('innerHTML' in node) {
			s = node.innerHTML;
		}
		else {
			var asXml = function(n) {
				var s = '', i;
				if (n.nodeType === 1) {
					s += '<' + n.nodeName;
					for (i = 0; i < n.attributes.length; i += 1) {
						s += ' ' + n.attributes[i].nodeName + '="' + (n.attributes[i].nodeValue || '').toString() + '"';
					}
					if (n.firstChild) {
						s += '>';
						for (var c = n.firstChild; c; c = c.nextSibling) {
							s += asXml(c);
						}
						s += '</' + n.nodeName + '>';
					}
					else {
						s += '/>';
					}
				}
				else if (n.nodeType === 3) {
					s += n.nodeValue;
				}
				else if (n.nodeType === 4) {
					s += '<![CDATA[' + n.nodeValue + ']]>';
				}
				return s;
			};
			for (var c = node.firstChild; c; c = c.nextSibling) {
				s += asXml(c);
			}
		}
		return s;
	},
	escape: function(txt) {
		return txt.replace(/[\\]/g, '\\\\').replace(/[\"]/g, '\\"').replace(/[\n]/g, '\\n').replace(/[\r]/g, '\\r');
	},
	removeWhite: function(e) {
		e.normalize();
		var n;
		for (n = e.firstChild; n; ) {
			if (n.nodeType === 3) {
				// text node
				if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) {
					// pure whitespace text node
					var nxt = n.nextSibling;
					e.removeChild(n);
					n = nxt;
				}
				else {
					n = n.nextSibling;
				}
			}
			else if (n.nodeType === 1) {
				// element node
				this.removeWhite(n);
				n = n.nextSibling;
			}
			else {
				// any other node
				n = n.nextSibling;
			}
		}
		return e;
	}
};/*
**
 * formatter for values but most of the values if for jqGrid
 * Some of this was inspired and based on how YUI does the table datagrid but in jQuery fashion
 * we are trying to keep it as light as possible
 * Joshua Burnett josh@9ci.com
 * http://www.greenbill.com
 *
 * Changes from Tony Tomov tony@trirand.com
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
 *
**/
/*jshint eqeqeq:false */
/*global jQuery */

(function($) {
	'use strict';
	$.fmatter = {};
	//opts can be id:row id for the row, rowdata:the data for the row, colmodel:the column model for this column
	//example {id:1234,}
	$.extend($.fmatter,{
		isBoolean : function(o) {
			return typeof o === 'boolean';
		},
		isObject : function(o) {
			return (o && (typeof o === 'object' || $.isFunction(o))) || false;
		},
		isString : function(o) {
			return typeof o === 'string';
		},
		isNumber : function(o) {
			return typeof o === 'number' && isFinite(o);
		},
		isNull : function(o) {
			return o === null;
		},
		isUndefined : function(o) {
			return o === undefined;
		},
		isValue : function (o) {
			return (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoolean(o));
		},
		isEmpty : function(o) {
			if(!this.isString(o) && this.isValue(o)) {
				return false;
			}
			if (!this.isValue(o)){
				return true;
			}
			o = $.trim(o).replace(/\&nbsp\;/ig,'').replace(/\&#160\;/ig,'');
			return o==='';
		}
	});
	$.fn.fmatter = function(formatType, cellval, opts, rwd, act) {
		// build main options before element iteration
		var v=cellval;
		opts = $.extend({}, $.jgrid.formatter, opts);

		try {
			v = $.fn.fmatter[formatType].call(this, cellval, opts, rwd, act);
		} catch(fe){}
		return v;
	};
	$.fmatter.util = {
		// Taken from YAHOO utils
		NumberFormat : function(nData,opts) {
			if(!$.fmatter.isNumber(nData)) {
				nData *= 1;
			}
			if($.fmatter.isNumber(nData)) {
				var bNegative = (nData < 0);
				var sOutput = String(nData);
				var sDecimalSeparator = opts.decimalSeparator || '.';
				var nDotIndex;
				if($.fmatter.isNumber(opts.decimalPlaces)) {
					// Round to the correct decimal place
					var nDecimalPlaces = opts.decimalPlaces;
					var nDecimal = Math.pow(10, nDecimalPlaces);
					sOutput = String(Math.round(nData*nDecimal)/nDecimal);
					nDotIndex = sOutput.lastIndexOf('.');
					if(nDecimalPlaces > 0) {
					// Add the decimal separator
						if(nDotIndex < 0) {
							sOutput += sDecimalSeparator;
							nDotIndex = sOutput.length-1;
						}
						// Replace the "."
						else if(sDecimalSeparator !== '.'){
							sOutput = sOutput.replace('.',sDecimalSeparator);
						}
						// Add missing zeros
						while((sOutput.length - 1 - nDotIndex) < nDecimalPlaces) {
							sOutput += '0';
						}
					}
				}
				if(opts.thousandsSeparator) {
					var sThousandsSeparator = opts.thousandsSeparator;
					nDotIndex = sOutput.lastIndexOf(sDecimalSeparator);
					nDotIndex = (nDotIndex > -1) ? nDotIndex : sOutput.length;
					var sNewOutput = sOutput.substring(nDotIndex);
					var nCount = -1, i;
					for (i=nDotIndex; i>0; i--) {
						nCount++;
						if ((nCount%3 === 0) && (i !== nDotIndex) && (!bNegative || (i > 1))) {
							sNewOutput = sThousandsSeparator + sNewOutput;
						}
						sNewOutput = sOutput.charAt(i-1) + sNewOutput;
					}
					sOutput = sNewOutput;
				}
				// Prepend prefix
				sOutput = (opts.prefix) ? opts.prefix + sOutput : sOutput;
				// Append suffix
				sOutput = (opts.suffix) ? sOutput + opts.suffix : sOutput;
				return sOutput;

			}
			return nData;
		},
		// Tony Tomov
		// PHP implementation. Sorry not all options are supported.
		// Feel free to add them if you want
		DateFormat : function (format, date, newformat, opts)  {
			var	token = /\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,
				timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
				timezoneClip = /[^-+\dA-Z]/g,
				msDateRegExp = new RegExp('^\/Date\\((([-+])?[0-9]+)(([-+])([0-9]{2})([0-9]{2}))?\\)\/$'),
				msMatch = ((typeof date === 'string') ? date.match(msDateRegExp): null),
				pad = function (value, length) {
					value = String(value);
					length = parseInt(length,10) || 2;
					while (value.length < length)  { value = '0' + value; }
					return value;
				},
				ts = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0, u:0},
				timestamp=0, dM, k,hl,
				dateFormat=['i18n'];
			// Internationalization strings
			dateFormat.i18n = {
				dayNames: opts.dayNames,
				monthNames: opts.monthNames
			};
			if( opts.masks.hasOwnProperty(format) ) { format = opts.masks[format]; }
			if( !isNaN( date - 0 ) && String(format).toLowerCase() == 'u') {
				//Unix timestamp
				timestamp = new Date( parseFloat(date)*1000 );
			} else if(date.constructor === Date) {
				timestamp = date;
				// Microsoft date format support
			} else if( msMatch !== null ) {
				timestamp = new Date(parseInt(msMatch[1], 10));
				if (msMatch[3]) {
					var offset = Number(msMatch[5]) * 60 + Number(msMatch[6]);
					offset *= ((msMatch[4] == '-') ? 1 : -1);
					offset -= timestamp.getTimezoneOffset();
					timestamp.setTime(Number(Number(timestamp) + (offset * 60 * 1000)));
				}
			} else {
				date = String(date).split(/[\\\/:_;.,\t\T\s-]/);
				format = format.split(/[\\\/:_;.,\t\T\s-]/);
				// parsing for month names
				for(k=0,hl=format.length;k<hl;k++){
					if(format[k] == 'M') {
						dM = $.inArray(date[k],dateFormat.i18n.monthNames);
						if(dM !== -1 && dM < 12){date[k] = dM+1;}
					}
					if(format[k] == 'F') {
						dM = $.inArray(date[k],dateFormat.i18n.monthNames);
						if(dM !== -1 && dM > 11){date[k] = dM+1-12;}
					}
					if(date[k]) {
						ts[format[k].toLowerCase()] = parseInt(date[k],10);
					}
				}
				if(ts.f) {ts.m = ts.f;}
				if( ts.m === 0 && ts.y === 0 && ts.d === 0) {
					return '&#160;' ;
				}
				ts.m = parseInt(ts.m,10)-1;
				var ty = ts.y;
				if (ty >= 70 && ty <= 99) {ts.y = 1900+ts.y;}
				else if (ty >=0 && ty <=69) {ts.y= 2000+ts.y;}
				timestamp = new Date(ts.y, ts.m, ts.d, ts.h, ts.i, ts.s, ts.u);
			}

			if( opts.masks.hasOwnProperty(newformat) )  {
				newformat = opts.masks[newformat];
			} else if ( !newformat ) {
				newformat = 'Y-m-d';
			}
			var
				G = timestamp.getHours(),
				i = timestamp.getMinutes(),
				j = timestamp.getDate(),
				n = timestamp.getMonth() + 1,
				o = timestamp.getTimezoneOffset(),
				s = timestamp.getSeconds(),
				u = timestamp.getMilliseconds(),
				w = timestamp.getDay(),
				Y = timestamp.getFullYear(),
				N = (w + 6) % 7 + 1,
				z = (new Date(Y, n - 1, j) - new Date(Y, 0, 1)) / 86400000,
				flags = {
					// Day
					d: pad(j),
					D: dateFormat.i18n.dayNames[w],
					j: j,
					l: dateFormat.i18n.dayNames[w + 7],
					N: N,
					S: opts.S(j),
					//j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th',
					w: w,
					z: z,
					// Week
					W: N < 5 ? Math.floor((z + N - 1) / 7) + 1 : Math.floor((z + N - 1) / 7) || ((new Date(Y - 1, 0, 1).getDay() + 6) % 7 < 4 ? 53 : 52),
					// Month
					F: dateFormat.i18n.monthNames[n - 1 + 12],
					m: pad(n),
					M: dateFormat.i18n.monthNames[n - 1],
					n: n,
					t: '?',
					// Year
					L: '?',
					o: '?',
					Y: Y,
					y: String(Y).substring(2),
					// Time
					a: G < 12 ? opts.AmPm[0] : opts.AmPm[1],
					A: G < 12 ? opts.AmPm[2] : opts.AmPm[3],
					B: '?',
					g: G % 12 || 12,
					G: G,
					h: pad(G % 12 || 12),
					H: pad(G),
					i: pad(i),
					s: pad(s),
					u: u,
					// Timezone
					e: '?',
					I: '?',
					O: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
					P: '?',
					T: (String(timestamp).match(timezone) || ['']).pop().replace(timezoneClip, ''),
					Z: '?',
					// Full Date/Time
					c: '?',
					r: '?',
					U: Math.floor(timestamp / 1000)
				};
			return newformat.replace(token, function ($0) {
				return flags.hasOwnProperty($0) ? flags[$0] : $0.substring(1);
			});
		}
	};
	$.fn.fmatter.defaultFormat = function(cellval, opts) {
		return ($.fmatter.isValue(cellval) && cellval!=='' ) ?  cellval : opts.defaultValue || '&#160;';
	};
	$.fn.fmatter.email = function(cellval, opts) {
		if(!$.fmatter.isEmpty(cellval)) {
			return '<a href="mailto:' + cellval + '">' + cellval + '</a>';
		}
		return $.fn.fmatter.defaultFormat(cellval,opts );
	};
	$.fn.fmatter.checkbox =function(cval, opts) {
		var op = $.extend({},opts.checkbox), ds;
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if(op.disabled===true) {ds = 'disabled="disabled"';} else {ds='';}
		if($.fmatter.isEmpty(cval) || $.fmatter.isUndefined(cval) ) {cval = $.fn.fmatter.defaultFormat(cval,op);}
		cval=String(cval);
		cval=cval.toLowerCase();
		var bchk = cval.search(/(false|0|no|n|off)/i)<0 ? ' checked=\'checked\' ' : '';
		return '<input type="checkbox" ' + bchk  + ' value="'+ cval+'" offval="no" '+ds+ '/>';
	};
	$.fn.fmatter.link = function(cellval, opts) {
		var op = {target:opts.target};
		var target = '';
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if(op.target) {target = 'target=' + op.target;}
		if(!$.fmatter.isEmpty(cellval)) {
			return '<a '+target+' href="' + cellval + '">' + cellval + '</a>';
		}
		return $.fn.fmatter.defaultFormat(cellval,opts);
	};
	$.fn.fmatter.showlink = function(cellval, opts) {
		var op = {baseLinkUrl: opts.baseLinkUrl,showAction:opts.showAction, addParam: opts.addParam || '', target: opts.target, idName: opts.idName},
			target = '', idUrl;
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if(op.target) {target = 'target=' + op.target;}
		idUrl = op.baseLinkUrl+op.showAction + '?'+ op.idName+'='+opts.rowId+op.addParam;
		if($.fmatter.isString(cellval) || $.fmatter.isNumber(cellval)) {	//add this one even if its blank string
			return '<a '+target+' href="' + idUrl + '">' + cellval + '</a>';
		}
		return $.fn.fmatter.defaultFormat(cellval,opts);
	};
	$.fn.fmatter.integer = function(cellval, opts) {
		var op = $.extend({},opts.integer);
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if($.fmatter.isEmpty(cellval)) {
			return op.defaultValue;
		}
		return $.fmatter.util.NumberFormat(cellval,op);
	};
	$.fn.fmatter.number = function (cellval, opts) {
		var op = $.extend({},opts.number);
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if($.fmatter.isEmpty(cellval)) {
			return op.defaultValue;
		}
		return $.fmatter.util.NumberFormat(cellval,op);
	};
	$.fn.fmatter.currency = function (cellval, opts) {
		var op = $.extend({},opts.currency);
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if($.fmatter.isEmpty(cellval)) {
			return op.defaultValue;
		}
		return $.fmatter.util.NumberFormat(cellval,op);
	};
	$.fn.fmatter.date = function (cellval, opts, rwd, act) {
		var op = $.extend({},opts.date);
		if(opts.colModel !== undefined && !$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend({},op,opts.colModel.formatoptions);
		}
		if(!op.reformatAfterEdit && act=='edit'){
			return $.fn.fmatter.defaultFormat(cellval, opts);
		}
		if(!$.fmatter.isEmpty(cellval)) {
			return $.fmatter.util.DateFormat(op.srcformat,cellval,op.newformat,op);
		}
		return $.fn.fmatter.defaultFormat(cellval, opts);
	};
	$.fn.fmatter.select = function (cellval,opts) {
		// jqGrid specific
		cellval = String(cellval);
		var oSelect = false, ret=[], sep, delim;
		if(!$.fmatter.isUndefined(opts.colModel.formatoptions)){
			oSelect= opts.colModel.formatoptions.value;
			sep = opts.colModel.formatoptions.separator === undefined ? ':' : opts.colModel.formatoptions.separator;
			delim = opts.colModel.formatoptions.delimiter === undefined ? ';' : opts.colModel.formatoptions.delimiter;
		} else if(!$.fmatter.isUndefined(opts.colModel.editoptions)){
			oSelect= opts.colModel.editoptions.value;
			sep = opts.colModel.editoptions.separator === undefined ? ':' : opts.colModel.editoptions.separator;
			delim = opts.colModel.editoptions.delimiter === undefined ? ';' : opts.colModel.editoptions.delimiter;
		}
		if (oSelect) {
			var	msl =  opts.colModel.editoptions.multiple === true ? true : false,
				scell = [], sv;
			if(msl) {scell = cellval.split(',');scell = $.map(scell,function(n){return $.trim(n);});}
			if ($.fmatter.isString(oSelect)) {
				// mybe here we can use some caching with care ????
				var so = oSelect.split(delim), j=0, i;
				for(i=0; i<so.length;i++){
					sv = so[i].split(sep);
					if(sv.length > 2 ) {
						sv[1] = $.map(sv,function(n,i){if(i>0) {return n;}}).join(sep);
					}
					if(msl) {
						if($.inArray(sv[0],scell)>-1) {
							ret[j] = sv[1];
							j++;
						}
					} else if($.trim(sv[0])==$.trim(cellval)) {
						ret[0] = sv[1];
						break;
					}
				}
			} else if($.fmatter.isObject(oSelect)) {
				// this is quicker
				if(msl) {
					ret = $.map(scell, function(n){
						return oSelect[n];
					});
				} else {
					ret[0] = oSelect[cellval] || '';
				}
			}
		}
		cellval = ret.join(', ');
		return  cellval === '' ? $.fn.fmatter.defaultFormat(cellval,opts) : cellval;
	};
	$.fn.fmatter.rowactions = function(act) {
		var $tr = $(this).closest('tr.jqgrow'),
			$actionsDiv = $(this).parent(),
			rid = $tr.attr('id'),
			$grid = $(this).closest('table.ui-jqgrid-btable'),
			$t = $grid[0],
			p = $t.p,
			cm = p.colModel[$.jgrid.getCellIndex(this)],
			op = {
				keys: false,
				onEdit: null,
				onSuccess: null,
				afterSave: null,
				onError: null,
				afterRestore: null,
				extraparam: {},
				url: null,
				restoreAfterError: true,
				mtype: 'POST',
				delOptions: {},
				editOptions: {}
			},
			saverow = function(rowid, res) {
				if($.isFunction(op.afterSave)) { op.afterSave.call($t, rowid, res); }
				$actionsDiv.find('div.ui-inline-edit,div.ui-inline-del').show();
				$actionsDiv.find('div.ui-inline-save,div.ui-inline-cancel').hide();
			},
			restorerow = function(rowid) {
				if($.isFunction(op.afterRestore)) { op.afterRestore.call($t, rowid); }
				$actionsDiv.find('div.ui-inline-edit,div.ui-inline-del').show();
				$actionsDiv.find('div.ui-inline-save,div.ui-inline-cancel').hide();
			};

		if (!$.fmatter.isUndefined(cm.formatoptions)) {
			op = $.extend(op,cm.formatoptions);
		}
		if (!$.fmatter.isUndefined(p.editOptions)) {
			op.editOptions = p.editOptions;
		}
		if (!$.fmatter.isUndefined(p.delOptions)) {
			op.delOptions = p.delOptions;
		}
		if ($tr.hasClass('jqgrid-new-row')){
			op.extraparam[p.prmNames.oper] = p.prmNames.addoper;
		}
		var actop = {
			keys: op.keys,
			oneditfunc: op.onEdit,
			successfunc: op.onSuccess,
			url: op.url,
			extraparam: op.extraparam,
			aftersavefunc: saverow,
			errorfunc: op.onError,
			afterrestorefunc: restorerow,
			restoreAfterError: op.restoreAfterError,
			mtype: op.mtype
		};
		switch(act)
		{
		case 'edit':
			$grid.jqGrid('editRow', rid, actop);
			$actionsDiv.find('div.ui-inline-edit,div.ui-inline-del').hide();
			$actionsDiv.find('div.ui-inline-save,div.ui-inline-cancel').show();
			$grid.triggerHandler('jqGridAfterGridComplete');
			break;
		case 'save':
			if ($grid.jqGrid('saveRow', rid, actop)) {
				$actionsDiv.find('div.ui-inline-edit,div.ui-inline-del').show();
				$actionsDiv.find('div.ui-inline-save,div.ui-inline-cancel').hide();
				$grid.triggerHandler('jqGridAfterGridComplete');
			}
			break;
		case 'cancel' :
			$grid.jqGrid('restoreRow', rid, restorerow);
			$actionsDiv.find('div.ui-inline-edit,div.ui-inline-del').show();
			$actionsDiv.find('div.ui-inline-save,div.ui-inline-cancel').hide();
			$grid.triggerHandler('jqGridAfterGridComplete');
			break;
		case 'del':
			$grid.jqGrid('delGridRow', rid, op.delOptions);
			break;
		case 'formedit':
			$grid.jqGrid('setSelection', rid);
			$grid.jqGrid('editGridRow', rid, op.editOptions);
			break;
		}
	};
	$.fn.fmatter.actions = function(cellval,opts) {
		var op={keys:false, editbutton:true, delbutton:true, editformbutton: false},
			rowid=opts.rowId, str='',ocl;
		if(!$.fmatter.isUndefined(opts.colModel.formatoptions)) {
			op = $.extend(op,opts.colModel.formatoptions);
		}
		if(rowid === undefined || $.fmatter.isEmpty(rowid)) {return '';}
		if(op.editformbutton){
			ocl = 'onclick=jQuery.fn.fmatter.rowactions.call(this,\'formedit\'); onmouseover=jQuery(this).addClass(\'ui-state-hover\'); onmouseout=jQuery(this).removeClass(\'ui-state-hover\'); ';
			str += '<div title=\''+$.jgrid.nav.edittitle+'\' style=\'float:left;cursor:pointer;\' class=\'ui-pg-div ui-inline-edit\' '+ocl+'><span class=\'ui-icon ui-icon-pencil\'></span></div>';
		} else if(op.editbutton){
			ocl = 'onclick=jQuery.fn.fmatter.rowactions.call(this,\'edit\'); onmouseover=jQuery(this).addClass(\'ui-state-hover\'); onmouseout=jQuery(this).removeClass(\'ui-state-hover\') ';
			str += '<div title=\''+$.jgrid.nav.edittitle+'\' style=\'float:left;cursor:pointer;\' class=\'ui-pg-div ui-inline-edit\' '+ocl+'><span class=\'ui-icon ui-icon-pencil\'></span></div>';
		}
		if(op.delbutton) {
			ocl = 'onclick=jQuery.fn.fmatter.rowactions.call(this,\'del\'); onmouseover=jQuery(this).addClass(\'ui-state-hover\'); onmouseout=jQuery(this).removeClass(\'ui-state-hover\'); ';
			str += '<div title=\''+$.jgrid.nav.deltitle+'\' style=\'float:left;margin-left:5px;\' class=\'ui-pg-div ui-inline-del\' '+ocl+'><span class=\'ui-icon ui-icon-trash\'></span></div>';
		}
		ocl = 'onclick=jQuery.fn.fmatter.rowactions.call(this,\'save\'); onmouseover=jQuery(this).addClass(\'ui-state-hover\'); onmouseout=jQuery(this).removeClass(\'ui-state-hover\'); ';
		str += '<div title=\''+$.jgrid.edit.bSubmit+'\' style=\'float:left;display:none\' class=\'ui-pg-div ui-inline-save\' '+ocl+'><span class=\'ui-icon ui-icon-disk\'></span></div>';
		ocl = 'onclick=jQuery.fn.fmatter.rowactions.call(this,\'cancel\'); onmouseover=jQuery(this).addClass(\'ui-state-hover\'); onmouseout=jQuery(this).removeClass(\'ui-state-hover\'); ';
		str += '<div title=\''+$.jgrid.edit.bCancel+'\' style=\'float:left;display:none;margin-left:5px;\' class=\'ui-pg-div ui-inline-cancel\' '+ocl+'><span class=\'ui-icon ui-icon-cancel\'></span></div>';
		return '<div style=\'margin-left:8px;\'>' + str + '</div>';
	};
	$.unformat = function (cellval,options,pos,cnt) {
		// specific for jqGrid only
		var ret, formatType = options.colModel.formatter,
			op =options.colModel.formatoptions || {}, sep,
			re = /([\.\*\_\'\(\)\{\}\+\?\\])/g,
			unformatFunc = options.colModel.unformat||($.fn.fmatter[formatType] && $.fn.fmatter[formatType].unformat);
		if(unformatFunc !== undefined && $.isFunction(unformatFunc) ) {
			ret = unformatFunc.call(this, $(cellval).text(), options, cellval);
		} else if(!$.fmatter.isUndefined(formatType) && $.fmatter.isString(formatType) ) {
			var opts = $.jgrid.formatter || {}, stripTag;
			switch(formatType) {
			case 'integer' :
				op = $.extend({},opts.integer,op);
				sep = op.thousandsSeparator.replace(re,'\\$1');
				stripTag = new RegExp(sep, 'g');
				ret = $(cellval).text().replace(stripTag,'');
				break;
			case 'number' :
				op = $.extend({},opts.number,op);
				sep = op.thousandsSeparator.replace(re,'\\$1');
				stripTag = new RegExp(sep, 'g');
				ret = $(cellval).text().replace(stripTag,'').replace(op.decimalSeparator,'.');
				break;
			case 'currency':
				op = $.extend({},opts.currency,op);
				sep = op.thousandsSeparator.replace(re,'\\$1');
				stripTag = new RegExp(sep, 'g');
				ret = $(cellval).text();
				if (op.prefix && op.prefix.length) {
					ret = ret.substr(op.prefix.length);
				}
				if (op.suffix && op.suffix.length) {
					ret = ret.substr(0, ret.length - op.suffix.length);
				}
				ret = ret.replace(stripTag,'').replace(op.decimalSeparator,'.');
				break;
			case 'checkbox':
				var cbv = (options.colModel.editoptions) ? options.colModel.editoptions.value.split(':') : ['Yes','No'];
				ret = $('input',cellval).is(':checked') ? cbv[0] : cbv[1];
				break;
			case 'select' :
				ret = $.unformat.select(cellval,options,pos,cnt);
				break;
			case 'actions':
				return '';
			default:
				ret= $(cellval).text();
			}
		}
		return ret !== undefined ? ret : cnt===true ? $(cellval).text() : $.jgrid.htmlDecode($(cellval).html());
	};
	$.unformat.select = function (cellval,options,pos,cnt) {
		// Spacial case when we have local data and perform a sort
		// cnt is set to true only in sortDataArray
		var ret = [];
		var cell = $(cellval).text();
		if(cnt===true) {return cell;}
		var op = $.extend({}, !$.fmatter.isUndefined(options.colModel.formatoptions) ? options.colModel.formatoptions: options.colModel.editoptions),
			sep = op.separator === undefined ? ':' : op.separator,
			delim = op.delimiter === undefined ? ';' : op.delimiter;

		if(op.value){
			var oSelect = op.value,
				msl =  op.multiple === true ? true : false,
				scell = [], sv;
			if(msl) {scell = cell.split(',');scell = $.map(scell,function(n){return $.trim(n);});}
			if ($.fmatter.isString(oSelect)) {
				var so = oSelect.split(delim), j=0, i;
				for(i=0; i<so.length;i++){
					sv = so[i].split(sep);
					if(sv.length > 2 ) {
						sv[1] = $.map(sv,function(n,i){if(i>0) {return n;}}).join(sep);
					}
					if(msl) {
						if($.inArray(sv[1],scell)>-1) {
							ret[j] = sv[0];
							j++;
						}
					} else if($.trim(sv[1])==$.trim(cell)) {
						ret[0] = sv[0];
						break;
					}
				}
			} else if($.fmatter.isObject(oSelect) || $.isArray(oSelect) ){
				if(!msl) {scell[0] =  cell;}
				ret = $.map(scell, function(n){
					var rv;
					$.each(oSelect, function(i,val){
						if (val == n) {
							rv = i;
							return false;
						}
					});
					if( rv !== undefined ) {return rv;}
				});
			}
			return ret.join(', ');
		}
		return cell || '';
	};
	$.unformat.date = function (cellval, opts) {
		var op = $.jgrid.formatter.date || {};
		if(!$.fmatter.isUndefined(opts.formatoptions)) {
			op = $.extend({},op,opts.formatoptions);
		}
		if(!$.fmatter.isEmpty(cellval)) {
			return $.fmatter.util.DateFormat(op.newformat,cellval,op.srcformat,op);
		}
		return $.fn.fmatter.defaultFormat(cellval, opts);
	};
})(jQuery);
/*jshint eqeqeq:false */
/*global jQuery */
(function($){
/*
 * jqGrid common function
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
*/
	'use strict';
	$.extend($.jgrid,{
		// Modal functions
		showModal : function(h) {
			h.w.show();
		},
		closeModal : function(h) {
			h.w.hide().attr('aria-hidden','true');
			if(h.o) {h.o.remove();}
		},
		hideModal : function (selector,o) {
			o = $.extend({jqm : true, gb :''}, o || {});
			if(o.onClose) {
				var oncret = o.gb && typeof o.gb === 'string' && o.gb.substr(0,6) === '#gbox_' ? o.onClose.call($('#' + o.gb.substr(6))[0], selector) : o.onClose(selector);
				if (typeof oncret === 'boolean'  && !oncret ) { return; }
			}
			if ($.fn.jqm && o.jqm === true) {
				$(selector).attr('aria-hidden','true').jqmHide();
			} else {
				if(o.gb !== '') {
					try {$('.jqgrid-overlay:first',o.gb).hide();} catch (e){}
				}
				$(selector).hide().attr('aria-hidden','true');
			}
		},
		//Helper functions
		findPos : function(obj) {
			var curleft = 0, curtop = 0;
			if (obj.offsetParent) {
				do {
					curleft += obj.offsetLeft;
					curtop += obj.offsetTop;
				} while (obj = obj.offsetParent);
			//do not change obj == obj.offsetParent
			}
			return [curleft,curtop];
		},
		createModal : function(aIDs, content, p, insertSelector, posSelector, appendsel, css) {
			p = $.extend(true, {}, $.jgrid.jqModal || {}, p);
			var mw  = document.createElement('div'), rtlsup, self = this;
			css = $.extend({}, css || {});
			rtlsup = $(p.gbox).attr('dir') == 'rtl' ? true : false;
			mw.className= 'ui-widget ui-widget-content ui-corner-all ui-jqdialog';
			mw.id = aIDs.themodal;
			var mh = document.createElement('div');
			mh.className = 'ui-jqdialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';
			mh.id = aIDs.modalhead;
			$(mh).append('<span class=\'ui-jqdialog-title\'>'+p.caption+'</span>');
			var ahr= $('<a href=\'javascript:void(0)\' class=\'ui-jqdialog-titlebar-close ui-corner-all\'></a>')
				.hover(function(){ahr.addClass('ui-state-hover');},
					function(){ahr.removeClass('ui-state-hover');})
				.append('<span class=\'ui-icon ui-icon-closethick\'></span>');
			$(mh).append(ahr);
			if(rtlsup) {
				mw.dir = 'rtl';
				$('.ui-jqdialog-title',mh).css('float','right');
				$('.ui-jqdialog-titlebar-close',mh).css('left',0.3+'em');
			} else {
				mw.dir = 'ltr';
				$('.ui-jqdialog-title',mh).css('float','left');
				$('.ui-jqdialog-titlebar-close',mh).css('right',0.3+'em');
			}
			var mc = document.createElement('div');
			$(mc).addClass('ui-jqdialog-content ui-widget-content').attr('id',aIDs.modalcontent);
			$(mc).append(content);
			mw.appendChild(mc);
			$(mw).prepend(mh);
			if(appendsel===true) { $('body').append(mw); } //append as first child in body -for alert dialog
			else if (typeof appendsel === 'string') {
				$(appendsel).append(mw);
			} else {$(mw).insertBefore(insertSelector);}
			$(mw).css(css);
			if(p.jqModal === undefined) {p.jqModal = true;} // internal use
			var coord = {};
			if ( $.fn.jqm && p.jqModal === true) {
				if(p.left ===0 && p.top===0 && p.overlay) {
					var pos = [];
					pos = $.jgrid.findPos(posSelector);
					p.left = pos[0] + 4;
					p.top = pos[1] + 4;
				}
				coord.top = p.top+'px';
				coord.left = p.left;
			} else if(p.left !==0 || p.top!==0) {
				coord.left = p.left;
				coord.top = p.top+'px';
			}
			$('a.ui-jqdialog-titlebar-close',mh).click(function(){
				var oncm = $('#'+$.jgrid.jqID(aIDs.themodal)).data('onClose') || p.onClose;
				var gboxclose = $('#'+$.jgrid.jqID(aIDs.themodal)).data('gbox') || p.gbox;
				self.hideModal('#'+$.jgrid.jqID(aIDs.themodal),{gb:gboxclose,jqm:p.jqModal,onClose:oncm});
				return false;
			});
			if (p.width === 0 || !p.width) {p.width = 300;}
			if(p.height === 0 || !p.height) {p.height =200;}
			if(!p.zIndex) {
				var parentZ = $(insertSelector).parents('*[role=dialog]').filter(':first').css('z-index');
				if(parentZ) {
					p.zIndex = parseInt(parentZ,10)+2;
				} else {
					p.zIndex = 950;
				}
			}
			var rtlt = 0;
			if( rtlsup && coord.left && !appendsel) {
				rtlt = $(p.gbox).width()- (!isNaN(p.width) ? parseInt(p.width,10) :0) - 8; // to do
				// just in case
				coord.left = parseInt(coord.left,10) + parseInt(rtlt,10);
			}
			if(coord.left) { coord.left += 'px'; }
			$(mw).css($.extend({
				width: isNaN(p.width) ? 'auto': p.width+'px',
				height:isNaN(p.height) ? 'auto' : p.height + 'px',
				zIndex:p.zIndex,
				overflow: 'hidden'
			},coord))
				.attr({tabIndex: '-1','role':'dialog','aria-labelledby':aIDs.modalhead,'aria-hidden':'true'});
			if(p.drag === undefined) { p.drag=true;}
			if(p.resize === undefined) {p.resize=true;}
			if (p.drag) {
				$(mh).css('cursor','move');
				if($.fn.jqDrag) {
					$(mw).jqDrag(mh);
				} else {
					try {
						$(mw).draggable({handle: $('#'+$.jgrid.jqID(mh.id))});
					} catch (e) {}
				}
			}
			if(p.resize) {
				if($.fn.jqResize) {
					$(mw).append('<div class=\'jqResize ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\'></div>');
					$('#'+$.jgrid.jqID(aIDs.themodal)).jqResize('.jqResize',aIDs.scrollelm ? '#'+$.jgrid.jqID(aIDs.scrollelm) : false);
				} else {
					try {
						$(mw).resizable({handles: 'se, sw',alsoResize: aIDs.scrollelm ? '#'+$.jgrid.jqID(aIDs.scrollelm) : false});
					} catch (r) {}
				}
			}
			if(p.closeOnEscape === true){
				$(mw).keydown( function( e ) {
					if( e.which == 27 ) {
						var cone = $('#'+$.jgrid.jqID(aIDs.themodal)).data('onClose') || p.onClose;
						self.hideModal('#'+$.jgrid.jqID(aIDs.themodal),{gb:p.gbox,jqm:p.jqModal,onClose: cone});
					}
				});
			}
		},
		viewModal : function (selector,o){
			o = $.extend({
				toTop: true,
				overlay: 10,
				modal: false,
				overlayClass : 'ui-widget-overlay',
				onShow: $.jgrid.showModal,
				onHide: $.jgrid.closeModal,
				gbox: '',
				jqm : true,
				jqM : true
			}, o || {});
			if ($.fn.jqm && o.jqm === true) {
				if(o.jqM) { $(selector).attr('aria-hidden','false').jqm(o).jqmShow(); }
				else {$(selector).attr('aria-hidden','false').jqmShow();}
			} else {
				if(o.gbox !== '') {
					$('.jqgrid-overlay:first',o.gbox).show();
					$(selector).data('gbox',o.gbox);
				}
				$(selector).show().attr('aria-hidden','false');
				try{$(':input:visible',selector)[0].focus();}catch(_){}
			}
		},
		info_dialog : function(caption, content,c_b, modalopt) {
			var mopt = {
				width:290,
				height:'auto',
				dataheight: 'auto',
				drag: true,
				resize: false,
				left:250,
				top:170,
				zIndex : 1000,
				jqModal : true,
				modal : false,
				closeOnEscape : true,
				align: 'center',
				buttonalign : 'center',
				buttons : []
				// {text:'textbutt', id:"buttid", onClick : function(){...}}
				// if the id is not provided we set it like info_button_+ the index in the array - i.e info_button_0,info_button_1...
			};
			$.extend(true, mopt, $.jgrid.jqModal || {}, {caption:'<b>'+caption+'</b>'}, modalopt || {});
			var jm = mopt.jqModal, self = this;
			if($.fn.jqm && !jm) { jm = false; }
			// in case there is no jqModal
			var buttstr ='', i;
			if(mopt.buttons.length > 0) {
				for(i=0;i<mopt.buttons.length;i++) {
					if(mopt.buttons[i].id === undefined) { mopt.buttons[i].id = 'info_button_'+i; }
					buttstr += '<a href=\'javascript:void(0)\' id=\''+mopt.buttons[i].id+'\' class=\'fm-button ui-state-default ui-corner-all\'>'+mopt.buttons[i].text+'</a>';
				}
			}
			var dh = isNaN(mopt.dataheight) ? mopt.dataheight : mopt.dataheight+'px',
				cn = 'text-align:'+mopt.align+';';
			var cnt = '<div id=\'info_id\'>';
			cnt += '<div id=\'infocnt\' style=\'margin:0px;padding-bottom:1em;width:100%;overflow:auto;position:relative;height:'+dh+';'+cn+'\'>'+content+'</div>';
			cnt += c_b ? '<div class=\'ui-widget-content ui-helper-clearfix\' style=\'text-align:'+mopt.buttonalign+';padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;\'><a href=\'javascript:void(0)\' id=\'closedialog\' class=\'fm-button ui-state-default ui-corner-all\'>'+c_b+'</a>'+buttstr+'</div>' :
				buttstr !== ''  ? '<div class=\'ui-widget-content ui-helper-clearfix\' style=\'text-align:'+mopt.buttonalign+';padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;\'>'+buttstr+'</div>' : '';
			cnt += '</div>';

			try {
				if($('#info_dialog').attr('aria-hidden') == 'false') {
					$.jgrid.hideModal('#info_dialog',{jqm:jm});
				}
				$('#info_dialog').remove();
			} catch (e){}
			$.jgrid.createModal({
				themodal:'info_dialog',
				modalhead:'info_head',
				modalcontent:'info_content',
				scrollelm: 'infocnt'},
			cnt,
			mopt,
			'','',true
			);
			// attach onclick after inserting into the dom
			if(buttstr) {
				$.each(mopt.buttons,function(i){
					$('#'+$.jgrid.jqID(this.id),'#info_id').bind('click',function(){mopt.buttons[i].onClick.call($('#info_dialog')); return false;});
				});
			}
			$('#closedialog', '#info_id').click(function(){
				self.hideModal('#info_dialog',{jqm:jm});
				return false;
			});
			$('.fm-button','#info_dialog').hover(
				function(){$(this).addClass('ui-state-hover');},
				function(){$(this).removeClass('ui-state-hover');}
			);
			if($.isFunction(mopt.beforeOpen) ) { mopt.beforeOpen(); }
			$.jgrid.viewModal('#info_dialog',{
				onHide: function(h) {
					h.w.hide().remove();
					if(h.o) { h.o.remove(); }
				},
				modal :mopt.modal,
				jqm:jm
			});
			if($.isFunction(mopt.afterOpen) ) { mopt.afterOpen(); }
			try{ $('#info_dialog').focus();} catch (m){}
		},
		bindEv: function  (el, opt, $t) {
			if($.isFunction(opt.dataInit)) {
				opt.dataInit.call($t,el);
			}
			if(opt.dataEvents) {
				$.each(opt.dataEvents, function() {
					if (this.data !== undefined) {
						$(el).bind(this.type, this.data, this.fn);
					} else {
						$(el).bind(this.type, this.fn);
					}
				});
			}
		},
		// Form Functions
		createEl : function(eltype,options,vl,autowidth, ajaxso) {
			var elem = '', $t = this;
			function setAttributes(elm, atr, exl ) {
				var exclude = ['dataInit','dataEvents','dataUrl', 'buildSelect','sopt', 'searchhidden', 'defaultValue', 'attr', 'custom_element', 'custom_value'];
				if(exl !== undefined && $.isArray(exl)) {
					$.merge(exclude, exl);
				}
				$.each(atr, function(key, value){
					if($.inArray(key, exclude) === -1) {
						$(elm).attr(key,value);
					}
				});
				if(!atr.hasOwnProperty('id')) {
					$(elm).attr('id', $.jgrid.randId());
				}
			}
			switch (eltype)
			{
			case 'textarea' :
				elem = document.createElement('textarea');
				if(autowidth) {
					if(!options.cols) { $(elem).css({width:'98%'});}
				} else if (!options.cols) { options.cols = 20; }
				if(!options.rows) { options.rows = 2; }
				if(vl=='&nbsp;' || vl=='&#160;' || (vl.length==1 && vl.charCodeAt(0)==160)) {vl='';}
				elem.value = vl;
				setAttributes(elem, options);
				$(elem).attr({'role':'textbox','multiline':'true'});
				break;
			case 'checkbox' : //what code for simple checkbox
				elem = document.createElement('input');
				elem.type = 'checkbox';
				if( !options.value ) {
					var vl1 = vl.toLowerCase();
					if(vl1.search(/(false|0|no|off|undefined)/i)<0 && vl1!=='') {
						elem.checked=true;
						elem.defaultChecked=true;
						elem.value = vl;
					} else {
						elem.value = 'on';
					}
					$(elem).attr('offval','off');
				} else {
					var cbval = options.value.split(':');
					if(vl === cbval[0]) {
						elem.checked=true;
						elem.defaultChecked=true;
					}
					elem.value = cbval[0];
					$(elem).attr('offval',cbval[1]);
				}
				setAttributes(elem, options, ['value']);
				$(elem).attr('role','checkbox');
				break;
			case 'select' :
				elem = document.createElement('select');
				elem.setAttribute('role','select');
				var msl, ovm = [];
				if(options.multiple===true) {
					msl = true;
					elem.multiple='multiple';
					$(elem).attr('aria-multiselectable','true');
				} else { msl = false; }
				if(options.dataUrl !== undefined) {
					var rowid = options.name ? String(options.id).substring(0, String(options.id).length - String(options.name).length - 1) : String(options.id),
						postData = options.postData || ajaxso.postData;

					if ($t.p && $t.p.idPrefix) {
						rowid = $.jgrid.stripPref($t.p.idPrefix, rowid);
					} else {
						postData = undefined; // don't use postData for searching from jqFilter. One can implement the feature in the future if required.
					}
					$.ajax($.extend({
						url: options.dataUrl,
						type : 'GET',
						dataType: 'html',
						data: $.isFunction(postData) ? postData.call($t, rowid, vl, String(options.name)) : postData,
						context: {elem:elem, options:options, vl:vl},
						success: function(data){
							var a,	ovm = [], elem = this.elem, vl = this.vl,
								options = $.extend({},this.options),
								msl = options.multiple===true;
							if($.isFunction(options.buildSelect)) {
								var b = options.buildSelect.call($t,data);
								a = $(b).html();
							} else {
								a = $(data).html();
							}
							if(a) {
								$(elem).append(a);
								setAttributes(elem, options);
								if(options.size === undefined) { options.size =  msl ? 3 : 1;}
								if(msl) {
									ovm = vl.split(',');
									ovm = $.map(ovm,function(n){return $.trim(n);});
								} else {
									ovm[0] = $.trim(vl);
								}
								//$(elem).attr(options);
								setTimeout(function(){
									$('option',elem).each(function(i){
										//if(i===0) { this.selected = ""; }
										// fix IE8/IE7 problem with selecting of the first item on multiple=true
										if (i === 0 && elem.multiple) { this.selected = false; }
										$(this).attr('role','option');
										if($.inArray($.trim($(this).text()),ovm) > -1 || $.inArray($.trim($(this).val()),ovm) > -1 ) {
											this.selected= 'selected';
										}
									});
								},0);
							}
						}
					},ajaxso || {}));
				} else if(options.value) {
					var i;
					if(options.size === undefined) {
						options.size = msl ? 3 : 1;
					}
					if(msl) {
						ovm = vl.split(',');
						ovm = $.map(ovm,function(n){return $.trim(n);});
					}
					if(typeof options.value === 'function') { options.value = options.value(); }
					var so,sv, ov,
						sep = options.separator === undefined ? ':' : options.separator,
						delim = options.delimiter === undefined ? ';' : options.delimiter;
					if(typeof options.value === 'string') {
						so = options.value.split(delim);
						for(i=0; i<so.length;i++){
							sv = so[i].split(sep);
							if(sv.length > 2 ) {
								sv[1] = $.map(sv,function(n,ii){if(ii>0) { return n;} }).join(sep);
							}
							ov = document.createElement('option');
							ov.setAttribute('role','option');
							ov.value = sv[0]; ov.innerHTML = sv[1];
							elem.appendChild(ov);
							if (!msl &&  ($.trim(sv[0]) == $.trim(vl) || $.trim(sv[1]) == $.trim(vl))) { ov.selected ='selected'; }
							if (msl && ($.inArray($.trim(sv[1]), ovm)>-1 || $.inArray($.trim(sv[0]), ovm)>-1)) {ov.selected ='selected';}
						}
					} else if (typeof options.value === 'object') {
						var oSv = options.value, key;
						for (key in oSv) {
							if (oSv.hasOwnProperty(key ) ){
								ov = document.createElement('option');
								ov.setAttribute('role','option');
								ov.value = key; ov.innerHTML = oSv[key];
								elem.appendChild(ov);
								if (!msl &&  ( $.trim(key) == $.trim(vl) || $.trim(oSv[key]) == $.trim(vl)) ) { ov.selected ='selected'; }
								if (msl && ($.inArray($.trim(oSv[key]),ovm)>-1 || $.inArray($.trim(key),ovm)>-1)) { ov.selected ='selected'; }
							}
						}
					}
					setAttributes(elem, options, ['value']);
				}
				break;
			case 'text' :
			case 'password' :
			case 'button' :
				var role;
				if(eltype=='button') { role = 'button'; }
				else { role = 'textbox'; }
				elem = document.createElement('input');
				elem.type = eltype;
				elem.value = vl;
				setAttributes(elem, options);
				if(eltype != 'button'){
					if(autowidth) {
						if(!options.size) { $(elem).css({width:'98%'}); }
					} else if (!options.size) { options.size = 20; }
				}
				$(elem).attr('role',role);
				break;
			case 'image' :
			case 'file' :
				elem = document.createElement('input');
				elem.type = eltype;
				setAttributes(elem, options);
				break;
			case 'custom' :
				elem = document.createElement('span');
				try {
					if($.isFunction(options.custom_element)) {
						var celm = options.custom_element.call($t,vl,options);
						if(celm) {
							celm = $(celm).addClass('customelement').attr({id:options.id,name:options.name});
							$(elem).empty().append(celm);
						} else {
							throw 'e2';
						}
					} else {
						throw 'e1';
					}
				} catch (e) {
					if (e=='e1') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_element\' '+$.jgrid.edit.msg.nodefined, $.jgrid.edit.bClose);}
					if (e=='e2') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_element\' '+$.jgrid.edit.msg.novalue,$.jgrid.edit.bClose);}
					else { $.jgrid.info_dialog($.jgrid.errors.errcap,typeof e==='string'?e:e.message,$.jgrid.edit.bClose); }
				}
				break;
			}
			return elem;
		},
		// Date Validation Javascript
		checkDate : function (format, date) {
			var daysInFebruary = function(year){
					// February has 29 days in any year evenly divisible by four,
					// EXCEPT for centurial years which are not also divisible by 400.
					return (((year % 4 === 0) && ( year % 100 !== 0 || (year % 400 === 0))) ? 29 : 28 );
				},
				daysArray = function(n) {
					var i;
					for (i = 1; i <= n; i++) {
						this[i] = 31;
						if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
						if (i==2) {this[i] = 29;}
					}
					return this;
				};

			var tsp = {}, sep;
			format = format.toLowerCase();
			//we search for /,-,. for the date separator
			if(format.indexOf('/') != -1) {
				sep = '/';
			} else if(format.indexOf('-') != -1) {
				sep = '-';
			} else if(format.indexOf('.') != -1) {
				sep = '.';
			} else {
				sep = '/';
			}
			format = format.split(sep);
			date = date.split(sep);
			if (date.length != 3) { return false; }
			var j=-1,yln, dln=-1, mln=-1, i;
			for(i=0;i<format.length;i++){
				var dv =  isNaN(date[i]) ? 0 : parseInt(date[i],10);
				tsp[format[i]] = dv;
				yln = format[i];
				if(yln.indexOf('y') != -1) { j=i; }
				if(yln.indexOf('m') != -1) { mln=i; }
				if(yln.indexOf('d') != -1) { dln=i; }
			}
			if (format[j] == 'y' || format[j] == 'yyyy') {
				yln=4;
			} else if(format[j] =='yy'){
				yln = 2;
			} else {
				yln = -1;
			}
			var daysInMonth = daysArray(12),
				strDate;
			if (j === -1) {
				return false;
			}
			strDate = tsp[format[j]].toString();
			if(yln == 2 && strDate.length == 1) {yln = 1;}
			if (strDate.length != yln || (tsp[format[j]]===0 && date[j]!='00')){
				return false;
			}
			if(mln === -1) {
				return false;
			}
			strDate = tsp[format[mln]].toString();
			if (strDate.length<1 || tsp[format[mln]]<1 || tsp[format[mln]]>12){
				return false;
			}
			if(dln === -1) {
				return false;
			}
			strDate = tsp[format[dln]].toString();
			if (strDate.length<1 || tsp[format[dln]]<1 || tsp[format[dln]]>31 || (tsp[format[mln]]==2 && tsp[format[dln]]>daysInFebruary(tsp[format[j]])) || tsp[format[dln]] > daysInMonth[tsp[format[mln]]]){
				return false;
			}
			return true;
		},
		isEmpty : function(val)
		{
			if (val.match(/^\s+$/) || val === '')	{
				return true;
			}
			return false;
		},
		checkTime : function(time){
			// checks only hh:ss (and optional am/pm)
			var re = /^(\d{1,2}):(\d{2})([ap]m)?$/,regs;
			if(!$.jgrid.isEmpty(time))
			{
				regs = time.match(re);
				if(regs) {
					if(regs[3]) {
						if(regs[1] < 1 || regs[1] > 12) { return false; }
					} else {
						if(regs[1] > 23) { return false; }
					}
					if(regs[2] > 59) {
						return false;
					}
				} else {
					return false;
				}
			}
			return true;
		},
		checkValues : function(val, valref,g, customobject, nam) {
			var edtrul,i, nm, dft, len;
			if(customobject === undefined) {
				if(typeof valref==='string'){
					for( i =0, len=g.p.colModel.length;i<len; i++){
						if(g.p.colModel[i].name==valref) {
							edtrul = g.p.colModel[i].editrules;
							valref = i;
							try { nm = g.p.colModel[i].formoptions.label; } catch (e) {}
							break;
						}
					}
				} else if(valref >=0) {
					edtrul = g.p.colModel[valref].editrules;
				}
			} else {
				edtrul = customobject;
				nm = nam===undefined ? '_' : nam;
			}
			if(edtrul) {
				if(!nm) { nm = g.p.colNames[valref]; }
				if(edtrul.required === true) {
					if( $.jgrid.isEmpty(val) )  { return [false,nm+': '+$.jgrid.edit.msg.required,'']; }
				}
				// force required
				var rqfield = edtrul.required === false ? false : true;
				if(edtrul.number === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						if(isNaN(val)) { return [false,nm+': '+$.jgrid.edit.msg.number,'']; }
					}
				}
				if(edtrul.minValue !== undefined && !isNaN(edtrul.minValue)) {
					if (parseFloat(val) < parseFloat(edtrul.minValue) ) { return [false,nm+': '+$.jgrid.edit.msg.minValue+' '+edtrul.minValue,''];}
				}
				if(edtrul.maxValue !== undefined && !isNaN(edtrul.maxValue)) {
					if (parseFloat(val) > parseFloat(edtrul.maxValue) ) { return [false,nm+': '+$.jgrid.edit.msg.maxValue+' '+edtrul.maxValue,''];}
				}
				var filter;
				if(edtrul.email === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						// taken from $ Validate plugin
						filter = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
						if(!filter.test(val)) {return [false,nm+': '+$.jgrid.edit.msg.email,''];}
					}
				}
				if(edtrul.integer === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						if(isNaN(val)) { return [false,nm+': '+$.jgrid.edit.msg.integer,'']; }
						if ((val % 1 !== 0) || (val.indexOf('.') != -1)) { return [false,nm+': '+$.jgrid.edit.msg.integer,''];}
					}
				}
				if(edtrul.date === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						if(g.p.colModel[valref].formatoptions && g.p.colModel[valref].formatoptions.newformat) {
							dft = g.p.colModel[valref].formatoptions.newformat;
						} else {
							dft = g.p.colModel[valref].datefmt || 'Y-m-d';
						}
						if(!$.jgrid.checkDate (dft, val)) { return [false,nm+': '+$.jgrid.edit.msg.date+' - '+dft,'']; }
					}
				}
				if(edtrul.time === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						if(!$.jgrid.checkTime (val)) { return [false,nm+': '+$.jgrid.edit.msg.date+' - hh:mm (am/pm)','']; }
					}
				}
				if(edtrul.url === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						filter = /^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
						if(!filter.test(val)) {return [false,nm+': '+$.jgrid.edit.msg.url,''];}
					}
				}
				if(edtrul.custom === true) {
					if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
						if($.isFunction(edtrul.custom_func)) {
							var ret = edtrul.custom_func.call(g,val,nm);
							return $.isArray(ret) ? ret : [false,$.jgrid.edit.msg.customarray,''];
						}
						return [false,$.jgrid.edit.msg.customfcheck,''];
					}
				}
			}
			return [true,'',''];
		}
	});
})(jQuery);
/*
 * jqFilter  jQuery jqGrid filter addon.
 * Copyright (c) 2011, Tony Tomov, tony@trirand.com
 * Dual licensed under the MIT and GPL licenses
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
 *
 * The work is inspired from this Stefan Pirvu
 * http://www.codeproject.com/KB/scripting/json-filtering.aspx
 *
 * The filter uses JSON entities to hold filter rules and groups. Here is an example of a filter:

{ "groupOp": "AND",
      "groups" : [
        { "groupOp": "OR",
            "rules": [
                { "field": "name", "op": "eq", "data": "England" },
                { "field": "id", "op": "le", "data": "5"}
             ]
        }
      ],
      "rules": [
        { "field": "name", "op": "eq", "data": "Romania" },
        { "field": "id", "op": "le", "data": "1"}
      ]
}
*/
/*jshint eqeqeq:false, eqnull:true, devel:true */
/*global jQuery */

(function ($) {
	'use strict';

	$.fn.jqFilter = function( arg ) {
		if (typeof arg === 'string') {

			var fn = $.fn.jqFilter[arg];
			if (!fn) {
				throw ('jqFilter - No such method: ' + arg);
			}
			var args = $.makeArray(arguments).slice(1);
			return fn.apply(this,args);
		}

		var p = $.extend(true,{
			filter: null,
			columns: [],
			onChange : null,
			afterRedraw : null,
			checkValues : null,
			error: false,
			errmsg : '',
			errorcheck : true,
			showQuery : true,
			sopt : null,
			ops : [
				{'name': 'eq', 'description': 'equal', 'operator':'='},
				{'name': 'ne', 'description': 'not equal', 'operator':'<>'},
				{'name': 'lt', 'description': 'less', 'operator':'<'},
				{'name': 'le', 'description': 'less or equal','operator':'<='},
				{'name': 'gt', 'description': 'greater', 'operator':'>'},
				{'name': 'ge', 'description': 'greater or equal', 'operator':'>='},
				{'name': 'bw', 'description': 'begins with', 'operator':'LIKE'},
				{'name': 'bn', 'description': 'does not begin with', 'operator':'NOT LIKE'},
				{'name': 'in', 'description': 'in', 'operator':'IN'},
				{'name': 'ni', 'description': 'not in', 'operator':'NOT IN'},
				{'name': 'ew', 'description': 'ends with', 'operator':'LIKE'},
				{'name': 'en', 'description': 'does not end with', 'operator':'NOT LIKE'},
				{'name': 'cn', 'description': 'contains', 'operator':'LIKE'},
				{'name': 'nc', 'description': 'does not contain', 'operator':'NOT LIKE'},
				{'name': 'nu', 'description': 'is null', 'operator':'IS NULL'},
				{'name': 'nn', 'description': 'is not null', 'operator':'IS NOT NULL'}
			],
			numopts : ['eq','ne', 'lt', 'le', 'gt', 'ge', 'nu', 'nn', 'in', 'ni'],
			stropts : ['eq', 'ne', 'bw', 'bn', 'ew', 'en', 'cn', 'nc', 'nu', 'nn', 'in', 'ni'],
			strarr : ['text', 'string', 'blob'],
			_gridsopt : [], // grid translated strings, do not tuch
			groupOps : [{ op: 'AND', text: 'AND' },	{ op: 'OR',  text: 'OR' }],
			groupButton : true,
			ruleButtons : true,
			direction : 'ltr'
		}, $.jgrid.filter, arg || {});
		return this.each( function() {
			if (this.filter) {return;}
			this.p = p;
			// setup filter in case if they is not defined
			if (this.p.filter === null || this.p.filter === undefined) {
				this.p.filter = {
					groupOp: this.p.groupOps[0].op,
					rules: [],
					groups: []
				};
			}
			var i, len = this.p.columns.length, cl,
				isIE = /msie/i.test(navigator.userAgent) && !window.opera;

			// translating the options
			if(this.p._gridsopt.length) {
			// ['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']
				for(i=0;i<this.p._gridsopt.length;i++) {
					this.p.ops[i].description = this.p._gridsopt[i];
				}
			}
			this.p.initFilter = $.extend(true,{},this.p.filter);

			// set default values for the columns if they are not set
			if( !len ) {return;}
			for(i=0; i < len; i++) {
				cl = this.p.columns[i];
				if( cl.stype ) {
				// grid compatibility
					cl.inputtype = cl.stype;
				} else if(!cl.inputtype) {
					cl.inputtype = 'text';
				}
				if( cl.sorttype ) {
				// grid compatibility
					cl.searchtype = cl.sorttype;
				} else if (!cl.searchtype) {
					cl.searchtype = 'string';
				}
				if(cl.hidden === undefined) {
				// jqGrid compatibility
					cl.hidden = false;
				}
				if(!cl.label) {
					cl.label = cl.name;
				}
				if(cl.index) {
					cl.name = cl.index;
				}
				if(!cl.hasOwnProperty('searchoptions')) {
					cl.searchoptions = {};
				}
				if(!cl.hasOwnProperty('searchrules')) {
					cl.searchrules = {};
				}

			}
			if(this.p.showQuery) {
				$(this).append('<table class=\'queryresult ui-widget ui-widget-content\' style=\'display:block;max-width:440px;border:0px none;\' dir=\''+this.p.direction+'\'><tbody><tr><td class=\'query\'></td></tr></tbody></table>');
			}
			/*
		 *Perform checking.
		 *
		*/
			var checkData = function(val, colModelItem) {
				var ret = [true,''];
				if($.isFunction(colModelItem.searchrules)) {
					ret = colModelItem.searchrules(val, colModelItem);
				} else if($.jgrid && $.jgrid.checkValues) {
					try {
						ret = $.jgrid.checkValues(val, -1, null, colModelItem.searchrules, colModelItem.label);
					} catch (e) {}
				}
				if(ret && ret.length && ret[0] === false) {
					p.error = !ret[0];
					p.errmsg = ret[1];
				}
			};
			/* moving to common
		randId = function() {
			return Math.floor(Math.random()*10000).toString();
		};
		*/

			this.onchange = function (  ){
			// clear any error
				this.p.error = false;
				this.p.errmsg='';
				return $.isFunction(this.p.onChange) ? this.p.onChange.call( this, this.p ) : false;
			};
			/*
		 * Redraw the filter every time when new field is added/deleted
		 * and field is  changed
		 */
			this.reDraw = function() {
				$('table.group:first',this).remove();
				var t = this.createTableForGroup(p.filter, null);
				$(this).append(t);
				if($.isFunction(this.p.afterRedraw) ) {
					this.p.afterRedraw.call(this, this.p);
				}
			};
			/*
		 * Creates a grouping data for the filter
		 * @param group - object
		 * @param parentgroup - object
		 */
			this.createTableForGroup = function(group, parentgroup) {
				var that = this,  i;
				// this table will hold all the group (tables) and rules (rows)
				var table = $('<table class=\'group ui-widget ui-widget-content\' style=\'border:0px none;\'><tbody></tbody></table>'),
					// create error message row
					align = 'left';
				if(this.p.direction == 'rtl') {
					align = 'right';
					table.attr('dir','rtl');
				}
				if(parentgroup === null) {
					table.append('<tr class=\'error\' style=\'display:none;\'><th colspan=\'5\' class=\'ui-state-error\' align=\''+align+'\'></th></tr>');
				}

				var tr = $('<tr></tr>');
				table.append(tr);
				// this header will hold the group operator type and group action buttons for
				// creating subgroup "+ {}", creating rule "+" or deleting the group "-"
				var th = $('<th colspan=\'5\' align=\''+align+'\'></th>');
				tr.append(th);

				if(this.p.ruleButtons === true) {
					// dropdown for: choosing group operator type
					var groupOpSelect = $('<select class=\'opsel\'></select>');
					th.append(groupOpSelect);
					// populate dropdown with all posible group operators: or, and
					var str= '', selected;
					for (i = 0; i < p.groupOps.length; i++) {
						selected =  group.groupOp === that.p.groupOps[i].op ? ' selected=\'selected\'' :'';
						str += '<option value=\''+that.p.groupOps[i].op+'\'' + selected+'>'+that.p.groupOps[i].text+'</option>';
					}

					groupOpSelect
						.append(str)
						.bind('change',function() {
							group.groupOp = $(groupOpSelect).val();
							that.onchange(); // signals that the filter has changed
						});
				}
				// button for adding a new subgroup
				var inputAddSubgroup ='<span></span>';
				if(this.p.groupButton) {
					inputAddSubgroup = $('<input type=\'button\' value=\'+ {}\' title=\'Add subgroup\' class=\'add-group\'/>');
					inputAddSubgroup.bind('click',function() {
						if (group.groups === undefined ) {
							group.groups = [];
						}

						group.groups.push({
							groupOp: p.groupOps[0].op,
							rules: [],
							groups: []
						}); // adding a new group

						that.reDraw(); // the html has changed, force reDraw

						that.onchange(); // signals that the filter has changed
						return false;
					});
				}
				th.append(inputAddSubgroup);
				if(this.p.ruleButtons === true) {
					// button for adding a new rule
					var inputAddRule = $('<input type=\'button\' value=\'+\' title=\'Add rule\' class=\'add-rule ui-add\'/>'), cm;
					inputAddRule.bind('click',function() {
						//if(!group) { group = {};}
						if (group.rules === undefined) {
							group.rules = [];
						}
						for (i = 0; i < that.p.columns.length; i++) {
							// but show only serchable and serchhidden = true fields
							var searchable = (that.p.columns[i].search === undefined) ?  true: that.p.columns[i].search ,
								hidden = (that.p.columns[i].hidden === true),
								ignoreHiding = (that.p.columns[i].searchoptions.searchhidden === true);
							if ((ignoreHiding && searchable) || (searchable && !hidden)) {
								cm = that.p.columns[i];
								break;
							}
						}

						var opr;
						if( cm.searchoptions.sopt ) {opr = cm.searchoptions.sopt;}
						else if(that.p.sopt) { opr= that.p.sopt; }
						else if  ( $.inArray(cm.searchtype, that.p.strarr) !== -1 ) {opr = that.p.stropts;}
						else {opr = that.p.numopts;}

						group.rules.push({
							field: cm.name,
							op: opr[0],
							data: ''
						}); // adding a new rule

						that.reDraw(); // the html has changed, force reDraw
						// for the moment no change have been made to the rule, so
						// this will not trigger onchange event
						return false;
					});
					th.append(inputAddRule);
				}

				// button for delete the group
				if (parentgroup !== null) { // ignore the first group
					var inputDeleteGroup = $('<input type=\'button\' value=\'-\' title=\'Delete group\' class=\'delete-group\'/>');
					th.append(inputDeleteGroup);
					inputDeleteGroup.bind('click',function() {
						// remove group from parent
						for (i = 0; i < parentgroup.groups.length; i++) {
							if (parentgroup.groups[i] === group) {
								parentgroup.groups.splice(i, 1);
								break;
							}
						}

						that.reDraw(); // the html has changed, force reDraw

						that.onchange(); // signals that the filter has changed
						return false;
					});
				}

				// append subgroup rows
				if (group.groups !== undefined) {
					for (i = 0; i < group.groups.length; i++) {
						var trHolderForSubgroup = $('<tr></tr>');
						table.append(trHolderForSubgroup);

						var tdFirstHolderForSubgroup = $('<td class=\'first\'></td>');
						trHolderForSubgroup.append(tdFirstHolderForSubgroup);

						var tdMainHolderForSubgroup = $('<td colspan=\'4\'></td>');
						tdMainHolderForSubgroup.append(this.createTableForGroup(group.groups[i], group));
						trHolderForSubgroup.append(tdMainHolderForSubgroup);
					}
				}
				if(group.groupOp === undefined) {
					group.groupOp = that.p.groupOps[0].op;
				}

				// append rules rows
				if (group.rules !== undefined) {
					for (i = 0; i < group.rules.length; i++) {
						table.append(
							this.createTableRowForRule(group.rules[i], group)
						);
					}
				}

				return table;
			};
			/*
		 * Create the rule data for the filter
		 */
			this.createTableRowForRule = function(rule, group ) {
			// save current entity in a variable so that it could
			// be referenced in anonimous method calls

				var that=this, tr = $('<tr></tr>'),
					//document.createElement("tr"),

					// first column used for padding
					//tdFirstHolderForRule = document.createElement("td"),
					i, op, trpar, cm, str='', selected;
				//tdFirstHolderForRule.setAttribute("class", "first");
				tr.append('<td class=\'first\'></td>');


				// create field container
				var ruleFieldTd = $('<td class=\'columns\'></td>');
				tr.append(ruleFieldTd);


				// dropdown for: choosing field
				var ruleFieldSelect = $('<select></select>'), ina, aoprs = [];
				ruleFieldTd.append(ruleFieldSelect);
				ruleFieldSelect.bind('change',function() {
					rule.field = $(ruleFieldSelect).val();

					trpar = $(this).parents('tr:first');
					for (i=0;i<that.p.columns.length;i++) {
						if(that.p.columns[i].name ===  rule.field) {
							cm = that.p.columns[i];
							break;
						}
					}
					if(!cm) {return;}
					cm.searchoptions.id = $.jgrid.randId();
					if(isIE && cm.inputtype === 'text') {
						if(!cm.searchoptions.size) {
							cm.searchoptions.size = 10;
						}
					}
					var elm = $.jgrid.createEl(cm.inputtype,cm.searchoptions, '', true, that.p.ajaxSelectOptions, true);
					$(elm).addClass('input-elm');
					//that.createElement(rule, "");

					if( cm.searchoptions.sopt ) {op = cm.searchoptions.sopt;}
					else if(that.p.sopt) { op= that.p.sopt; }
					else if  ($.inArray(cm.searchtype, that.p.strarr) !== -1) {op = that.p.stropts;}
					else {op = that.p.numopts;}
					// operators
					var s ='', so = 0;
					aoprs = [];
					$.each(that.p.ops, function() { aoprs.push(this.name); });
					for ( i = 0 ; i < op.length; i++) {
						ina = $.inArray(op[i],aoprs);
						if(ina !== -1) {
							if(so===0) {
								rule.op = that.p.ops[ina].name;
							}
							s += '<option value=\''+that.p.ops[ina].name+'\'>'+that.p.ops[ina].description+'</option>';
							so++;
						}
					}
					$('.selectopts',trpar).empty().append( s );
					$('.selectopts',trpar)[0].selectedIndex = 0;
					if( $.jgrid.msie && $.jgrid.msiever() < 9) {
						var sw = parseInt($('select.selectopts',trpar)[0].offsetWidth, 10) + 1;
						$('.selectopts',trpar).width( sw );
						$('.selectopts',trpar).css('width','auto');
					}
					// data
					$('.data',trpar).empty().append( elm );
					$.jgrid.bindEv( elm, cm.searchoptions, that);
					$('.input-elm',trpar).bind('change',function( e ) {
						var tmo = $(this).hasClass('ui-autocomplete-input') ? 200 :0;
						setTimeout(function(){
							var elem = e.target;
							rule.data = elem.nodeName.toUpperCase() === 'SPAN' && cm.searchoptions && $.isFunction(cm.searchoptions.custom_value) ?
								cm.searchoptions.custom_value($(elem).children('.customelement:first'), 'get') : elem.value;
							that.onchange(); // signals that the filter has changed
						}, tmo);
					});
					setTimeout(function(){ //IE, Opera, Chrome
						rule.data = $(elm).val();
						that.onchange();  // signals that the filter has changed
					}, 0);
				});

				// populate drop down with user provided column definitions
				var j=0;
				for (i = 0; i < that.p.columns.length; i++) {
				// but show only serchable and serchhidden = true fields
					var searchable = (that.p.columns[i].search === undefined) ? true: that.p.columns[i].search,
						hidden = (that.p.columns[i].hidden === true),
						ignoreHiding = (that.p.columns[i].searchoptions.searchhidden === true);
					if ((ignoreHiding && searchable) || (searchable && !hidden)) {
						selected = '';
						if(rule.field === that.p.columns[i].name) {
							selected = ' selected=\'selected\'';
							j=i;
						}
						str += '<option value=\''+that.p.columns[i].name+'\'' +selected+'>'+that.p.columns[i].label+'</option>';
					}
				}
				ruleFieldSelect.append( str );


				// create operator container
				var ruleOperatorTd = $('<td class=\'operators\'></td>');
				tr.append(ruleOperatorTd);
				cm = p.columns[j];
				// create it here so it can be referentiated in the onchange event
				//var RD = that.createElement(rule, rule.data);
				cm.searchoptions.id = $.jgrid.randId();
				if(isIE && cm.inputtype === 'text') {
					if(!cm.searchoptions.size) {
						cm.searchoptions.size = 10;
					}
				}
				var ruleDataInput = $.jgrid.createEl(cm.inputtype,cm.searchoptions, rule.data, true, that.p.ajaxSelectOptions, true);
				if(rule.op == 'nu' || rule.op == 'nn') {
					$(ruleDataInput).attr('readonly','true');
					$(ruleDataInput).attr('disabled','true');
				} //retain the state of disabled text fields in case of null ops
				// dropdown for: choosing operator
				var ruleOperatorSelect = $('<select class=\'selectopts\'></select>');
				ruleOperatorTd.append(ruleOperatorSelect);
				ruleOperatorSelect.bind('change',function() {
					rule.op = $(ruleOperatorSelect).val();
					trpar = $(this).parents('tr:first');
					var rd = $('.input-elm',trpar)[0];
					if (rule.op === 'nu' || rule.op === 'nn') { // disable for operator "is null" and "is not null"
						rule.data = '';
						rd.value = '';
						rd.setAttribute('readonly', 'true');
						rd.setAttribute('disabled', 'true');
					} else {
						rd.removeAttribute('readonly');
						rd.removeAttribute('disabled');
					}

					that.onchange();  // signals that the filter has changed
				});

				// populate drop down with all available operators
				if( cm.searchoptions.sopt ) {op = cm.searchoptions.sopt;}
				else if(that.p.sopt) { op= that.p.sopt; }
				else if  ($.inArray(cm.searchtype, that.p.strarr) !== -1) {op = that.p.stropts;}
				else {op = that.p.numopts;}
				str='';
				$.each(that.p.ops, function() { aoprs.push(this.name); });
				for ( i = 0; i < op.length; i++) {
					ina = $.inArray(op[i],aoprs);
					if(ina !== -1) {
						selected = rule.op === that.p.ops[ina].name ? ' selected=\'selected\'' : '';
						str += '<option value=\''+that.p.ops[ina].name+'\''+selected+'>'+that.p.ops[ina].description+'</option>';
					}
				}
				ruleOperatorSelect.append( str );
				// create data container
				var ruleDataTd = $('<td class=\'data\'></td>');
				tr.append(ruleDataTd);

				// textbox for: data
				// is created previously
				//ruleDataInput.setAttribute("type", "text");
				ruleDataTd.append(ruleDataInput);
				$.jgrid.bindEv( ruleDataInput, cm.searchoptions, that);
				$(ruleDataInput)
					.addClass('input-elm')
					.bind('change', function() {
						rule.data = cm.inputtype === 'custom' ? cm.searchoptions.custom_value($(this).children('.customelement:first'),'get') : $(this).val();
						that.onchange(); // signals that the filter has changed
					});

				// create action container
				var ruleDeleteTd = $('<td></td>');
				tr.append(ruleDeleteTd);

				// create button for: delete rule
				if(this.p.ruleButtons === true) {
					var ruleDeleteInput = $('<input type=\'button\' value=\'-\' title=\'Delete rule\' class=\'delete-rule ui-del\'/>');
					ruleDeleteTd.append(ruleDeleteInput);
					//$(ruleDeleteInput).html("").height(20).width(30).button({icons: {  primary: "ui-icon-minus", text:false}});
					ruleDeleteInput.bind('click',function() {
						// remove rule from group
						for (i = 0; i < group.rules.length; i++) {
							if (group.rules[i] === rule) {
								group.rules.splice(i, 1);
								break;
							}
						}

						that.reDraw(); // the html has changed, force reDraw

						that.onchange(); // signals that the filter has changed
						return false;
					});
				}
				return tr;
			};

			this.getStringForGroup = function(group) {
				var s = '(', index;
				if (group.groups !== undefined) {
					for (index = 0; index < group.groups.length; index++) {
						if (s.length > 1) {
							s += ' ' + group.groupOp + ' ';
						}
						try {
							s += this.getStringForGroup(group.groups[index]);
						} catch (eg) {alert(eg);}
					}
				}

				if (group.rules !== undefined) {
					try{
						for (index = 0; index < group.rules.length; index++) {
							if (s.length > 1) {
								s += ' ' + group.groupOp + ' ';
							}
							s += this.getStringForRule(group.rules[index]);
						}
					} catch (e) {alert(e);}
				}

				s += ')';

				if (s === '()') {
					return ''; // ignore groups that don't have rules
				}
				return s;
			};
			this.getStringForRule = function(rule) {
				var opUF = '',opC='', i, cm, ret, val,
					numtypes = ['int', 'integer', 'float', 'number', 'currency']; // jqGrid
				for (i = 0; i < this.p.ops.length; i++) {
					if (this.p.ops[i].name === rule.op) {
						opUF = this.p.ops[i].operator;
						opC = this.p.ops[i].name;
						break;
					}
				}
				for (i=0; i<this.p.columns.length; i++) {
					if(this.p.columns[i].name === rule.field) {
						cm = this.p.columns[i];
						break;
					}
				}
				if (cm == null) { return ''; }
				val = rule.data;
				if(opC === 'bw' || opC === 'bn') { val = val+'%'; }
				if(opC === 'ew' || opC === 'en') { val = '%'+val; }
				if(opC === 'cn' || opC === 'nc') { val = '%'+val+'%'; }
				if(opC === 'in' || opC === 'ni') { val = ' ('+val+')'; }
				if(p.errorcheck) { checkData(rule.data, cm); }
				if($.inArray(cm.searchtype, numtypes) !== -1 || opC === 'nn' || opC === 'nu') { ret = rule.field + ' ' + opUF + ' ' + val; }
				else { ret = rule.field + ' ' + opUF + ' "' + val + '"'; }
				return ret;
			};
			this.resetFilter = function () {
				this.p.filter = $.extend(true,{},this.p.initFilter);
				this.reDraw();
				this.onchange();
			};
			this.hideError = function() {
				$('th.ui-state-error', this).html('');
				$('tr.error', this).hide();
			};
			this.showError = function() {
				$('th.ui-state-error', this).html(this.p.errmsg);
				$('tr.error', this).show();
			};
			this.toUserFriendlyString = function() {
				return this.getStringForGroup(p.filter);
			};
			this.toString = function() {
			// this will obtain a string that can be used to match an item.
				var that = this;
				function getStringRule(rule) {
					if(that.p.errorcheck) {
						var i, cm;
						for (i=0; i<that.p.columns.length; i++) {
							if(that.p.columns[i].name === rule.field) {
								cm = that.p.columns[i];
								break;
							}
						}
						if(cm) {checkData(rule.data, cm);}
					}
					return rule.op + '(item.' + rule.field + ',\'' + rule.data + '\')';
				}

				function getStringForGroup(group) {
					var s = '(', index;

					if (group.groups !== undefined) {
						for (index = 0; index < group.groups.length; index++) {
							if (s.length > 1) {
								if (group.groupOp === 'OR') {
									s += ' || ';
								}
								else {
									s += ' && ';
								}
							}
							s += getStringForGroup(group.groups[index]);
						}
					}

					if (group.rules !== undefined) {
						for (index = 0; index < group.rules.length; index++) {
							if (s.length > 1) {
								if (group.groupOp === 'OR') {
									s += ' || ';
								}
								else  {
									s += ' && ';
								}
							}
							s += getStringRule(group.rules[index]);
						}
					}

					s += ')';

					if (s === '()') {
						return ''; // ignore groups that don't have rules
					}
					return s;
				}

				return getStringForGroup(this.p.filter);
			};

			// Here we init the filter
			this.reDraw();

			if(this.p.showQuery) {
				this.onchange();
			}
			// mark is as created so that it will not be created twice on this element
			this.filter = true;
		});
	};
	$.extend($.fn.jqFilter,{
	/*
	 * Return SQL like string. Can be used directly
	 */
		toSQLString : function()
		{
			var s ='';
			this.each(function(){
				s = this.toUserFriendlyString();
			});
			return s;
		},
		/*
	 * Return filter data as object.
	 */
		filterData : function()
		{
			var s;
			this.each(function(){
				s = this.p.filter;
			});
			return s;

		},
		getParameter : function (param) {
			if(param !== undefined) {
				if (this.p.hasOwnProperty(param) ) {
					return this.p[param];
				}
			}
			return this.p;
		},
		resetFilter: function() {
			return this.each(function(){
				this.resetFilter();
			});
		},
		addFilter: function (pfilter) {
			if (typeof pfilter === 'string') {
				pfilter = $.jgrid.parse( pfilter );
			}
			this.each(function(){
				this.p.filter = pfilter;
				this.reDraw();
				this.onchange();
			});
		}

	});
})(jQuery);
/*jshint eqeqeq:false, eqnull:true, devel:true */
/*global xmlJsonClass, jQuery */
(function($){
/**
 * jqGrid extension for form editing Grid Data
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
	'use strict';

	$.jgrid.extend({
		searchGrid : function (p) {
			p = $.extend(true, {
				recreateFilter: false,
				drag: true,
				sField:'searchField',
				sValue:'searchString',
				sOper: 'searchOper',
				sFilter: 'filters',
				loadDefaults: true, // this options activates loading of default filters from grid's postData for Multipe Search only.
				beforeShowSearch: null,
				afterShowSearch : null,
				onInitializeSearch: null,
				afterRedraw : null,
				afterChange: null,
				closeAfterSearch : false,
				closeAfterReset: false,
				closeOnEscape : false,
				searchOnEnter : false,
				multipleSearch : false,
				multipleGroup : false,
				//cloneSearchRowOnAdd: true,
				top : 0,
				left: 0,
				jqModal : true,
				modal: false,
				resize : true,
				width: 450,
				height: 'auto',
				dataheight: 'auto',
				showQuery: false,
				errorcheck : true,
				// translation
				// if you want to change or remove the order change it in sopt
				// ['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc'],
				sopt: null,
				stringResult: undefined,
				onClose : null,
				onSearch : null,
				onReset : null,
				toTop : true,
				overlay : 30,
				columns : [],
				tmplNames : null,
				tmplFilters : null,
				// translations - later in lang file
				tmplLabel : ' Template: ',
				showOnLoad: false,
				layer: null
			}, $.jgrid.search, p || {});
			return this.each(function() {
				var $t = this;
				if(!$t.grid) {return;}
				var fid = 'fbox_'+$t.p.id,
					showFrm = true,
					IDs = {themodal:'searchmod'+fid,modalhead:'searchhd'+fid,modalcontent:'searchcnt'+fid, scrollelm : fid},
					defaultFilters  = $t.p.postData[p.sFilter];
				if(typeof defaultFilters === 'string') {
					defaultFilters = $.jgrid.parse( defaultFilters );
				}
				if(p.recreateFilter === true) {
					$('#'+$.jgrid.jqID(IDs.themodal)).remove();
				}
				function showFilter(_filter) {
					showFrm = $($t).triggerHandler('jqGridFilterBeforeShow', [_filter]);
					if(showFrm === undefined) {
						showFrm = true;
					}
					if(showFrm && $.isFunction(p.beforeShowSearch)) {
						showFrm = p.beforeShowSearch.call($t,_filter);
					}
					if(showFrm) {
						$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(fid),jqm:p.jqModal, modal:p.modal, overlay: p.overlay, toTop: p.toTop});
						$($t).triggerHandler('jqGridFilterAfterShow', [_filter]);
						if($.isFunction(p.afterShowSearch)) {
							p.afterShowSearch.call($t, _filter);
						}
					}
				}
				if ( $('#'+$.jgrid.jqID(IDs.themodal))[0] !== undefined ) {
					showFilter($('#fbox_'+$.jgrid.jqID(+$t.p.id)));
				} else {
					var fil = $('<div><div id=\''+fid+'\' class=\'searchFilter\' style=\'overflow:auto\'></div></div>').insertBefore('#gview_'+$.jgrid.jqID($t.p.id)),
						align = 'left', butleft ='';
					if($t.p.direction == 'rtl') {
						align = 'right';
						butleft = ' style=\'text-align:left\'';
						fil.attr('dir','rtl');
					}
					var columns = $.extend([],$t.p.colModel),
						bS  ='<a href=\'javascript:void(0)\' id=\''+fid+'_search\' class=\'fm-button ui-state-default ui-corner-all fm-button-icon-right ui-reset\'><span class=\'ui-icon ui-icon-search\'></span>'+p.Find+'</a>',
						bC  ='<a href=\'javascript:void(0)\' id=\''+fid+'_reset\' class=\'fm-button ui-state-default ui-corner-all fm-button-icon-left ui-search\'><span class=\'ui-icon ui-icon-arrowreturnthick-1-w\'></span>'+p.Reset+'</a>',
						bQ = '', tmpl='', colnm, found = false, bt, cmi=-1;
					if(p.showQuery) {
						bQ ='<a href=\'javascript:void(0)\' id=\''+fid+'_query\' class=\'fm-button ui-state-default ui-corner-all fm-button-icon-left\'><span class=\'ui-icon ui-icon-comment\'></span>Query</a>';
					}
					if(!p.columns.length) {
						$.each(columns, function(i,n){
							if(!n.label) {
								n.label = $t.p.colNames[i];
							}
							// find first searchable column and set it if no default filter
							if(!found) {
								var searchable = (n.search === undefined) ?  true: n.search ,
									hidden = (n.hidden === true),
									ignoreHiding = (n.searchoptions && n.searchoptions.searchhidden === true);
								if ((ignoreHiding && searchable) || (searchable && !hidden)) {
									found = true;
									colnm = n.index || n.name;
									cmi =i;
								}
							}
						});
					} else {
						columns = p.columns;
					}
					// old behaviour
					if( (!defaultFilters && colnm) || p.multipleSearch === false  ) {
						var cmop = 'eq';
						if(cmi >=0 && columns[cmi].searchoptions && columns[cmi].searchoptions.sopt) {
							cmop = columns[cmi].searchoptions.sopt[0];
						} else if(p.sopt && p.sopt.length) {
							cmop = p.sopt[0];
						}
						defaultFilters = {'groupOp': 'AND',rules:[{'field':colnm,'op':cmop,'data':''}]};
					}
					found = false;
					if(p.tmplNames && p.tmplNames.length) {
						found = true;
						tmpl = p.tmplLabel;
						tmpl += '<select class=\'ui-template\'>';
						tmpl += '<option value=\'default\'>Default</option>';
						$.each(p.tmplNames, function(i,n){
							tmpl += '<option value=\''+i+'\'>'+n+'</option>';
						});
						tmpl += '</select>';
					}

					bt = '<table class=\'EditTable\' style=\'border:0px none;margin-top:5px\' id=\''+fid+'_2\'><tbody><tr><td colspan=\'2\'><hr class=\'ui-widget-content\' style=\'margin:1px\'/></td></tr><tr><td class=\'EditButton\' style=\'text-align:'+align+'\'>'+bC+tmpl+'</td><td class=\'EditButton\' '+butleft+'>'+bQ+bS+'</td></tr></tbody></table>';
					fid = $.jgrid.jqID( fid);
					$('#'+fid).jqFilter({
						columns : columns,
						filter: p.loadDefaults ? defaultFilters : null,
						showQuery: p.showQuery,
						errorcheck : p.errorcheck,
						sopt: p.sopt,
						groupButton : p.multipleGroup,
						ruleButtons : p.multipleSearch,
						afterRedraw : p.afterRedraw,
						_gridsopt : $.jgrid.search.odata,
						ajaxSelectOptions: $t.p.ajaxSelectOptions,
						groupOps: p.groupOps,
						onChange : function() {
							if(this.p.showQuery) {
								$('.query',this).html(this.toUserFriendlyString());
							}
							if ($.isFunction(p.afterChange)) {
								p.afterChange.call($t, $('#'+fid), p);
							}
						},
						direction : $t.p.direction
					});
					fil.append( bt );
					if(found && p.tmplFilters && p.tmplFilters.length) {
						$('.ui-template', fil).bind('change', function(){
							var curtempl = $(this).val();
							if(curtempl=='default') {
								$('#'+fid).jqFilter('addFilter', defaultFilters);
							} else {
								$('#'+fid).jqFilter('addFilter', p.tmplFilters[parseInt(curtempl,10)]);
							}
							return false;
						});
					}
					if(p.multipleGroup === true) {p.multipleSearch = true;}
					$($t).triggerHandler('jqGridFilterInitialize', [$('#'+fid)]);
					if($.isFunction(p.onInitializeSearch) ) {
						p.onInitializeSearch.call($t, $('#'+fid));
					}
					p.gbox = '#gbox_'+fid;
					if (p.layer) {
						$.jgrid.createModal(IDs ,fil,p,'#gview_'+$.jgrid.jqID($t.p.id),$('#gbox_'+$.jgrid.jqID($t.p.id))[0], '#'+$.jgrid.jqID(p.layer), {position: 'relative'});
					} else {
						$.jgrid.createModal(IDs ,fil,p,'#gview_'+$.jgrid.jqID($t.p.id),$('#gbox_'+$.jgrid.jqID($t.p.id))[0]);
					}
					if (p.searchOnEnter || p.closeOnEscape) {
						$('#'+$.jgrid.jqID(IDs.themodal)).keydown(function (e) {
							var $target = $(e.target);
							if (p.searchOnEnter && e.which === 13 && // 13 === $.ui.keyCode.ENTER
								!$target.hasClass('add-group') && !$target.hasClass('add-rule') &&
								!$target.hasClass('delete-group') && !$target.hasClass('delete-rule') &&
								(!$target.hasClass('fm-button') || !$target.is('[id$=_query]'))) {
								$('#'+fid+'_search').focus().click();
								return false;
							}
							if (p.closeOnEscape && e.which === 27) { // 27 === $.ui.keyCode.ESCAPE
								$('#'+$.jgrid.jqID(IDs.modalhead)).find('.ui-jqdialog-titlebar-close').focus().click();
								return false;
							}
						});
					}
					if(bQ) {
						$('#'+fid+'_query').bind('click', function(){
							$('.queryresult', fil).toggle();
							return false;
						});
					}
					if (p.stringResult===undefined) {
					// to provide backward compatibility, inferring stringResult value from multipleSearch
						p.stringResult = p.multipleSearch;
					}
					$('#'+fid+'_search').bind('click', function(){
						var fl = $('#'+fid),
							sdata={}, res ,
							filters = fl.jqFilter('filterData');
						if(p.errorcheck) {
							fl[0].hideError();
							if(!p.showQuery) {fl.jqFilter('toSQLString');}
							if(fl[0].p.error) {
								fl[0].showError();
								return false;
							}
						}

						if(p.stringResult) {
							try {
							// xmlJsonClass or JSON.stringify
								res = xmlJsonClass.toJson(filters, '', '', false);
							} catch (e) {
								try {
									res = JSON.stringify(filters);
								} catch (e2) { }
							}
							if(typeof res==='string') {
								sdata[p.sFilter] = res;
								$.each([p.sField,p.sValue, p.sOper], function() {sdata[this] = '';});
							}
						} else {
							if(p.multipleSearch) {
								sdata[p.sFilter] = filters;
								$.each([p.sField,p.sValue, p.sOper], function() {sdata[this] = '';});
							} else {
								sdata[p.sField] = filters.rules[0].field;
								sdata[p.sValue] = filters.rules[0].data;
								sdata[p.sOper] = filters.rules[0].op;
								sdata[p.sFilter] = '';
							}
						}
						$t.p.search = true;
						$.extend($t.p.postData,sdata);
						$($t).triggerHandler('jqGridFilterSearch');
						if($.isFunction(p.onSearch) ) {
							p.onSearch.call($t);
						}
						$($t).trigger('reloadGrid',[{page:1}]);
						if(p.closeAfterSearch) {
							$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID($t.p.id),jqm:p.jqModal,onClose: p.onClose});
						}
						return false;
					});
					$('#'+fid+'_reset').bind('click', function(){
						var sdata={},
							fl = $('#'+fid);
						$t.p.search = false;
						if(p.multipleSearch===false) {
							sdata[p.sField] = sdata[p.sValue] = sdata[p.sOper] = '';
						} else {
							sdata[p.sFilter] = '';
						}
						fl[0].resetFilter();
						if(found) {
							$('.ui-template', fil).val('default');
						}
						$.extend($t.p.postData,sdata);
						$($t).triggerHandler('jqGridFilterReset');
						if($.isFunction(p.onReset) ) {
							p.onReset.call($t);
						}
						$($t).trigger('reloadGrid',[{page:1}]);
						return false;
					});
					showFilter($('#'+fid));
					$('.fm-button:not(.ui-state-disabled)',fil).hover(
						function(){$(this).addClass('ui-state-hover');},
						function(){$(this).removeClass('ui-state-hover');}
					);
				}
			});
		},
		editGridRow : function(rowid, p){
			p = $.extend(true, {
				top : 0,
				left: 0,
				width: 300,
				datawidth: 'auto',
				height: 'auto',
				dataheight: 'auto',
				modal: false,
				overlay : 30,
				drag: true,
				resize: true,
				url: null,
				mtype : 'POST',
				clearAfterAdd :true,
				closeAfterEdit : false,
				reloadAfterSubmit : true,
				onInitializeForm: null,
				beforeInitData: null,
				beforeShowForm: null,
				afterShowForm: null,
				beforeSubmit: null,
				afterSubmit: null,
				onclickSubmit: null,
				afterComplete: null,
				onclickPgButtons : null,
				afterclickPgButtons: null,
				editData : {},
				recreateForm : false,
				jqModal : true,
				closeOnEscape : false,
				addedrow : 'first',
				topinfo : '',
				bottominfo: '',
				saveicon : [],
				closeicon : [],
				savekey: [false,13],
				navkeys: [false,38,40],
				checkOnSubmit : false,
				checkOnUpdate : false,
				_savedData : {},
				processing : false,
				onClose : null,
				ajaxEditOptions : {},
				serializeEditData : null,
				viewPagerButtons : true
			}, $.jgrid.edit, p || {});
			rp_ge[$(this)[0].p.id] = p;
			return this.each(function(){
				var $t = this;
				if (!$t.grid || !rowid) {return;}
				var gID = $t.p.id,
					frmgr = 'FrmGrid_'+gID, frmtborg = 'TblGrid_'+gID, frmtb = '#'+$.jgrid.jqID(frmtborg),
					IDs = {themodal:'editmod'+gID,modalhead:'edithd'+gID,modalcontent:'editcnt'+gID, scrollelm : frmgr},
					onBeforeShow = $.isFunction(rp_ge[$t.p.id].beforeShowForm) ? rp_ge[$t.p.id].beforeShowForm : false,
					onAfterShow = $.isFunction(rp_ge[$t.p.id].afterShowForm) ? rp_ge[$t.p.id].afterShowForm : false,
					onBeforeInit = $.isFunction(rp_ge[$t.p.id].beforeInitData) ? rp_ge[$t.p.id].beforeInitData : false,
					onInitializeForm = $.isFunction(rp_ge[$t.p.id].onInitializeForm) ? rp_ge[$t.p.id].onInitializeForm : false,
					showFrm = true,
					maxCols = 1, maxRows=0,	postdata, extpost, newData, diff, frmoper;
				frmgr = $.jgrid.jqID(frmgr);
				if (rowid === 'new') {
					rowid = '_empty';
					frmoper = 'add';
					p.caption=rp_ge[$t.p.id].addCaption;
				} else {
					p.caption=rp_ge[$t.p.id].editCaption;
					frmoper = 'edit';
				}
				if(p.recreateForm===true && $('#'+$.jgrid.jqID(IDs.themodal))[0] !== undefined) {
					$('#'+$.jgrid.jqID(IDs.themodal)).remove();
				}
				var closeovrl = true;
				if(p.checkOnUpdate && p.jqModal && !p.modal) {
					closeovrl = false;
				}
				function getFormData(){
					$(frmtb+' > tbody > tr > td > .FormElement').each(function() {
						var celm = $('.customelement', this);
						if (celm.length) {
							var  elem = celm[0], nm = $(elem).attr('name');
							$.each($t.p.colModel, function(){
								if(this.name === nm && this.editoptions && $.isFunction(this.editoptions.custom_value)) {
									try {
										postdata[nm] = this.editoptions.custom_value.call($t, $('#'+$.jgrid.jqID(nm),frmtb),'get');
										if (postdata[nm] === undefined) {throw 'e1';}
									} catch (e) {
										if (e==='e1') {$.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.novalue,$.jgrid.edit.bClose);}
										else {$.jgrid.info_dialog($.jgrid.errors.errcap,e.message,$.jgrid.edit.bClose);}
									}
									return true;
								}
							});
						} else {
							switch ($(this).get(0).type) {
							case 'checkbox':
								if($(this).is(':checked')) {
									postdata[this.name]= $(this).val();
								}else {
									var ofv = $(this).attr('offval');
									postdata[this.name]= ofv;
								}
								break;
							case 'select-one':
								postdata[this.name]= $('option:selected',this).val();
								extpost[this.name]= $('option:selected',this).text();
								break;
							case 'select-multiple':
								postdata[this.name]= $(this).val();
								if(postdata[this.name]) {postdata[this.name] = postdata[this.name].join(',');}
								else {postdata[this.name] ='';}
								var selectedText = [];
								$('option:selected',this).each(
									function(i,selected){
										selectedText[i] = $(selected).text();
									}
								);
								extpost[this.name]= selectedText.join(',');
								break;
							case 'password':
							case 'text':
							case 'textarea':
							case 'button':
								postdata[this.name] = $(this).val();

								break;
							}
							if($t.p.autoencode) {postdata[this.name] = $.jgrid.htmlEncode(postdata[this.name]);}
						}
					});
					return true;
				}
				function createData(rowid,obj,tb,maxcols){
					var nm, hc,trdata, cnt=0,tmp, dc,elc, retpos=[], ind=false,
						tdtmpl = '<td class=\'CaptionTD\'>&#160;</td><td class=\'DataTD\'>&#160;</td>', tmpl='', i; //*2
					for (i =1; i<=maxcols;i++) {
						tmpl += tdtmpl;
					}
					if(rowid != '_empty') {
						ind = $(obj).jqGrid('getInd',rowid);
					}
					$(obj.p.colModel).each( function(i) {
						nm = this.name;
						// hidden fields are included in the form
						if(this.editrules && this.editrules.edithidden === true) {
							hc = false;
						} else {
							hc = this.hidden === true ? true : false;
						}
						dc = hc ? 'style=\'display:none\'' : '';
						if ( nm !== 'cb' && nm !== 'subgrid' && this.editable===true && nm !== 'rn') {
							if(ind === false) {
								tmp = '';
							} else {
								if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {
									tmp = $('td[role=\'gridcell\']:eq('+i+')',obj.rows[ind]).text();
								} else {
									try {
										tmp =  $.unformat.call(obj, $('td[role=\'gridcell\']:eq('+i+')',obj.rows[ind]),{rowId:rowid, colModel:this},i);
									} catch (_) {
										tmp =  (this.edittype && this.edittype == 'textarea') ? $('td[role=\'gridcell\']:eq('+i+')',obj.rows[ind]).text() : $('td[role=\'gridcell\']:eq('+i+')',obj.rows[ind]).html();
									}
									if(!tmp || tmp == '&nbsp;' || tmp == '&#160;' || (tmp.length==1 && tmp.charCodeAt(0)==160) ) {tmp='';}
								}
							}
							var opt = $.extend({}, this.editoptions || {} ,{id:nm,name:nm}),
								frmopt = $.extend({}, {elmprefix:'',elmsuffix:'',rowabove:false,rowcontent:''}, this.formoptions || {}),
								rp = parseInt(frmopt.rowpos,10) || cnt+1,
								cp = parseInt((parseInt(frmopt.colpos,10) || 1)*2,10);
							if(rowid == '_empty' && opt.defaultValue ) {
								tmp = $.isFunction(opt.defaultValue) ? opt.defaultValue.call($t) : opt.defaultValue;
							}
							if(!this.edittype) {this.edittype = 'text';}
							if($t.p.autoencode) {tmp = $.jgrid.htmlDecode(tmp);}
							elc = $.jgrid.createEl.call($t,this.edittype,opt,tmp,false,$.extend({},$.jgrid.ajaxOptions,obj.p.ajaxSelectOptions || {}));
							if(tmp === '' && this.edittype == 'checkbox') {tmp = $(elc).attr('offval');}
							if(tmp === '' && this.edittype == 'select') {tmp = $('option:eq(0)',elc).text();}
							if(rp_ge[$t.p.id].checkOnSubmit || rp_ge[$t.p.id].checkOnUpdate) {rp_ge[$t.p.id]._savedData[nm] = tmp;}
							$(elc).addClass('FormElement');
							if( $.inArray(this.edittype, ['text','textarea','password','select']) > -1) {
								$(elc).addClass('ui-widget-content ui-corner-all');
							}
							trdata = $(tb).find('tr[rowpos='+rp+']');
							if(frmopt.rowabove) {
								var newdata = $('<tr><td class=\'contentinfo\' colspan=\''+(maxcols*2)+'\'>'+frmopt.rowcontent+'</td></tr>');
								$(tb).append(newdata);
								newdata[0].rp = rp;
							}
							if ( trdata.length===0 ) {
								trdata = $('<tr '+dc+' rowpos=\''+rp+'\'></tr>').addClass('FormData').attr('id','tr_'+nm);
								$(trdata).append(tmpl);
								$(tb).append(trdata);
								trdata[0].rp = rp;
							}
							$('td:eq('+(cp-2)+')',trdata[0]).html(frmopt.label === undefined ? obj.p.colNames[i]: frmopt.label);
							$('td:eq('+(cp-1)+')',trdata[0]).append(frmopt.elmprefix).append(elc).append(frmopt.elmsuffix);
							if($.isFunction(opt.custom_value) && rowid !== '_empty' ) {
								opt.custom_value.call($t, $('#'+nm,'#'+frmgr),'set',tmp);
							}
							$.jgrid.bindEv( elc, opt, $t);
							retpos[cnt] = i;
							cnt++;
						}
					});
					if( cnt > 0) {
						var idrow = $('<tr class=\'FormData\' style=\'display:none\'><td class=\'CaptionTD\'></td><td colspan=\''+ (maxcols*2-1)+'\' class=\'DataTD\'><input class=\'FormElement\' id=\'id_g\' type=\'text\' name=\''+obj.p.id+'_id\' value=\''+rowid+'\'/></td></tr>');
						idrow[0].rp = cnt+999;
						$(tb).append(idrow);
						if(rp_ge[$t.p.id].checkOnSubmit || rp_ge[$t.p.id].checkOnUpdate) {rp_ge[$t.p.id]._savedData[obj.p.id+'_id'] = rowid;}
					}
					return retpos;
				}
				function fillData(rowid,obj,fmid){
					var nm,cnt=0,tmp, fld,opt,vl,vlc;
					if(rp_ge[$t.p.id].checkOnSubmit || rp_ge[$t.p.id].checkOnUpdate) {rp_ge[$t.p.id]._savedData = {};rp_ge[$t.p.id]._savedData[obj.p.id+'_id']=rowid;}
					var cm = obj.p.colModel;
					if(rowid == '_empty') {
						$(cm).each(function(){
							nm = this.name;
							opt = $.extend({}, this.editoptions || {} );
							fld = $('#'+$.jgrid.jqID(nm),'#'+fmid);
							if(fld && fld.length && fld[0] !== null) {
								vl = '';
								if(opt.defaultValue ) {
									vl = $.isFunction(opt.defaultValue) ? opt.defaultValue.call($t) : opt.defaultValue;
									if(fld[0].type=='checkbox') {
										vlc = vl.toLowerCase();
										if(vlc.search(/(false|0|no|off|undefined)/i)<0 && vlc!=='') {
											fld[0].checked = true;
											fld[0].defaultChecked = true;
											fld[0].value = vl;
										} else {
											fld[0].checked = false;
											fld[0].defaultChecked = false;
										}
									} else {fld.val(vl);}
								} else {
									if( fld[0].type=='checkbox' ) {
										fld[0].checked = false;
										fld[0].defaultChecked = false;
										vl = $(fld).attr('offval');
									} else if (fld[0].type && fld[0].type.substr(0,6)=='select') {
										fld[0].selectedIndex = 0;
									} else {
										fld.val(vl);
									}
								}
								if(rp_ge[$t.p.id].checkOnSubmit===true || rp_ge[$t.p.id].checkOnUpdate) {rp_ge[$t.p.id]._savedData[nm] = vl;}
							}
						});
						$('#id_g','#'+fmid).val(rowid);
						return;
					}
					var tre = $(obj).jqGrid('getInd',rowid,true);
					if(!tre) {return;}
					$('td[role="gridcell"]',tre).each( function(i) {
						nm = cm[i].name;
						// hidden fields are included in the form
						if ( nm !== 'cb' && nm !== 'subgrid' && nm !== 'rn' && cm[i].editable===true) {
							if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {
								tmp = $(this).text();
							} else {
								try {
									tmp =  $.unformat.call(obj, $(this),{rowId:rowid, colModel:cm[i]},i);
								} catch (_) {
									tmp = cm[i].edittype=='textarea' ? $(this).text() : $(this).html();
								}
							}
							if($t.p.autoencode) {tmp = $.jgrid.htmlDecode(tmp);}
							if(rp_ge[$t.p.id].checkOnSubmit===true || rp_ge[$t.p.id].checkOnUpdate) {rp_ge[$t.p.id]._savedData[nm] = tmp;}
							nm = $.jgrid.jqID(nm);
							switch (cm[i].edittype) {
							case 'password':
							case 'text':
							case 'button' :
							case 'image':
							case 'textarea':
								if(tmp == '&nbsp;' || tmp == '&#160;' || (tmp.length==1 && tmp.charCodeAt(0)==160) ) {tmp='';}
								$('#'+nm,'#'+fmid).val(tmp);
								break;
							case 'select':
								var opv = tmp.split(',');
								opv = $.map(opv,function(n){return $.trim(n);});
								$('#'+nm+' option','#'+fmid).each(function(){
									if (!cm[i].editoptions.multiple && ($.trim(tmp) == $.trim($(this).text()) || opv[0] == $.trim($(this).text()) || opv[0] == $.trim($(this).val())) ){
										this.selected= true;
									} else if (cm[i].editoptions.multiple){
										if(  $.inArray($.trim($(this).text()), opv ) > -1 || $.inArray($.trim($(this).val()), opv ) > -1  ){
											this.selected = true;
										}else{
											this.selected = false;
										}
									} else {
										this.selected = false;
									}
								});
								break;
							case 'checkbox':
								tmp = String(tmp);
								if(cm[i].editoptions && cm[i].editoptions.value) {
									var cb = cm[i].editoptions.value.split(':');
									if(cb[0] == tmp) {
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('checked',true);
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('defaultChecked',true); //ie
									} else {
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('checked', false);
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('defaultChecked', false); //ie
									}
								} else {
									tmp = tmp.toLowerCase();
									if(tmp.search(/(false|0|no|off|undefined)/i)<0 && tmp!=='') {
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('checked',true);
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('defaultChecked',true); //ie
									} else {
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('checked', false);
										$('#'+nm,'#'+fmid)[$t.p.useProp ? 'prop': 'attr']('defaultChecked', false); //ie
									}
								}
								break;
							case 'custom' :
								try {
									if(cm[i].editoptions && $.isFunction(cm[i].editoptions.custom_value)) {
										cm[i].editoptions.custom_value.call($t, $('#'+nm,'#'+fmid),'set',tmp);
									} else {throw 'e1';}
								} catch (e) {
									if (e=='e1') {$.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.nodefined,$.jgrid.edit.bClose);}
									else {$.jgrid.info_dialog($.jgrid.errors.errcap,e.message,$.jgrid.edit.bClose);}
								}
								break;
							}
							cnt++;
						}
					});
					if(cnt>0) {$('#id_g',frmtb).val(rowid);}
				}
				function setNulls() {
					$.each($t.p.colModel, function(i,n){
						if(n.editoptions && n.editoptions.NullIfEmpty === true) {
							if(postdata.hasOwnProperty(n.name) && postdata[n.name] === '') {
								postdata[n.name] = 'null';
							}
						}
					});
				}
				function postIt() {
					var copydata, ret=[true,'',''], onCS = {}, opers = $t.p.prmNames, idname, oper, key, selr, i;

					var retvals = $($t).triggerHandler('jqGridAddEditBeforeCheckValues', [$('#'+frmgr), frmoper]);
					if(retvals && typeof retvals === 'object') {postdata = retvals;}

					if($.isFunction(rp_ge[$t.p.id].beforeCheckValues)) {
						retvals = rp_ge[$t.p.id].beforeCheckValues.call($t, postdata,$('#'+frmgr),postdata[$t.p.id+'_id'] == '_empty' ? opers.addoper : opers.editoper);
						if(retvals && typeof retvals === 'object') {postdata = retvals;}
					}
					for( key in postdata ){
						if(postdata.hasOwnProperty(key)) {
							ret = $.jgrid.checkValues.call($t,postdata[key],key,$t);
							if(ret[0] === false) {break;}
						}
					}
					setNulls();
					if(ret[0]) {
						onCS = $($t).triggerHandler('jqGridAddEditClickSubmit', [rp_ge[$t.p.id], postdata, frmoper]);
						if( onCS === undefined && $.isFunction( rp_ge[$t.p.id].onclickSubmit)) {
							onCS = rp_ge[$t.p.id].onclickSubmit.call($t, rp_ge[$t.p.id], postdata) || {};
						}
						ret = $($t).triggerHandler('jqGridAddEditBeforeSubmit', [postdata, $('#'+frmgr), frmoper]);
						if(ret === undefined) {
							ret = [true,'',''];
						}
						if( ret[0] && $.isFunction(rp_ge[$t.p.id].beforeSubmit))  {
							ret = rp_ge[$t.p.id].beforeSubmit.call($t,postdata,$('#'+frmgr));
						}
					}

					if(ret[0] && !rp_ge[$t.p.id].processing) {
						rp_ge[$t.p.id].processing = true;
						$('#sData', frmtb+'_2').addClass('ui-state-active');
						oper = opers.oper;
						idname = opers.id;
						// we add to pos data array the action - the name is oper
						postdata[oper] = ($.trim(postdata[$t.p.id+'_id']) == '_empty') ? opers.addoper : opers.editoper;
						if(postdata[oper] != opers.addoper) {
							postdata[idname] = postdata[$t.p.id+'_id'];
						} else {
						// check to see if we have allredy this field in the form and if yes lieve it
							if( postdata[idname] === undefined ) {postdata[idname] = postdata[$t.p.id+'_id'];}
						}
						delete postdata[$t.p.id+'_id'];
						postdata = $.extend(postdata,rp_ge[$t.p.id].editData,onCS);
						if($t.p.treeGrid === true)  {
							if(postdata[oper] == opers.addoper) {
								selr = $($t).jqGrid('getGridParam', 'selrow');
								var tr_par_id = $t.p.treeGridModel == 'adjacency' ? $t.p.treeReader.parent_id_field : 'parent_id';
								postdata[tr_par_id] = selr;
							}
							for(i in $t.p.treeReader){
								if($t.p.treeReader.hasOwnProperty(i)) {
									var itm = $t.p.treeReader[i];
									if(postdata.hasOwnProperty(itm)) {
										if(postdata[oper] == opers.addoper && i === 'parent_id_field') {continue;}
										delete postdata[itm];
									}
								}
							}
						}

						postdata[idname] = $.jgrid.stripPref($t.p.idPrefix, postdata[idname]);
						var ajaxOptions = $.extend({
							url: rp_ge[$t.p.id].url || $($t).jqGrid('getGridParam','editurl'),
							type: rp_ge[$t.p.id].mtype,
							data: $.isFunction(rp_ge[$t.p.id].serializeEditData) ? rp_ge[$t.p.id].serializeEditData.call($t,postdata) :  postdata,
							complete:function(data,status){
								var key;
								postdata[idname] = $t.p.idPrefix + postdata[idname];
								if(status != 'success') {
									ret[0] = false;
									ret[1] = $($t).triggerHandler('jqGridAddEditErrorTextFormat', [data, frmoper]);
									if ($.isFunction(rp_ge[$t.p.id].errorTextFormat)) {
										ret[1] = rp_ge[$t.p.id].errorTextFormat.call($t, data);
									} else {
										ret[1] = status + ' Status: \'' + data.statusText + '\'. Error code: ' + data.status;
									}
								} else {
								// data is posted successful
								// execute aftersubmit with the returned data from server
									ret = $($t).triggerHandler('jqGridAddEditAfterSubmit', [data, postdata, frmoper]);
									if(ret === undefined) {
										ret = [true,'',''];
									}
									if( ret[0] && $.isFunction(rp_ge[$t.p.id].afterSubmit) ) {
										ret = rp_ge[$t.p.id].afterSubmit.call($t, data,postdata);
									}
								}
								if(ret[0] === false) {
									$('#FormError>td',frmtb).html(ret[1]);
									$('#FormError',frmtb).show();
								} else {
								// remove some values if formattaer select or checkbox
									$.each($t.p.colModel, function(){
										if(extpost[this.name] && this.formatter && this.formatter=='select') {
											try {delete extpost[this.name];} catch (e) {}
										}
									});
									postdata = $.extend(postdata,extpost);
									if($t.p.autoencode) {
										$.each(postdata,function(n,v){
											postdata[n] = $.jgrid.htmlDecode(v);
										});
									}
									//rp_ge[$t.p.id].reloadAfterSubmit = rp_ge[$t.p.id].reloadAfterSubmit && $t.p.datatype != "local";
									// the action is add
									if(postdata[oper] == opers.addoper ) {
									//id processing
									// user not set the id ret[2]
										if(!ret[2]) {ret[2] = $.jgrid.randId();}
										postdata[idname] = ret[2];
										if(rp_ge[$t.p.id].closeAfterAdd) {
											if(rp_ge[$t.p.id].reloadAfterSubmit) {$($t).trigger('reloadGrid');}
											else {
												if($t.p.treeGrid === true){
													$($t).jqGrid('addChildNode',ret[2],selr,postdata );
												} else {
													$($t).jqGrid('addRowData',ret[2],postdata,p.addedrow);
													$($t).jqGrid('setSelection',ret[2]);
												}
											}
											$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,onClose: rp_ge[$t.p.id].onClose});
										} else if (rp_ge[$t.p.id].clearAfterAdd) {
											if(rp_ge[$t.p.id].reloadAfterSubmit) {$($t).trigger('reloadGrid');}
											else {
												if($t.p.treeGrid === true){
													$($t).jqGrid('addChildNode',ret[2],selr,postdata );
												} else {
													$($t).jqGrid('addRowData',ret[2],postdata,p.addedrow);
												}
											}
											fillData('_empty',$t,frmgr);
										} else {
											if(rp_ge[$t.p.id].reloadAfterSubmit) {$($t).trigger('reloadGrid');}
											else {
												if($t.p.treeGrid === true){
													$($t).jqGrid('addChildNode',ret[2],selr,postdata );
												} else {
													$($t).jqGrid('addRowData',ret[2],postdata,p.addedrow);
												}
											}
										}
									} else {
									// the action is update
										if(rp_ge[$t.p.id].reloadAfterSubmit) {
											$($t).trigger('reloadGrid');
											if( !rp_ge[$t.p.id].closeAfterEdit ) {setTimeout(function(){$($t).jqGrid('setSelection',postdata[idname]);},1000);}
										} else {
											if($t.p.treeGrid === true) {
												$($t).jqGrid('setTreeRow', postdata[idname],postdata);
											} else {
												$($t).jqGrid('setRowData', postdata[idname],postdata);
											}
										}
										if(rp_ge[$t.p.id].closeAfterEdit) {$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,onClose: rp_ge[$t.p.id].onClose});}
									}
									if($.isFunction(rp_ge[$t.p.id].afterComplete)) {
										copydata = data;
										setTimeout(function(){
											$($t).triggerHandler('jqGridAddEditAfterComplete', [copydata, postdata, $('#'+frmgr), frmoper]);
											rp_ge[$t.p.id].afterComplete.call($t, copydata, postdata, $('#'+frmgr));
											copydata=null;
										},500);
									}
									if(rp_ge[$t.p.id].checkOnSubmit || rp_ge[$t.p.id].checkOnUpdate) {
										$('#'+frmgr).data('disabled',false);
										if(rp_ge[$t.p.id]._savedData[$t.p.id+'_id'] !='_empty'){
											for(key in rp_ge[$t.p.id]._savedData) {
												if(rp_ge[$t.p.id]._savedData.hasOwnProperty(key) && postdata[key]) {
													rp_ge[$t.p.id]._savedData[key] = postdata[key];
												}
											}
										}
									}
								}
								rp_ge[$t.p.id].processing=false;
								$('#sData', frmtb+'_2').removeClass('ui-state-active');
								try{$(':input:visible','#'+frmgr)[0].focus();} catch (e){}
							}
						}, $.jgrid.ajaxOptions, rp_ge[$t.p.id].ajaxEditOptions );

						if (!ajaxOptions.url && !rp_ge[$t.p.id].useDataProxy) {
							if ($.isFunction($t.p.dataProxy)) {
								rp_ge[$t.p.id].useDataProxy = true;
							} else {
								ret[0]=false;ret[1] += ' '+$.jgrid.errors.nourl;
							}
						}
						if (ret[0]) {
							if (rp_ge[$t.p.id].useDataProxy) {
								var dpret = $t.p.dataProxy.call($t, ajaxOptions, 'set_'+$t.p.id);
								if(dpret === undefined) {
									dpret = [true, ''];
								}
								if(dpret[0] === false ) {
									ret[0] = false;
									ret[1] = dpret[1] || 'Error deleting the selected row!' ;
								} else {
									if(ajaxOptions.data.oper == opers.addoper && rp_ge[$t.p.id].closeAfterAdd ) {
										$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});
									}
									if(ajaxOptions.data.oper == opers.editoper && rp_ge[$t.p.id].closeAfterEdit ) {
										$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});
									}
								}
							} else {
								$.ajax(ajaxOptions);
							}
						}
					}
					if(ret[0] === false) {
						$('#FormError>td',frmtb).html(ret[1]);
						$('#FormError',frmtb).show();
					// return;
					}
				}
				function compareData(nObj, oObj ) {
					var ret = false,key;
					for (key in nObj) {
						if(nObj.hasOwnProperty(key) && nObj[key] != oObj[key]) {
							ret = true;
							break;
						}
					}
					return ret;
				}
				function checkUpdates () {
					var stat = true;
					$('#FormError',frmtb).hide();
					if(rp_ge[$t.p.id].checkOnUpdate) {
						postdata = {};extpost={};
						getFormData();
						newData = $.extend({},postdata,extpost);
						diff = compareData(newData,rp_ge[$t.p.id]._savedData);
						if(diff) {
							$('#'+frmgr).data('disabled',true);
							$('.confirm','#'+IDs.themodal).show();
							stat = false;
						}
					}
					return stat;
				}
				function restoreInline()
				{
					var i;
					if (rowid !== '_empty' && $t.p.savedRow !== undefined && $t.p.savedRow.length > 0 && $.isFunction($.fn.jqGrid.restoreRow)) {
						for (i=0;i<$t.p.savedRow.length;i++) {
							if ($t.p.savedRow[i].id == rowid) {
								$($t).jqGrid('restoreRow',rowid);
								break;
							}
						}
					}
				}
				function updateNav(cr, posarr){
					var totr = posarr[1].length-1;
					if (cr===0) {
						$('#pData',frmtb+'_2').addClass('ui-state-disabled');
					} else if( posarr[1][cr-1] !== undefined && $('#'+$.jgrid.jqID(posarr[1][cr-1])).hasClass('ui-state-disabled')) {
						$('#pData',frmtb+'_2').addClass('ui-state-disabled');
					} else {
						$('#pData',frmtb+'_2').removeClass('ui-state-disabled');
					}

					if (cr==totr) {
						$('#nData',frmtb+'_2').addClass('ui-state-disabled');
					} else if( posarr[1][cr+1] !== undefined && $('#'+$.jgrid.jqID(posarr[1][cr+1])).hasClass('ui-state-disabled')) {
						$('#nData',frmtb+'_2').addClass('ui-state-disabled');
					} else {
						$('#nData',frmtb+'_2').removeClass('ui-state-disabled');
					}
				}
				function getCurrPos() {
					var rowsInGrid = $($t).jqGrid('getDataIDs'),
						selrow = $('#id_g',frmtb).val(),
						pos = $.inArray(selrow,rowsInGrid);
					return [pos,rowsInGrid];
				}

				if ( $('#'+$.jgrid.jqID(IDs.themodal))[0] !== undefined ) {
					showFrm = $($t).triggerHandler('jqGridAddEditBeforeInitData', [$('#'+$.jgrid.jqID(frmgr)), frmoper]);
					if(showFrm === undefined) {
						showFrm = true;
					}
					if(showFrm && onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+frmgr));
					}
					if(showFrm === false) {return;}
					restoreInline();
					$('.ui-jqdialog-title','#'+$.jgrid.jqID(IDs.modalhead)).html(p.caption);
					$('#FormError',frmtb).hide();
					if(rp_ge[$t.p.id].topinfo) {
						$('.topinfo',frmtb).html(rp_ge[$t.p.id].topinfo);
						$('.tinfo',frmtb).show();
					} else {
						$('.tinfo',frmtb).hide();
					}
					if(rp_ge[$t.p.id].bottominfo) {
						$('.bottominfo',frmtb+'_2').html(rp_ge[$t.p.id].bottominfo);
						$('.binfo',frmtb+'_2').show();
					} else {
						$('.binfo',frmtb+'_2').hide();
					}
					// filldata
					fillData(rowid,$t,frmgr);
					///
					if(rowid=='_empty' || !rp_ge[$t.p.id].viewPagerButtons) {
						$('#pData, #nData',frmtb+'_2').hide();
					} else {
						$('#pData, #nData',frmtb+'_2').show();
					}
					if(rp_ge[$t.p.id].processing===true) {
						rp_ge[$t.p.id].processing=false;
						$('#sData', frmtb+'_2').removeClass('ui-state-active');
					}
					if($('#'+frmgr).data('disabled')===true) {
						$('.confirm','#'+$.jgrid.jqID(IDs.themodal)).hide();
						$('#'+frmgr).data('disabled',false);
					}
					$($t).triggerHandler('jqGridAddEditBeforeShowForm', [$('#'+frmgr), frmoper]);
					if(onBeforeShow) { onBeforeShow.call($t, $('#'+frmgr)); }
					$('#'+$.jgrid.jqID(IDs.themodal)).data('onClose',rp_ge[$t.p.id].onClose);
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, jqM: false, overlay: p.overlay, modal:p.modal});
					if(!closeovrl) {
						$('.jqmOverlay').click(function(){
							if(!checkUpdates()) {return false;}
							$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});
							return false;
						});
					}
					$($t).triggerHandler('jqGridAddEditAfterShowForm', [$('#'+frmgr), frmoper]);
					if(onAfterShow) { onAfterShow.call($t, $('#'+frmgr)); }
				} else {
					var dh = isNaN(p.dataheight) ? p.dataheight : p.dataheight+'px',
						dw = isNaN(p.datawidth) ? p.datawidth : p.datawidth+'px',
						frm = $('<form name=\'FormPost\' id=\''+frmgr+'\' class=\'FormGrid\' onSubmit=\'return false;\' style=\'width:'+dw+';overflow:auto;position:relative;height:'+dh+';\'></form>').data('disabled',false),
						tbl = $('<table id=\''+frmtborg+'\' class=\'EditTable\' cellspacing=\'0\' cellpadding=\'0\' border=\'0\'><tbody></tbody></table>');
					showFrm = $($t).triggerHandler('jqGridAddEditBeforeInitData', [$('#'+frmgr), frmoper]);
					if(showFrm === undefined) {
						showFrm = true;
					}
					if(showFrm && onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+frmgr));
					}
					if(showFrm === false) {return;}
					restoreInline();
					$($t.p.colModel).each( function() {
						var fmto = this.formoptions;
						maxCols = Math.max(maxCols, fmto ? fmto.colpos || 0 : 0 );
						maxRows = Math.max(maxRows, fmto ? fmto.rowpos || 0 : 0 );
					});
					$(frm).append(tbl);
					var flr = $('<tr id=\'FormError\' style=\'display:none\'><td class=\'ui-state-error\' colspan=\''+(maxCols*2)+'\'></td></tr>');
					flr[0].rp = 0;
					$(tbl).append(flr);
					//topinfo
					flr = $('<tr style=\'display:none\' class=\'tinfo\'><td class=\'topinfo\' colspan=\''+(maxCols*2)+'\'>'+rp_ge[$t.p.id].topinfo+'</td></tr>');
					flr[0].rp = 0;
					$(tbl).append(flr);
					// set the id.
					// use carefull only to change here colproperties.
					// create data
					var rtlb = $t.p.direction == 'rtl' ? true :false,
						bp = rtlb ? 'nData' : 'pData',
						bn = rtlb ? 'pData' : 'nData';
					createData(rowid,$t,tbl,maxCols);
					// buttons at footer
					var bP = '<a href=\'javascript:void(0)\' id=\''+bp+'\' class=\'fm-button ui-state-default ui-corner-left\'><span class=\'ui-icon ui-icon-triangle-1-w\'></span></a>',
						bN = '<a href=\'javascript:void(0)\' id=\''+bn+'\' class=\'fm-button ui-state-default ui-corner-right\'><span class=\'ui-icon ui-icon-triangle-1-e\'></span></a>',
						bS  ='<a href=\'javascript:void(0)\' id=\'sData\' class=\'fm-button ui-state-default ui-corner-all\'>'+p.bSubmit+'</a>',
						bC  ='<a href=\'javascript:void(0)\' id=\'cData\' class=\'fm-button ui-state-default ui-corner-all\'>'+p.bCancel+'</a>';
					var bt = '<table border=\'0\' cellspacing=\'0\' cellpadding=\'0\' class=\'EditTable\' id=\''+frmtborg+'_2\'><tbody><tr><td colspan=\'2\'><hr class=\'ui-widget-content\' style=\'margin:1px\'/></td></tr><tr id=\'Act_Buttons\'><td class=\'navButton\'>'+(rtlb ? bN+bP : bP+bN)+'</td><td class=\'EditButton\'>'+bS+bC+'</td></tr>';
					bt += '<tr style=\'display:none\' class=\'binfo\'><td class=\'bottominfo\' colspan=\'2\'>'+rp_ge[$t.p.id].bottominfo+'</td></tr>';
					bt += '</tbody></table>';
					if(maxRows >  0) {
						var sd=[];
						$.each($(tbl)[0].rows,function(i,r){
							sd[i] = r;
						});
						sd.sort(function(a,b){
							if(a.rp > b.rp) {return 1;}
							if(a.rp < b.rp) {return -1;}
							return 0;
						});
						$.each(sd, function(index, row) {
							$('tbody',tbl).append(row);
						});
					}
					p.gbox = '#gbox_'+$.jgrid.jqID(gID);
					var cle = false;
					if(p.closeOnEscape===true){
						p.closeOnEscape = false;
						cle = true;
					}
					var tms = $('<div></div>').append(frm).append(bt);
					$.jgrid.createModal(IDs,tms,p,'#gview_'+$.jgrid.jqID($t.p.id),$('#gbox_'+$.jgrid.jqID($t.p.id))[0]);
					if(rtlb) {
						$('#pData, #nData',frmtb+'_2').css('float','right');
						$('.EditButton',frmtb+'_2').css('text-align','left');
					}
					if(rp_ge[$t.p.id].topinfo) {$('.tinfo',frmtb).show();}
					if(rp_ge[$t.p.id].bottominfo) {$('.binfo',frmtb+'_2').show();}
					tms = null;bt=null;
					$('#'+$.jgrid.jqID(IDs.themodal)).keydown( function( e ) {
						var wkey = e.target;
						if ($('#'+frmgr).data('disabled')===true ) {return false;}//??
						if(rp_ge[$t.p.id].savekey[0] === true && e.which == rp_ge[$t.p.id].savekey[1]) { // save
							if(wkey.tagName != 'TEXTAREA') {
								$('#sData', frmtb+'_2').trigger('click');
								return false;
							}
						}
						if(e.which === 27) {
							if(!checkUpdates()) {return false;}
							if(cle)	{$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:p.gbox,jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});}
							return false;
						}
						if(rp_ge[$t.p.id].navkeys[0]===true) {
							if($('#id_g',frmtb).val() == '_empty') {return true;}
							if(e.which == rp_ge[$t.p.id].navkeys[1]){ //up
								$('#pData', frmtb+'_2').trigger('click');
								return false;
							}
							if(e.which == rp_ge[$t.p.id].navkeys[2]){ //down
								$('#nData', frmtb+'_2').trigger('click');
								return false;
							}
						}
					});
					if(p.checkOnUpdate) {
						$('a.ui-jqdialog-titlebar-close span','#'+$.jgrid.jqID(IDs.themodal)).removeClass('jqmClose');
						$('a.ui-jqdialog-titlebar-close','#'+$.jgrid.jqID(IDs.themodal)).unbind('click')
							.click(function(){
								if(!checkUpdates()) {return false;}
								$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,onClose: rp_ge[$t.p.id].onClose});
								return false;
							});
					}
					p.saveicon = $.extend([true,'left','ui-icon-disk'],p.saveicon);
					p.closeicon = $.extend([true,'left','ui-icon-close'],p.closeicon);
					// beforeinitdata after creation of the form
					if(p.saveicon[0]===true) {
						$('#sData',frmtb+'_2').addClass(p.saveicon[1] == 'right' ? 'fm-button-icon-right' : 'fm-button-icon-left')
							.append('<span class=\'ui-icon '+p.saveicon[2]+'\'></span>');
					}
					if(p.closeicon[0]===true) {
						$('#cData',frmtb+'_2').addClass(p.closeicon[1] == 'right' ? 'fm-button-icon-right' : 'fm-button-icon-left')
							.append('<span class=\'ui-icon '+p.closeicon[2]+'\'></span>');
					}
					if(rp_ge[$t.p.id].checkOnSubmit || rp_ge[$t.p.id].checkOnUpdate) {
						bS  ='<a href=\'javascript:void(0)\' id=\'sNew\' class=\'fm-button ui-state-default ui-corner-all\' style=\'z-index:1002\'>'+p.bYes+'</a>';
						bN  ='<a href=\'javascript:void(0)\' id=\'nNew\' class=\'fm-button ui-state-default ui-corner-all\' style=\'z-index:1002\'>'+p.bNo+'</a>';
						bC  ='<a href=\'javascript:void(0)\' id=\'cNew\' class=\'fm-button ui-state-default ui-corner-all\' style=\'z-index:1002\'>'+p.bExit+'</a>';
						var zI = p.zIndex  || 999;zI ++;
						$('<div class=\'ui-widget-overlay jqgrid-overlay confirm\' style=\'z-index:'+zI+';display:none;\'>&#160;'+'</div><div class=\'confirm ui-widget-content ui-jqconfirm\' style=\'z-index:'+(zI+1)+'\'>'+p.saveData+'<br/><br/>'+bS+bN+bC+'</div>').insertAfter('#'+frmgr);
						$('#sNew','#'+$.jgrid.jqID(IDs.themodal)).click(function(){
							postIt();
							$('#'+frmgr).data('disabled',false);
							$('.confirm','#'+$.jgrid.jqID(IDs.themodal)).hide();
							return false;
						});
						$('#nNew','#'+$.jgrid.jqID(IDs.themodal)).click(function(){
							$('.confirm','#'+$.jgrid.jqID(IDs.themodal)).hide();
							$('#'+frmgr).data('disabled',false);
							setTimeout(function(){$(':input','#'+frmgr)[0].focus();},0);
							return false;
						});
						$('#cNew','#'+$.jgrid.jqID(IDs.themodal)).click(function(){
							$('.confirm','#'+$.jgrid.jqID(IDs.themodal)).hide();
							$('#'+frmgr).data('disabled',false);
							$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,onClose: rp_ge[$t.p.id].onClose});
							return false;
						});
					}
					// here initform - only once
					$($t).triggerHandler('jqGridAddEditInitializeForm', [$('#'+frmgr), frmoper]);
					if(onInitializeForm) {onInitializeForm.call($t,$('#'+frmgr));}
					if(rowid=='_empty' || !rp_ge[$t.p.id].viewPagerButtons) {$('#pData,#nData',frmtb+'_2').hide();} else {$('#pData,#nData',frmtb+'_2').show();}
					$($t).triggerHandler('jqGridAddEditBeforeShowForm', [$('#'+frmgr), frmoper]);
					if(onBeforeShow) { onBeforeShow.call($t, $('#'+frmgr));}
					$('#'+$.jgrid.jqID(IDs.themodal)).data('onClose',rp_ge[$t.p.id].onClose);
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, overlay: p.overlay,modal:p.modal});
					if(!closeovrl) {
						$('.jqmOverlay').click(function(){
							if(!checkUpdates()) {return false;}
							$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});
							return false;
						});
					}
					$($t).triggerHandler('jqGridAddEditAfterShowForm', [$('#'+frmgr), frmoper]);
					if(onAfterShow) { onAfterShow.call($t, $('#'+frmgr)); }
					$('.fm-button','#'+$.jgrid.jqID(IDs.themodal)).hover(
						function(){$(this).addClass('ui-state-hover');},
						function(){$(this).removeClass('ui-state-hover');}
					);
					$('#sData', frmtb+'_2').click(function(){
						postdata = {};extpost={};
						$('#FormError',frmtb).hide();
						// all depend on ret array
						//ret[0] - succes
						//ret[1] - msg if not succes
						//ret[2] - the id  that will be set if reload after submit false
						getFormData();
						if(postdata[$t.p.id+'_id'] == '_empty')	{postIt();}
						else if(p.checkOnSubmit===true ) {
							newData = $.extend({},postdata,extpost);
							diff = compareData(newData,rp_ge[$t.p.id]._savedData);
							if(diff) {
								$('#'+frmgr).data('disabled',true);
								$('.confirm','#'+$.jgrid.jqID(IDs.themodal)).show();
							} else {
								postIt();
							}
						} else {
							postIt();
						}
						return false;
					});
					$('#cData', frmtb+'_2').click(function(){
						if(!checkUpdates()) {return false;}
						$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,onClose: rp_ge[$t.p.id].onClose});
						return false;
					});
					$('#nData', frmtb+'_2').click(function(){
						if(!checkUpdates()) {return false;}
						$('#FormError',frmtb).hide();
						var npos = getCurrPos();
						npos[0] = parseInt(npos[0],10);
						if(npos[0] != -1 && npos[1][npos[0]+1]) {
							$($t).triggerHandler('jqGridAddEditClickPgButtons', ['next',$('#'+frmgr),npos[1][npos[0]]]);
							var nposret;
							if($.isFunction(p.onclickPgButtons)) {
								nposret = p.onclickPgButtons.call($t, 'next',$('#'+frmgr),npos[1][npos[0]]);
								if( nposret !== undefined && nposret === false ) {return false;}
							}
							if( $('#'+$.jgrid.jqID(npos[1][npos[0]+1])).hasClass('ui-state-disabled')) {return false;}
							fillData(npos[1][npos[0]+1],$t,frmgr);
							$($t).jqGrid('setSelection',npos[1][npos[0]+1]);
							$($t).triggerHandler('jqGridAddEditAfterClickPgButtons', ['next',$('#'+frmgr),npos[1][npos[0]]]);
							if($.isFunction(p.afterclickPgButtons)) {
								p.afterclickPgButtons.call($t, 'next',$('#'+frmgr),npos[1][npos[0]+1]);
							}
							updateNav(npos[0]+1,npos);
						}
						return false;
					});
					$('#pData', frmtb+'_2').click(function(){
						if(!checkUpdates()) {return false;}
						$('#FormError',frmtb).hide();
						var ppos = getCurrPos();
						if(ppos[0] != -1 && ppos[1][ppos[0]-1]) {
							$($t).triggerHandler('jqGridAddEditClickPgButtons', ['prev',$('#'+frmgr),ppos[1][ppos[0]]]);
							var pposret;
							if($.isFunction(p.onclickPgButtons)) {
								pposret = p.onclickPgButtons.call($t, 'prev',$('#'+frmgr),ppos[1][ppos[0]]);
								if( pposret !== undefined && pposret === false ) {return false;}
							}
							if( $('#'+$.jgrid.jqID(ppos[1][ppos[0]-1])).hasClass('ui-state-disabled')) {return false;}
							fillData(ppos[1][ppos[0]-1],$t,frmgr);
							$($t).jqGrid('setSelection',ppos[1][ppos[0]-1]);
							$($t).triggerHandler('jqGridAddEditAfterClickPgButtons', ['prev',$('#'+frmgr),ppos[1][ppos[0]]]);
							if($.isFunction(p.afterclickPgButtons)) {
								p.afterclickPgButtons.call($t, 'prev',$('#'+frmgr),ppos[1][ppos[0]-1]);
							}
							updateNav(ppos[0]-1,ppos);
						}
						return false;
					});
				}
				var posInit =getCurrPos();
				updateNav(posInit[0],posInit);

			});
		},
		viewGridRow : function(rowid, p){
			p = $.extend(true, {
				top : 0,
				left: 0,
				width: 0,
				datawidth: 'auto',
				height: 'auto',
				dataheight: 'auto',
				modal: false,
				overlay: 30,
				drag: true,
				resize: true,
				jqModal: true,
				closeOnEscape : false,
				labelswidth: '30%',
				closeicon: [],
				navkeys: [false,38,40],
				onClose: null,
				beforeShowForm : null,
				beforeInitData : null,
				viewPagerButtons : true
			}, $.jgrid.view, p || {});
			rp_ge[$(this)[0].p.id] = p;
			return this.each(function(){
				var $t = this;
				if (!$t.grid || !rowid) {return;}
				var gID = $t.p.id,
					frmgr = 'ViewGrid_'+$.jgrid.jqID( gID  ), frmtb = 'ViewTbl_' + $.jgrid.jqID( gID ),
					frmgr_id = 'ViewGrid_'+gID, frmtb_id = 'ViewTbl_'+gID,
					IDs = {themodal:'viewmod'+gID,modalhead:'viewhd'+gID,modalcontent:'viewcnt'+gID, scrollelm : frmgr},
					onBeforeInit = $.isFunction(rp_ge[$t.p.id].beforeInitData) ? rp_ge[$t.p.id].beforeInitData : false,
					showFrm = true,
					maxCols = 1, maxRows=0;
				function focusaref(){ //Sfari 3 issues
					if(rp_ge[$t.p.id].closeOnEscape===true || rp_ge[$t.p.id].navkeys[0]===true) {
						setTimeout(function(){$('.ui-jqdialog-titlebar-close','#'+$.jgrid.jqID(IDs.modalhead)).focus();},0);
					}
				}
				function createData(rowid,obj,tb,maxcols){
					var nm, hc,trdata, cnt=0,tmp, dc, retpos=[], ind=false, i,
						tdtmpl = '<td class=\'CaptionTD form-view-label ui-widget-content\' width=\''+p.labelswidth+'\'>&#160;</td><td class=\'DataTD form-view-data ui-helper-reset ui-widget-content\'>&#160;</td>', tmpl='',
						tdtmpl2 = '<td class=\'CaptionTD form-view-label ui-widget-content\'>&#160;</td><td class=\'DataTD form-view-data ui-widget-content\'>&#160;</td>',
						fmtnum = ['integer','number','currency'],max1 =0, max2=0 ,maxw,setme, viewfld;
					for (i=1;i<=maxcols;i++) {
						tmpl += i == 1 ? tdtmpl : tdtmpl2;
					}
					// find max number align rigth with property formatter
					$(obj.p.colModel).each( function() {
						if(this.editrules && this.editrules.edithidden === true) {
							hc = false;
						} else {
							hc = this.hidden === true ? true : false;
						}
						if(!hc && this.align==='right') {
							if(this.formatter && $.inArray(this.formatter,fmtnum) !== -1 ) {
								max1 = Math.max(max1,parseInt(this.width,10));
							} else {
								max2 = Math.max(max2,parseInt(this.width,10));
							}
						}
					});
					maxw  = max1 !==0 ? max1 : max2 !==0 ? max2 : 0;
					ind = $(obj).jqGrid('getInd',rowid);
					$(obj.p.colModel).each( function(i) {
						nm = this.name;
						setme = false;
						// hidden fields are included in the form
						if(this.editrules && this.editrules.edithidden === true) {
							hc = false;
						} else {
							hc = this.hidden === true ? true : false;
						}
						dc = hc ? 'style=\'display:none\'' : '';
						viewfld = (typeof this.viewable !== 'boolean') ? true : this.viewable;
						if ( nm !== 'cb' && nm !== 'subgrid' && nm !== 'rn' && viewfld) {
							if(ind === false) {
								tmp = '';
							} else {
								if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {
									tmp = $('td:eq('+i+')',obj.rows[ind]).text();
								} else {
									tmp = $('td:eq('+i+')',obj.rows[ind]).html();
								}
							}
							setme = this.align === 'right' && maxw !==0 ? true : false;
							var frmopt = $.extend({},{rowabove:false,rowcontent:''}, this.formoptions || {}),
								rp = parseInt(frmopt.rowpos,10) || cnt+1,
								cp = parseInt((parseInt(frmopt.colpos,10) || 1)*2,10);
							if(frmopt.rowabove) {
								var newdata = $('<tr><td class=\'contentinfo\' colspan=\''+(maxcols*2)+'\'>'+frmopt.rowcontent+'</td></tr>');
								$(tb).append(newdata);
								newdata[0].rp = rp;
							}
							trdata = $(tb).find('tr[rowpos='+rp+']');
							if ( trdata.length===0 ) {
								trdata = $('<tr '+dc+' rowpos=\''+rp+'\'></tr>').addClass('FormData').attr('id','trv_'+nm);
								$(trdata).append(tmpl);
								$(tb).append(trdata);
								trdata[0].rp = rp;
							}
							$('td:eq('+(cp-2)+')',trdata[0]).html('<b>'+ (frmopt.label === undefined ? obj.p.colNames[i]: frmopt.label)+'</b>');
							$('td:eq('+(cp-1)+')',trdata[0]).append('<span>'+tmp+'</span>').attr('id','v_'+nm);
							if(setme){
								$('td:eq('+(cp-1)+') span',trdata[0]).css({'text-align':'right',width:maxw+'px'});
							}
							retpos[cnt] = i;
							cnt++;
						}
					});
					if( cnt > 0) {
						var idrow = $('<tr class=\'FormData\' style=\'display:none\'><td class=\'CaptionTD\'></td><td colspan=\''+ (maxcols*2-1)+'\' class=\'DataTD\'><input class=\'FormElement\' id=\'id_g\' type=\'text\' name=\'id\' value=\''+rowid+'\'/></td></tr>');
						idrow[0].rp = cnt+99;
						$(tb).append(idrow);
					}
					return retpos;
				}
				function fillData(rowid,obj){
					var nm, hc,cnt=0,tmp, opt,trv;
					trv = $(obj).jqGrid('getInd',rowid,true);
					if(!trv) {return;}
					$('td',trv).each( function(i) {
						nm = obj.p.colModel[i].name;
						// hidden fields are included in the form
						if(obj.p.colModel[i].editrules && obj.p.colModel[i].editrules.edithidden === true) {
							hc = false;
						} else {
							hc = obj.p.colModel[i].hidden === true ? true : false;
						}
						if ( nm !== 'cb' && nm !== 'subgrid' && nm !== 'rn') {
							if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {
								tmp = $(this).text();
							} else {
								tmp = $(this).html();
							}
							opt = $.extend({},obj.p.colModel[i].editoptions || {});
							nm = $.jgrid.jqID('v_'+nm);
							$('#'+nm+' span','#'+frmtb).html(tmp);
							if (hc) {$('#'+nm,'#'+frmtb).parents('tr:first').hide();}
							cnt++;
						}
					});
					if(cnt>0) {$('#id_g','#'+frmtb).val(rowid);}
				}
				function updateNav(cr,posarr){
					var totr = posarr[1].length-1;
					if (cr===0) {
						$('#pData','#'+frmtb+'_2').addClass('ui-state-disabled');
					} else if( posarr[1][cr-1] !== undefined && $('#'+$.jgrid.jqID(posarr[1][cr-1])).hasClass('ui-state-disabled')) {
						$('#pData',frmtb+'_2').addClass('ui-state-disabled');
					} else {
						$('#pData','#'+frmtb+'_2').removeClass('ui-state-disabled');
					}
					if (cr==totr) {
						$('#nData','#'+frmtb+'_2').addClass('ui-state-disabled');
					} else if( posarr[1][cr+1] !== undefined && $('#'+$.jgrid.jqID(posarr[1][cr+1])).hasClass('ui-state-disabled')) {
						$('#nData',frmtb+'_2').addClass('ui-state-disabled');
					} else {
						$('#nData','#'+frmtb+'_2').removeClass('ui-state-disabled');
					}
				}
				function getCurrPos() {
					var rowsInGrid = $($t).jqGrid('getDataIDs'),
						selrow = $('#id_g','#'+frmtb).val(),
						pos = $.inArray(selrow,rowsInGrid);
					return [pos,rowsInGrid];
				}

				if ( $('#'+$.jgrid.jqID(IDs.themodal))[0] !== undefined ) {
					if(onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+frmgr));
						if(showFrm === undefined) {
							showFrm = true;
						}
					}
					if(showFrm === false) {return;}
					$('.ui-jqdialog-title','#'+$.jgrid.jqID(IDs.modalhead)).html(p.caption);
					$('#FormError','#'+frmtb).hide();
					fillData(rowid,$t);
					if($.isFunction(rp_ge[$t.p.id].beforeShowForm)) {rp_ge[$t.p.id].beforeShowForm.call($t,$('#'+frmgr));}
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, jqM: false, overlay: p.overlay, modal:p.modal});
					focusaref();
				} else {
					var dh = isNaN(p.dataheight) ? p.dataheight : p.dataheight+'px',
						dw = isNaN(p.datawidth) ? p.datawidth : p.datawidth+'px',
						frm = $('<form name=\'FormPost\' id=\''+frmgr_id+'\' class=\'FormGrid\' style=\'width:'+dw+';overflow:auto;position:relative;height:'+dh+';\'></form>'),
						tbl =$('<table id=\''+frmtb_id+'\' class=\'EditTable\' cellspacing=\'1\' cellpadding=\'2\' border=\'0\' style=\'table-layout:fixed\'><tbody></tbody></table>');
					if(onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+frmgr));
						if(showFrm === undefined) {
							showFrm = true;
						}
					}
					if(showFrm === false) {return;}
					$($t.p.colModel).each( function() {
						var fmto = this.formoptions;
						maxCols = Math.max(maxCols, fmto ? fmto.colpos || 0 : 0 );
						maxRows = Math.max(maxRows, fmto ? fmto.rowpos || 0 : 0 );
					});
					// set the id.
					$(frm).append(tbl);
					createData(rowid, $t, tbl, maxCols);
					var rtlb = $t.p.direction == 'rtl' ? true :false,
						bp = rtlb ? 'nData' : 'pData',
						bn = rtlb ? 'pData' : 'nData',

						// buttons at footer
						bP = '<a href=\'javascript:void(0)\' id=\''+bp+'\' class=\'fm-button ui-state-default ui-corner-left\'><span class=\'ui-icon ui-icon-triangle-1-w\'></span></a>',
						bN = '<a href=\'javascript:void(0)\' id=\''+bn+'\' class=\'fm-button ui-state-default ui-corner-right\'><span class=\'ui-icon ui-icon-triangle-1-e\'></span></a>',
						bC  ='<a href=\'javascript:void(0)\' id=\'cData\' class=\'fm-button ui-state-default ui-corner-all\'>'+p.bClose+'</a>';
					if(maxRows >  0) {
						var sd=[];
						$.each($(tbl)[0].rows,function(i,r){
							sd[i] = r;
						});
						sd.sort(function(a,b){
							if(a.rp > b.rp) {return 1;}
							if(a.rp < b.rp) {return -1;}
							return 0;
						});
						$.each(sd, function(index, row) {
							$('tbody',tbl).append(row);
						});
					}
					p.gbox = '#gbox_'+$.jgrid.jqID(gID);
					var bt = $('<div></div>').append(frm).append('<table border=\'0\' class=\'EditTable\' id=\''+frmtb+'_2\'><tbody><tr id=\'Act_Buttons\'><td class=\'navButton\' width=\''+p.labelswidth+'\'>'+(rtlb ? bN+bP : bP+bN)+'</td><td class=\'EditButton\'>'+bC+'</td></tr></tbody></table>');
					$.jgrid.createModal(IDs,bt,p,'#gview_'+$.jgrid.jqID($t.p.id),$('#gview_'+$.jgrid.jqID($t.p.id))[0]);
					if(rtlb) {
						$('#pData, #nData','#'+frmtb+'_2').css('float','right');
						$('.EditButton','#'+frmtb+'_2').css('text-align','left');
					}
					if(!p.viewPagerButtons) {$('#pData, #nData','#'+frmtb+'_2').hide();}
					bt = null;
					$('#'+IDs.themodal).keydown( function( e ) {
						if(e.which === 27) {
							if(rp_ge[$t.p.id].closeOnEscape) {$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:p.gbox,jqm:p.jqModal, onClose: p.onClose});}
							return false;
						}
						if(p.navkeys[0]===true) {
							if(e.which === p.navkeys[1]){ //up
								$('#pData', '#'+frmtb+'_2').trigger('click');
								return false;
							}
							if(e.which === p.navkeys[2]){ //down
								$('#nData', '#'+frmtb+'_2').trigger('click');
								return false;
							}
						}
					});
					p.closeicon = $.extend([true,'left','ui-icon-close'],p.closeicon);
					if(p.closeicon[0]===true) {
						$('#cData','#'+frmtb+'_2').addClass(p.closeicon[1] == 'right' ? 'fm-button-icon-right' : 'fm-button-icon-left')
							.append('<span class=\'ui-icon '+p.closeicon[2]+'\'></span>');
					}
					if($.isFunction(p.beforeShowForm)) {p.beforeShowForm.call($t,$('#'+frmgr));}
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal,overlay: p.overlay, modal:p.modal});
					$('.fm-button:not(.ui-state-disabled)','#'+frmtb+'_2').hover(
						function(){$(this).addClass('ui-state-hover');},
						function(){$(this).removeClass('ui-state-hover');}
					);
					focusaref();
					$('#cData', '#'+frmtb+'_2').click(function(){
						$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: p.onClose});
						return false;
					});
					$('#nData', '#'+frmtb+'_2').click(function(){
						$('#FormError','#'+frmtb).hide();
						var npos = getCurrPos();
						npos[0] = parseInt(npos[0],10);
						if(npos[0] != -1 && npos[1][npos[0]+1]) {
							if($.isFunction(p.onclickPgButtons)) {
								p.onclickPgButtons.call($t,'next',$('#'+frmgr),npos[1][npos[0]]);
							}
							fillData(npos[1][npos[0]+1],$t);
							$($t).jqGrid('setSelection',npos[1][npos[0]+1]);
							if($.isFunction(p.afterclickPgButtons)) {
								p.afterclickPgButtons.call($t,'next',$('#'+frmgr),npos[1][npos[0]+1]);
							}
							updateNav(npos[0]+1,npos);
						}
						focusaref();
						return false;
					});
					$('#pData', '#'+frmtb+'_2').click(function(){
						$('#FormError','#'+frmtb).hide();
						var ppos = getCurrPos();
						if(ppos[0] != -1 && ppos[1][ppos[0]-1]) {
							if($.isFunction(p.onclickPgButtons)) {
								p.onclickPgButtons.call($t,'prev',$('#'+frmgr),ppos[1][ppos[0]]);
							}
							fillData(ppos[1][ppos[0]-1],$t);
							$($t).jqGrid('setSelection',ppos[1][ppos[0]-1]);
							if($.isFunction(p.afterclickPgButtons)) {
								p.afterclickPgButtons.call($t,'prev',$('#'+frmgr),ppos[1][ppos[0]-1]);
							}
							updateNav(ppos[0]-1,ppos);
						}
						focusaref();
						return false;
					});
				}
				var posInit =getCurrPos();
				updateNav(posInit[0],posInit);
			});
		},
		delGridRow : function(rowids,p) {
			p = $.extend(true, {
				top : 0,
				left: 0,
				width: 240,
				height: 'auto',
				dataheight : 'auto',
				modal: false,
				overlay: 30,
				drag: true,
				resize: true,
				url : '',
				mtype : 'POST',
				reloadAfterSubmit: true,
				beforeShowForm: null,
				beforeInitData : null,
				afterShowForm: null,
				beforeSubmit: null,
				onclickSubmit: null,
				afterSubmit: null,
				jqModal : true,
				closeOnEscape : false,
				delData: {},
				delicon : [],
				cancelicon : [],
				onClose : null,
				ajaxDelOptions : {},
				processing : false,
				serializeDelData : null,
				useDataProxy : false
			}, $.jgrid.del, p ||{});
			rp_ge[$(this)[0].p.id] = p;
			return this.each(function(){
				var $t = this;
				if (!$t.grid ) {return;}
				if(!rowids) {return;}
				var onBeforeShow = $.isFunction( rp_ge[$t.p.id].beforeShowForm  ),
					onAfterShow = $.isFunction( rp_ge[$t.p.id].afterShowForm ),
					onBeforeInit = $.isFunction(rp_ge[$t.p.id].beforeInitData) ? rp_ge[$t.p.id].beforeInitData : false,
					gID = $t.p.id, onCS = {},
					showFrm = true,
					dtbl = 'DelTbl_'+$.jgrid.jqID(gID),postd, idname, opers, oper,
					dtbl_id = 'DelTbl_' + gID,
					IDs = {themodal:'delmod'+gID,modalhead:'delhd'+gID,modalcontent:'delcnt'+gID, scrollelm: dtbl};
				if ($.isArray(rowids)) {rowids = rowids.join();}
				if ( $('#'+$.jgrid.jqID(IDs.themodal))[0] !== undefined ) {
					if(onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+dtbl));
						if(showFrm === undefined) {
							showFrm = true;
						}
					}
					if(showFrm === false) {return;}
					$('#DelData>td','#'+dtbl).text(rowids);
					$('#DelError','#'+dtbl).hide();
					if( rp_ge[$t.p.id].processing === true) {
						rp_ge[$t.p.id].processing=false;
						$('#dData', '#'+dtbl).removeClass('ui-state-active');
					}
					if(onBeforeShow) {rp_ge[$t.p.id].beforeShowForm.call($t,$('#'+dtbl));}
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:rp_ge[$t.p.id].jqModal,jqM: false, overlay: rp_ge[$t.p.id].overlay, modal:rp_ge[$t.p.id].modal});
					if(onAfterShow) {rp_ge[$t.p.id].afterShowForm.call($t,$('#'+dtbl));}
				} else {
					var dh = isNaN(rp_ge[$t.p.id].dataheight) ? rp_ge[$t.p.id].dataheight : rp_ge[$t.p.id].dataheight+'px',
						dw = isNaN(p.datawidth) ? p.datawidth : p.datawidth+'px',
						tbl = '<div id=\''+dtbl_id+'\' class=\'formdata\' style=\'width:'+dw+';overflow:auto;position:relative;height:'+dh+';\'>';
					tbl += '<table class=\'DelTable\'><tbody>';
					// error data
					tbl += '<tr id=\'DelError\' style=\'display:none\'><td class=\'ui-state-error\'></td></tr>';
					tbl += '<tr id=\'DelData\' style=\'display:none\'><td >'+rowids+'</td></tr>';
					tbl += '<tr><td class="delmsg" style="white-space:pre;">'+rp_ge[$t.p.id].msg+'</td></tr><tr><td >&#160;</td></tr>';
					// buttons at footer
					tbl += '</tbody></table></div>';
					var bS  = '<a href=\'javascript:void(0)\' id=\'dData\' class=\'fm-button ui-state-default ui-corner-all\'>'+p.bSubmit+'</a>',
						bC  = '<a href=\'javascript:void(0)\' id=\'eData\' class=\'fm-button ui-state-default ui-corner-all\'>'+p.bCancel+'</a>';
					tbl += '<table cellspacing=\'0\' cellpadding=\'0\' border=\'0\' class=\'EditTable\' id=\''+dtbl+'_2\'><tbody><tr><td><hr class=\'ui-widget-content\' style=\'margin:1px\'/></td></tr><tr><td class=\'DelButton EditButton\'>'+bS+'&#160;'+bC+'</td></tr></tbody></table>';
					p.gbox = '#gbox_'+$.jgrid.jqID(gID);
					$.jgrid.createModal(IDs,tbl,p,'#gview_'+$.jgrid.jqID($t.p.id),$('#gview_'+$.jgrid.jqID($t.p.id))[0]);

					if(onBeforeInit) {
						showFrm = onBeforeInit.call($t,$('#'+dtbl));
						if(showFrm === undefined) {
							showFrm = true;
						}
					}
					if(showFrm === false) {return;}

					$('.fm-button','#'+dtbl+'_2').hover(
						function(){$(this).addClass('ui-state-hover');},
						function(){$(this).removeClass('ui-state-hover');}
					);
					p.delicon = $.extend([true,'left','ui-icon-scissors'],rp_ge[$t.p.id].delicon);
					p.cancelicon = $.extend([true,'left','ui-icon-cancel'],rp_ge[$t.p.id].cancelicon);
					if(p.delicon[0]===true) {
						$('#dData','#'+dtbl+'_2').addClass(p.delicon[1] == 'right' ? 'fm-button-icon-right' : 'fm-button-icon-left')
							.append('<span class=\'ui-icon '+p.delicon[2]+'\'></span>');
					}
					if(p.cancelicon[0]===true) {
						$('#eData','#'+dtbl+'_2').addClass(p.cancelicon[1] == 'right' ? 'fm-button-icon-right' : 'fm-button-icon-left')
							.append('<span class=\'ui-icon '+p.cancelicon[2]+'\'></span>');
					}
					$('#dData','#'+dtbl+'_2').click(function(){
						var ret=[true,''], pk,
							postdata = $('#DelData>td','#'+dtbl).text(); //the pair is name=val1,val2,...
						onCS = {};
						if( $.isFunction( rp_ge[$t.p.id].onclickSubmit ) ) {onCS = rp_ge[$t.p.id].onclickSubmit.call($t,rp_ge[$t.p.id], postdata) || {};}
						if( $.isFunction( rp_ge[$t.p.id].beforeSubmit ) ) {ret = rp_ge[$t.p.id].beforeSubmit.call($t,postdata);}
						if(ret[0] && !rp_ge[$t.p.id].processing) {
							rp_ge[$t.p.id].processing = true;
							opers = $t.p.prmNames;
							postd = $.extend({},rp_ge[$t.p.id].delData, onCS);
							oper = opers.oper;
							postd[oper] = opers.deloper;
							idname = opers.id;
							postdata = String(postdata).split(',');
							if(!postdata.length) { return false; }
							for(pk in postdata) {
								if(postdata.hasOwnProperty(pk)) {
									postdata[pk] = $.jgrid.stripPref($t.p.idPrefix, postdata[pk]);
								}
							}
							postd[idname] = postdata.join();
							$(this).addClass('ui-state-active');
							var ajaxOptions = $.extend({
								url: rp_ge[$t.p.id].url || $($t).jqGrid('getGridParam','editurl'),
								type: rp_ge[$t.p.id].mtype,
								data: $.isFunction(rp_ge[$t.p.id].serializeDelData) ? rp_ge[$t.p.id].serializeDelData.call($t,postd) : postd,
								complete:function(data,status){
									var i;
									if(status != 'success') {
										ret[0] = false;
										if ($.isFunction(rp_ge[$t.p.id].errorTextFormat)) {
											ret[1] = rp_ge[$t.p.id].errorTextFormat.call($t,data);
										} else {
											ret[1] = status + ' Status: \'' + data.statusText + '\'. Error code: ' + data.status;
										}
									} else {
									// data is posted successful
									// execute aftersubmit with the returned data from server
										if( $.isFunction( rp_ge[$t.p.id].afterSubmit ) ) {
											ret = rp_ge[$t.p.id].afterSubmit.call($t,data,postd);
										}
									}
									if(ret[0] === false) {
										$('#DelError>td','#'+dtbl).html(ret[1]);
										$('#DelError','#'+dtbl).show();
									} else {
										if(rp_ge[$t.p.id].reloadAfterSubmit && $t.p.datatype != 'local') {
											$($t).trigger('reloadGrid');
										} else {
											if($t.p.treeGrid===true){
												try {$($t).jqGrid('delTreeNode',$t.p.idPrefix+postdata[0]);} catch(e){}
											} else {
												for(i=0;i<postdata.length;i++) {
													$($t).jqGrid('delRowData',$t.p.idPrefix+ postdata[i]);
												}
											}
											$t.p.selrow = null;
											$t.p.selarrrow = [];
										}
										if($.isFunction(rp_ge[$t.p.id].afterComplete)) {
											setTimeout(function(){rp_ge[$t.p.id].afterComplete.call($t,data,postdata);},500);
										}
									}
									rp_ge[$t.p.id].processing=false;
									$('#dData', '#'+dtbl+'_2').removeClass('ui-state-active');
									if(ret[0]) {$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});}
								}
							}, $.jgrid.ajaxOptions, rp_ge[$t.p.id].ajaxDelOptions);


							if (!ajaxOptions.url && !rp_ge[$t.p.id].useDataProxy) {
								if ($.isFunction($t.p.dataProxy)) {
									rp_ge[$t.p.id].useDataProxy = true;
								} else {
									ret[0]=false;ret[1] += ' '+$.jgrid.errors.nourl;
								}
							}
							if (ret[0]) {
								if (rp_ge[$t.p.id].useDataProxy) {
									var dpret = $t.p.dataProxy.call($t, ajaxOptions, 'del_'+$t.p.id);
									if(dpret === undefined) {
										dpret = [true, ''];
									}
									if(dpret[0] === false ) {
										ret[0] = false;
										ret[1] = dpret[1] || 'Error deleting the selected row!' ;
									} else {
										$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:p.jqModal, onClose: rp_ge[$t.p.id].onClose});
									}
								}
								else {$.ajax(ajaxOptions);}
							}
						}

						if(ret[0] === false) {
							$('#DelError>td','#'+dtbl).html(ret[1]);
							$('#DelError','#'+dtbl).show();
						}
						return false;
					});
					$('#eData', '#'+dtbl+'_2').click(function(){
						$.jgrid.hideModal('#'+$.jgrid.jqID(IDs.themodal),{gb:'#gbox_'+$.jgrid.jqID(gID),jqm:rp_ge[$t.p.id].jqModal, onClose: rp_ge[$t.p.id].onClose});
						return false;
					});
					if(onBeforeShow) {rp_ge[$t.p.id].beforeShowForm.call($t,$('#'+dtbl));}
					$.jgrid.viewModal('#'+$.jgrid.jqID(IDs.themodal),{gbox:'#gbox_'+$.jgrid.jqID(gID),jqm:rp_ge[$t.p.id].jqModal, overlay: rp_ge[$t.p.id].overlay, modal:rp_ge[$t.p.id].modal});
					if(onAfterShow) {rp_ge[$t.p.id].afterShowForm.call($t,$('#'+dtbl));}
				}
				if(rp_ge[$t.p.id].closeOnEscape===true) {
					setTimeout(function(){$('.ui-jqdialog-titlebar-close','#'+$.jgrid.jqID(IDs.modalhead)).focus();},0);
				}
			});
		},
		navGrid : function (elem, o, pEdit,pAdd,pDel,pSearch, pView) {
			o = $.extend({
				edit: true,
				editicon: 'ui-icon-pencil',
				add: true,
				addicon:'ui-icon-plus',
				del: true,
				delicon:'ui-icon-trash',
				search: true,
				searchicon:'ui-icon-search',
				refresh: true,
				refreshicon:'ui-icon-refresh',
				refreshstate: 'firstpage',
				view: false,
				viewicon : 'ui-icon-document',
				position : 'left',
				closeOnEscape : true,
				beforeRefresh : null,
				afterRefresh : null,
				cloneToTop : false,
				alertwidth : 200,
				alertheight : 'auto',
				alerttop: null,
				alertleft: null,
				alertzIndex : null
			}, $.jgrid.nav, o ||{});
			return this.each(function() {
				if(this.nav) {return;}
				var alertIDs = {themodal: 'alertmod_' + this.p.id, modalhead: 'alerthd_' + this.p.id,modalcontent: 'alertcnt_' + this.p.id},
					$t = this, twd, tdw;
				if(!$t.grid || typeof elem !== 'string') {return;}
				if ($('#'+alertIDs.themodal)[0] === undefined) {
					if(!o.alerttop && !o.alertleft) {
						if (window.innerWidth !== undefined) {
							o.alertleft = window.innerWidth;
							o.alerttop = window.innerHeight;
						} else if (document.documentElement !== undefined && document.documentElement.clientWidth !== undefined && document.documentElement.clientWidth !== 0) {
							o.alertleft = document.documentElement.clientWidth;
							o.alerttop = document.documentElement.clientHeight;
						} else {
							o.alertleft=1024;
							o.alerttop=768;
						}
						o.alertleft = o.alertleft/2 - parseInt(o.alertwidth,10)/2;
						o.alerttop = o.alerttop/2-25;
					}
					$.jgrid.createModal(alertIDs,
						'<div>'+o.alerttext+'</div><span tabindex=\'0\'><span tabindex=\'-1\' id=\'jqg_alrt\'></span></span>',
						{
							gbox:'#gbox_'+$.jgrid.jqID($t.p.id),
							jqModal:true,
							drag:true,
							resize:true,
							caption:o.alertcap,
							top:o.alerttop,
							left:o.alertleft,
							width:o.alertwidth,
							height: o.alertheight,
							closeOnEscape:o.closeOnEscape,
							zIndex: o.alertzIndex
						},
						'#gview_'+$.jgrid.jqID($t.p.id),
						$('#gbox_'+$.jgrid.jqID($t.p.id))[0],
						true
					);
				}
				var clone = 1, i,
					onHoverIn = function () {
						if (!$(this).hasClass('ui-state-disabled')) {
							$(this).addClass('ui-state-hover');
						}
					},
					onHoverOut = function () {
						$(this).removeClass('ui-state-hover');
					};
				if(o.cloneToTop && $t.p.toppager) {clone = 2;}
				for(i = 0; i<clone; i++) {
					var tbd,
						navtbl = $('<table cellspacing=\'0\' cellpadding=\'0\' border=\'0\' class=\'ui-pg-table navtable\' style=\'float:left;table-layout:auto;\'><tbody><tr></tr></tbody></table>'),
						sep = '<td class=\'ui-pg-button ui-state-disabled\' style=\'width:4px;\'><span class=\'ui-separator\'></span></td>',
						pgid, elemids;
					if(i===0) {
						pgid = elem;
						elemids = $t.p.id;
						if(pgid == $t.p.toppager) {
							elemids += '_top';
							clone = 1;
						}
					} else {
						pgid = $t.p.toppager;
						elemids = $t.p.id+'_top';
					}
					if($t.p.direction == 'rtl') {$(navtbl).attr('dir','rtl').css('float','right');}
					if (o.add) {
						pAdd = pAdd || {};
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.addicon+'\'></span>'+o.addtext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.addtitle || '',id : pAdd.id || 'add_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									if ($.isFunction( o.addfunc )) {
										o.addfunc.call($t);
									} else {
										$($t).jqGrid('editGridRow','new',pAdd);
									}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						tbd = null;
					}
					if (o.edit) {
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						pEdit = pEdit || {};
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.editicon+'\'></span>'+o.edittext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.edittitle || '',id: pEdit.id || 'edit_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									var sr = $t.p.selrow;
									if (sr) {
										if($.isFunction( o.editfunc ) ) {
											o.editfunc.call($t, sr);
										} else {
											$($t).jqGrid('editGridRow',sr,pEdit);
										}
									} else {
										$.jgrid.viewModal('#'+alertIDs.themodal,{gbox:'#gbox_'+$.jgrid.jqID($t.p.id),jqm:true});
										$('#jqg_alrt').focus();
									}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						tbd = null;
					}
					if (o.view) {
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						pView = pView || {};
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.viewicon+'\'></span>'+o.viewtext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.viewtitle || '',id: pView.id || 'view_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									var sr = $t.p.selrow;
									if (sr) {
										if($.isFunction( o.viewfunc ) ) {
											o.viewfunc.call($t, sr);
										} else {
											$($t).jqGrid('viewGridRow',sr,pView);
										}
									} else {
										$.jgrid.viewModal('#'+alertIDs.themodal,{gbox:'#gbox_'+$.jgrid.jqID($t.p.id),jqm:true});
										$('#jqg_alrt').focus();
									}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						tbd = null;
					}
					if (o.del) {
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						pDel = pDel || {};
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.delicon+'\'></span>'+o.deltext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.deltitle || '',id: pDel.id || 'del_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									var dr;
									if($t.p.multiselect) {
										dr = $t.p.selarrrow;
										if(dr.length===0) {dr = null;}
									} else {
										dr = $t.p.selrow;
									}
									if(dr){
										if($.isFunction( o.delfunc )){
											o.delfunc.call($t, dr);
										}else{
											$($t).jqGrid('delGridRow',dr,pDel);
										}
									} else  {
										$.jgrid.viewModal('#'+alertIDs.themodal,{gbox:'#gbox_'+$.jgrid.jqID($t.p.id),jqm:true});$('#jqg_alrt').focus();
									}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						tbd = null;
					}
					if(o.add || o.edit || o.del || o.view) {$('tr',navtbl).append(sep);}
					if (o.search) {
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						pSearch = pSearch || {};
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.searchicon+'\'></span>'+o.searchtext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.searchtitle  || '',id:pSearch.id || 'search_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									if($.isFunction( o.searchfunc )) {
										o.searchfunc.call($t, pSearch);
									} else {
										$($t).jqGrid('searchGrid',pSearch);
									}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						if (pSearch.showOnLoad && pSearch.showOnLoad === true) {
							$(tbd,navtbl).click();
						}
						tbd = null;
					}
					if (o.refresh) {
						tbd = $('<td class=\'ui-pg-button ui-corner-all\'></td>');
						$(tbd).append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+o.refreshicon+'\'></span>'+o.refreshtext+'</div>');
						$('tr',navtbl).append(tbd);
						$(tbd,navtbl)
							.attr({'title':o.refreshtitle  || '',id: 'refresh_'+elemids})
							.click(function(){
								if (!$(this).hasClass('ui-state-disabled')) {
									if($.isFunction(o.beforeRefresh)) {o.beforeRefresh.call($t);}
									$t.p.search = false;
									try {
										var gID = $t.p.id;
										$t.p.postData.filters ='';
										$('#fbox_'+$.jgrid.jqID(gID)).jqFilter('resetFilter');
										if($.isFunction($t.clearToolbar)) {$t.clearToolbar.call($t,false);}
									} catch (e) {}
									switch (o.refreshstate) {
									case 'firstpage':
										$($t).trigger('reloadGrid', [{page:1}]);
										break;
									case 'current':
										$($t).trigger('reloadGrid', [{current:true}]);
										break;
									}
									if($.isFunction(o.afterRefresh)) {o.afterRefresh.call($t);}
								}
								return false;
							}).hover(onHoverIn, onHoverOut);
						tbd = null;
					}
					tdw = $('.ui-jqgrid').css('font-size') || '11px';
					$('body').append('<div id=\'testpg2\' class=\'ui-jqgrid ui-widget ui-widget-content\' style=\'font-size:'+tdw+';visibility:hidden;\' ></div>');
					twd = $(navtbl).clone().appendTo('#testpg2').width();
					$('#testpg2').remove();
					$(pgid+'_'+o.position,pgid).append(navtbl);
					if($t.p._nvtd) {
						if(twd > $t.p._nvtd[0] ) {
							$(pgid+'_'+o.position,pgid).width(twd);
							$t.p._nvtd[0] = twd;
						}
						$t.p._nvtd[1] = twd;
					}
					tdw =null;twd=null;navtbl =null;
					this.nav = true;
				}
			});
		},
		navButtonAdd : function (elem, p) {
			p = $.extend({
				caption : 'newButton',
				title: '',
				buttonicon : 'ui-icon-newwin',
				onClickButton: null,
				position : 'last',
				cursor : 'pointer'
			}, p ||{});
			return this.each(function() {
				if( !this.grid)  {return;}
				if( typeof elem === 'string' && elem.indexOf('#') !== 0) {elem = '#'+$.jgrid.jqID(elem);}
				var findnav = $('.navtable',elem)[0], $t = this;
				if (findnav) {
					if( p.id && $('#'+$.jgrid.jqID(p.id), findnav)[0] !== undefined )  {return;}
					var tbd = $('<td></td>');
					if(p.buttonicon.toString().toUpperCase() == 'NONE') {
						$(tbd).addClass('ui-pg-button ui-corner-all').append('<div class=\'ui-pg-div\'>'+p.caption+'</div>');
					} else	{
						$(tbd).addClass('ui-pg-button ui-corner-all').append('<div class=\'ui-pg-div\'><span class=\'ui-icon '+p.buttonicon+'\'></span>'+p.caption+'</div>');
					}
					if(p.id) {$(tbd).attr('id',p.id);}
					if(p.position=='first'){
						if(findnav.rows[0].cells.length ===0 ) {
							$('tr',findnav).append(tbd);
						} else {
							$('tr td:eq(0)',findnav).before(tbd);
						}
					} else {
						$('tr',findnav).append(tbd);
					}
					$(tbd,findnav)
						.attr('title',p.title  || '')
						.click(function(e){
							if (!$(this).hasClass('ui-state-disabled')) {
								if ($.isFunction(p.onClickButton) ) {p.onClickButton.call($t,e);}
							}
							return false;
						})
						.hover(
							function () {
								if (!$(this).hasClass('ui-state-disabled')) {
									$(this).addClass('ui-state-hover');
								}
							},
							function () {$(this).removeClass('ui-state-hover');}
						);
				}
			});
		},
		navSeparatorAdd:function (elem,p) {
			p = $.extend({
				sepclass : 'ui-separator',
				sepcontent: '',
				position : 'last'
			}, p ||{});
			return this.each(function() {
				if( !this.grid)  {return;}
				if( typeof elem === 'string' && elem.indexOf('#') !== 0) {elem = '#'+$.jgrid.jqID(elem);}
				var findnav = $('.navtable',elem)[0];
				if(findnav) {
					var sep = '<td class=\'ui-pg-button ui-state-disabled\' style=\'width:4px;\'><span class=\''+p.sepclass+'\'></span>'+p.sepcontent+'</td>';
					if (p.position === 'first') {
						if (findnav.rows[0].cells.length === 0) {
							$('tr', findnav).append(sep);
						} else {
							$('tr td:eq(0)', findnav).before(sep);
						}
					} else {
						$('tr', findnav).append(sep);
					}
				}
			});
		},
		GridToForm : function( rowid, formid ) {
			return this.each(function(){
				var $t = this, i;
				if (!$t.grid) {return;}
				var rowdata = $($t).jqGrid('getRowData',rowid);
				if (rowdata) {
					for(i in rowdata) {
						if(rowdata.hasOwnProperty(i)) {
							if ( $('[name='+$.jgrid.jqID(i)+']',formid).is('input:radio') || $('[name='+$.jgrid.jqID(i)+']',formid).is('input:checkbox'))  {
								$('[name='+$.jgrid.jqID(i)+']',formid).each( function() {
									if( $(this).val() == rowdata[i] ) {
										$(this)[$t.p.useProp ? 'prop': 'attr']('checked',true);
									} else {
										$(this)[$t.p.useProp ? 'prop': 'attr']('checked', false);
									}
								});
							} else {
								// this is very slow on big table and form.
								$('[name='+$.jgrid.jqID(i)+']',formid).val(rowdata[i]);
							}
						}
					}
				}
			});
		},
		FormToGrid : function(rowid, formid, mode, position){
			return this.each(function() {
				var $t = this;
				if(!$t.grid) {return;}
				if(!mode) {mode = 'set';}
				if(!position) {position = 'first';}
				var fields = $(formid).serializeArray();
				var griddata = {};
				$.each(fields, function(i, field){
					griddata[field.name] = field.value;
				});
				if(mode=='add') {$($t).jqGrid('addRowData',rowid,griddata, position);}
				else if(mode=='set') {$($t).jqGrid('setRowData',rowid,griddata);}
			});
		}
	});
})(jQuery);
/*jshint eqeqeq:false, eqnull:true, devel:true */
/*global jQuery */
(function($){
/**
 * jqGrid extension for manipulating Grid Data
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
	'use strict';
	$.jgrid.inlineEdit = $.jgrid.inlineEdit || {};
	$.jgrid.extend({
		//Editing
		editRow : function(rowid,keys,oneditfunc,successfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc) {
		// Compatible mode old versions
			var o={}, args = $.makeArray(arguments).slice(1);

			if( $.type(args[0]) === 'object' ) {
				o = args[0];
			} else {
				if (keys !== undefined) { o.keys = keys; }
				if ($.isFunction(oneditfunc)) { o.oneditfunc = oneditfunc; }
				if ($.isFunction(successfunc)) { o.successfunc = successfunc; }
				if (url !== undefined) { o.url = url; }
				if (extraparam !== undefined) { o.extraparam = extraparam; }
				if ($.isFunction(aftersavefunc)) { o.aftersavefunc = aftersavefunc; }
				if ($.isFunction(errorfunc)) { o.errorfunc = errorfunc; }
				if ($.isFunction(afterrestorefunc)) { o.afterrestorefunc = afterrestorefunc; }
			// last two not as param, but as object (sorry)
			//if (restoreAfterError !== undefined) { o.restoreAfterError = restoreAfterError; }
			//if (mtype !== undefined) { o.mtype = mtype || "POST"; }
			}
			o = $.extend(true, {
				keys : false,
				oneditfunc: null,
				successfunc: null,
				url: null,
				extraparam: {},
				aftersavefunc: null,
				errorfunc: null,
				afterrestorefunc: null,
				restoreAfterError: true,
				mtype: 'POST'
			}, $.jgrid.inlineEdit, o );

			// End compatible
			return this.each(function(){
				var $t = this, nm, tmp, editable, cnt=0, focus=null, svr={}, ind,cm;
				if (!$t.grid ) { return; }
				ind = $($t).jqGrid('getInd',rowid,true);
				if( ind === false ) {return;}
				editable = $(ind).attr('editable') || '0';
				if (editable == '0' && !$(ind).hasClass('not-editable-row')) {
					cm = $t.p.colModel;
					$('td[role="gridcell"]',ind).each( function(i) {
						nm = cm[i].name;
						var treeg = $t.p.treeGrid===true && nm == $t.p.ExpandColumn;
						if(treeg) { tmp = $('span:first',this).html();}
						else {
							try {
								tmp = $.unformat.call($t,this,{rowId:rowid, colModel:cm[i]},i);
							} catch (_) {
								tmp =  ( cm[i].edittype && cm[i].edittype == 'textarea' ) ? $(this).text() : $(this).html();
							}
						}
						if ( nm != 'cb' && nm != 'subgrid' && nm != 'rn') {
							if($t.p.autoencode) { tmp = $.jgrid.htmlDecode(tmp); }
							svr[nm]=tmp;
							if(cm[i].editable===true) {
								if(focus===null) { focus = i; }
								if (treeg) { $('span:first',this).html(''); }
								else { $(this).html(''); }
								var opt = $.extend({},cm[i].editoptions || {},{id:rowid+'_'+nm,name:nm});
								if(!cm[i].edittype) { cm[i].edittype = 'text'; }
								if(tmp == '&nbsp;' || tmp == '&#160;' || (tmp.length==1 && tmp.charCodeAt(0)==160) ) {tmp='';}
								var elc = $.jgrid.createEl.call($t,cm[i].edittype,opt,tmp,true,$.extend({},$.jgrid.ajaxOptions,$t.p.ajaxSelectOptions || {}));
								$(elc).addClass('editable');
								if(treeg) { $('span:first',this).append(elc); }
								else { $(this).append(elc); }
								$.jgrid.bindEv( elc, opt, $t);
								//Again IE
								if(cm[i].edittype == 'select' && cm[i].editoptions!==undefined && cm[i].editoptions.multiple===true  && cm[i].editoptions.dataUrl===undefined && $.jgrid.msie) {
									$(elc).width($(elc).width());
								}
								cnt++;
							}
						}
					});
					if(cnt > 0) {
						svr.id = rowid; $t.p.savedRow.push(svr);
						$(ind).attr('editable','1');
						$('td:eq('+focus+') input',ind).focus();
						if(o.keys===true) {
							$(ind).bind('keydown',function(e) {
								if (e.keyCode === 27) {
									$($t).jqGrid('restoreRow',rowid, o.afterrestorefunc);
									if($t.p._inlinenav) {
										try {
											$($t).jqGrid('showAddEditButtons');
										} catch (eer1) {}
									}
									return false;
								}
								if (e.keyCode === 13) {
									var ta = e.target;
									if(ta.tagName == 'TEXTAREA') { return true; }
									if( $($t).jqGrid('saveRow', rowid, o ) ) {
										if($t.p._inlinenav) {
											try {
												$($t).jqGrid('showAddEditButtons');
											} catch (eer2) {}
										}
									}
									return false;
								}
							});
						}
						$($t).triggerHandler('jqGridInlineEditRow', [rowid, o]);
						if( $.isFunction(o.oneditfunc)) { o.oneditfunc.call($t, rowid); }
					}
				}
			});
		},
		saveRow : function(rowid, successfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc) {
		// Compatible mode old versions
			var args = $.makeArray(arguments).slice(1), o = {};

			if( $.type(args[0]) === 'object' ) {
				o = args[0];
			} else {
				if ($.isFunction(successfunc)) { o.successfunc = successfunc; }
				if (url !== undefined) { o.url = url; }
				if (extraparam !== undefined) { o.extraparam = extraparam; }
				if ($.isFunction(aftersavefunc)) { o.aftersavefunc = aftersavefunc; }
				if ($.isFunction(errorfunc)) { o.errorfunc = errorfunc; }
				if ($.isFunction(afterrestorefunc)) { o.afterrestorefunc = afterrestorefunc; }
			}
			o = $.extend(true, {
				successfunc: null,
				url: null,
				extraparam: {},
				aftersavefunc: null,
				errorfunc: null,
				afterrestorefunc: null,
				restoreAfterError: true,
				mtype: 'POST'
			}, $.jgrid.inlineEdit, o );
			// End compatible

			var success = false;
			var $t = this[0], nm, tmp={}, tmp2={}, tmp3= {}, editable, fr, cv, ind;
			if (!$t.grid ) { return success; }
			ind = $($t).jqGrid('getInd',rowid,true);
			if(ind === false) {return success;}
			editable = $(ind).attr('editable');
			o.url = o.url || $t.p.editurl;
			if (editable==='1') {
				var cm;
				$('td[role="gridcell"]',ind).each(function(i) {
					cm = $t.p.colModel[i];
					nm = cm.name;
					if ( nm != 'cb' && nm != 'subgrid' && cm.editable===true && nm != 'rn' && !$(this).hasClass('not-editable-cell')) {
						switch (cm.edittype) {
						case 'checkbox':
							var cbv = ['Yes','No'];
							if(cm.editoptions ) {
								cbv = cm.editoptions.value.split(':');
							}
							tmp[nm]=  $('input',this).is(':checked') ? cbv[0] : cbv[1];
							break;
						case 'text':
						case 'password':
						case 'textarea':
						case 'button' :
							tmp[nm]=$('input, textarea',this).val();
							break;
						case 'select':
							if(!cm.editoptions.multiple) {
								tmp[nm] = $('select option:selected',this).val();
								tmp2[nm] = $('select option:selected', this).text();
							} else {
								var sel = $('select',this), selectedText = [];
								tmp[nm] = $(sel).val();
								if(tmp[nm]) { tmp[nm]= tmp[nm].join(','); } else { tmp[nm] =''; }
								$('select option:selected',this).each(
									function(i,selected){
										selectedText[i] = $(selected).text();
									}
								);
								tmp2[nm] = selectedText.join(',');
							}
							if(cm.formatter && cm.formatter == 'select') { tmp2={}; }
							break;
						case 'custom' :
							try {
								if(cm.editoptions && $.isFunction(cm.editoptions.custom_value)) {
									tmp[nm] = cm.editoptions.custom_value.call($t, $('.customelement',this),'get');
									if (tmp[nm] === undefined) { throw 'e2'; }
								} else { throw 'e1'; }
							} catch (e) {
								if (e=='e1') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.nodefined,$.jgrid.edit.bClose); }
								if (e=='e2') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.novalue,$.jgrid.edit.bClose); }
								else { $.jgrid.info_dialog($.jgrid.errors.errcap,e.message,$.jgrid.edit.bClose); }
							}
							break;
						}
						cv = $.jgrid.checkValues(tmp[nm],i,$t);
						if(cv[0] === false) {
							cv[1] = tmp[nm] + ' ' + cv[1];
							return false;
						}
						if($t.p.autoencode) { tmp[nm] = $.jgrid.htmlEncode(tmp[nm]); }
						if(o.url !== 'clientArray' && cm.editoptions && cm.editoptions.NullIfEmpty === true) {
							if(tmp[nm] === '') {
								tmp3[nm] = 'null';
							}
						}
					}
				});
				if (cv[0] === false){
					try {
						var positions = $.jgrid.findPos($('#'+$.jgrid.jqID(rowid), $t.grid.bDiv)[0]);
						$.jgrid.info_dialog($.jgrid.errors.errcap,cv[1],$.jgrid.edit.bClose,{left:positions[0],top:positions[1]});
					} catch (e) {
						alert(cv[1]);
					}
					return success;
				}
				var idname, opers = $t.p.prmNames, oldRowId = rowid;
				if ($t.p.keyIndex === false) {
					idname = opers.id;
				} else {
					idname = $t.p.colModel[$t.p.keyIndex +
					($t.p.rownumbers === true ? 1 : 0) +
					($t.p.multiselect === true ? 1 : 0) +
					($t.p.subGrid === true ? 1 : 0)].name;
				}
				if(tmp) {
					tmp[opers.oper] = opers.editoper;
					if (tmp[idname] === undefined) {
						tmp[idname] = rowid;
					} else if (ind.id !== $t.p.idPrefix + tmp[idname]) {
					// rename rowid
						var oldid = $.jgrid.stripPref($t.p.idPrefix, rowid);
						if ($t.p._index[oldid] !== undefined) {
							$t.p._index[tmp[idname]] = $t.p._index[oldid];
							delete $t.p._index[oldid];
						}
						rowid = $t.p.idPrefix + tmp[idname];
						$(ind).attr('id', rowid);
						if ($t.p.selrow === oldRowId) {
							$t.p.selrow = rowid;
						}
						if ($.isArray($t.p.selarrrow)) {
							var i = $.inArray(oldRowId, $t.p.selarrrow);
							if (i>=0) {
								$t.p.selarrrow[i] = rowid;
							}
						}
						if ($t.p.multiselect) {
							var newCboxId = 'jqg_' + $t.p.id + '_' + rowid;
							$('input.cbox',ind)
								.attr('id', newCboxId)
								.attr('name', newCboxId);
						}
					// TODO: to test the case of frozen columns
					}
					if($t.p.inlineData === undefined) { $t.p.inlineData ={}; }
					tmp = $.extend({},tmp,$t.p.inlineData,o.extraparam);
				}
				if (o.url == 'clientArray') {
					tmp = $.extend({},tmp, tmp2);
					if($t.p.autoencode) {
						$.each(tmp,function(n,v){
							tmp[n] = $.jgrid.htmlDecode(v);
						});
					}
					var k, resp = $($t).jqGrid('setRowData',rowid,tmp);
					$(ind).attr('editable','0');
					for(k=0;k<$t.p.savedRow.length;k++) {
						if( $t.p.savedRow[k].id == oldRowId) {fr = k; break;}
					}
					if(fr >= 0) { $t.p.savedRow.splice(fr,1); }
					$($t).triggerHandler('jqGridInlineAfterSaveRow', [rowid, resp, tmp, o]);
					if( $.isFunction(o.aftersavefunc) ) { o.aftersavefunc.call($t, rowid,resp, o); }
					success = true;
					$(ind).unbind('keydown');
				} else {
					$('#lui_'+$.jgrid.jqID($t.p.id)).show();
					tmp3 = $.extend({},tmp,tmp3);
					tmp3[idname] = $.jgrid.stripPref($t.p.idPrefix, tmp3[idname]);
					$.ajax($.extend({
						url:o.url,
						data: $.isFunction($t.p.serializeRowData) ? $t.p.serializeRowData.call($t, tmp3) : tmp3,
						type: o.mtype,
						async : false, //?!?
						complete: function(res,stat){
							$('#lui_'+$.jgrid.jqID($t.p.id)).hide();
							if (stat === 'success'){
								var ret = true, sucret, k;
								sucret = $($t).triggerHandler('jqGridInlineSuccessSaveRow', [res, rowid, o]);
								if (!$.isArray(sucret)) {sucret = [true, tmp];}
								if (sucret[0] && $.isFunction(o.successfunc)) {sucret = o.successfunc.call($t, res);}
								if($.isArray(sucret)) {
								// expect array - status, data, rowid
									ret = sucret[0];
									tmp = sucret[1] || tmp;
								} else {
									ret = sucret;
								}
								if (ret===true) {
									if($t.p.autoencode) {
										$.each(tmp,function(n,v){
											tmp[n] = $.jgrid.htmlDecode(v);
										});
									}
									tmp = $.extend({},tmp, tmp2);
									$($t).jqGrid('setRowData',rowid,tmp);
									$(ind).attr('editable','0');
									for(k=0;k<$t.p.savedRow.length;k++) {
										if( $t.p.savedRow[k].id == rowid) {fr = k; break;}
									}
									if(fr >= 0) { $t.p.savedRow.splice(fr,1); }
									$($t).triggerHandler('jqGridInlineAfterSaveRow', [rowid, res, tmp, o]);
									if( $.isFunction(o.aftersavefunc) ) { o.aftersavefunc.call($t, rowid,res); }
									success = true;
									$(ind).unbind('keydown');
								} else {
									$($t).triggerHandler('jqGridInlineErrorSaveRow', [rowid, res, stat, null, o]);
									if($.isFunction(o.errorfunc) ) {
										o.errorfunc.call($t, rowid, res, stat, null);
									}
									if(o.restoreAfterError === true) {
										$($t).jqGrid('restoreRow',rowid, o.afterrestorefunc);
									}
								}
							}
						},
						error:function(res,stat,err){
							$('#lui_'+$.jgrid.jqID($t.p.id)).hide();
							$($t).triggerHandler('jqGridInlineErrorSaveRow', [rowid, res, stat, err, o]);
							if($.isFunction(o.errorfunc) ) {
								o.errorfunc.call($t, rowid, res, stat, err);
							} else {
								var rT = res.responseText || res.statusText;
								try {
									$.jgrid.info_dialog($.jgrid.errors.errcap,'<div class="ui-state-error">'+ rT +'</div>', $.jgrid.edit.bClose,{buttonalign:'right'});
								} catch(e) {
									alert(rT);
								}
							}
							if(o.restoreAfterError === true) {
								$($t).jqGrid('restoreRow',rowid, o.afterrestorefunc);
							}
						}
					}, $.jgrid.ajaxOptions, $t.p.ajaxRowOptions || {}));
				}
			}
			return success;
		},
		restoreRow : function(rowid, afterrestorefunc) {
		// Compatible mode old versions
			var args = $.makeArray(arguments).slice(1), o={};

			if( $.type(args[0]) === 'object' ) {
				o = args[0];
			} else {
				if ($.isFunction(afterrestorefunc)) { o.afterrestorefunc = afterrestorefunc; }
			}
			o = $.extend(true, $.jgrid.inlineEdit, o );

			// End compatible

			return this.each(function(){
				var $t= this, fr, ind, ares={}, k;
				if (!$t.grid ) { return; }
				ind = $($t).jqGrid('getInd',rowid,true);
				if(ind === false) {return;}
				for(k=0;k<$t.p.savedRow.length;k++) {
					if( $t.p.savedRow[k].id == rowid) {fr = k; break;}
				}
				if(fr >= 0) {
					if($.isFunction($.fn.datepicker)) {
						try {
							$('input.hasDatepicker','#'+$.jgrid.jqID(ind.id)).datepicker('hide');
						} catch (e) {}
					}
					$.each($t.p.colModel, function(){
						if(this.editable === true && $t.p.savedRow[fr].hasOwnProperty(this.name)) {
							ares[this.name] = $t.p.savedRow[fr][this.name];
						}
					});
					$($t).jqGrid('setRowData',rowid,ares);
					$(ind).attr('editable','0').unbind('keydown');
					$t.p.savedRow.splice(fr,1);
					if($('#'+$.jgrid.jqID(rowid), '#'+$.jgrid.jqID($t.p.id)).hasClass('jqgrid-new-row')){
						setTimeout(function(){$($t).jqGrid('delRowData',rowid);},0);
					}
				}
				$($t).triggerHandler('jqGridInlineAfterRestoreRow', [rowid]);
				if ($.isFunction(o.afterrestorefunc))
				{
					o.afterrestorefunc.call($t, rowid);
				}
			});
		},
		addRow : function ( p ) {
			p = $.extend(true, {
				rowID : null,
				initdata : {},
				position :'first',
				useDefValues : true,
				useFormatter : false,
				addRowParams : {extraparam:{}}
			},p  || {});
			return this.each(function(){
				if (!this.grid ) { return; }
				var $t = this;
				p.rowID = $.isFunction(p.rowID) ? p.rowID.call($t, p) : ( (p.rowID != null) ? p.rowID : $.jgrid.randId());
				if(p.useDefValues === true) {
					$($t.p.colModel).each(function(){
						if( this.editoptions && this.editoptions.defaultValue ) {
							var opt = this.editoptions.defaultValue,
								tmp = $.isFunction(opt) ? opt.call($t) : opt;
							p.initdata[this.name] = tmp;
						}
					});
				}
				$($t).jqGrid('addRowData', p.rowID, p.initdata, p.position);
				p.rowID = $t.p.idPrefix + p.rowID;
				$('#'+$.jgrid.jqID(p.rowID), '#'+$.jgrid.jqID($t.p.id)).addClass('jqgrid-new-row');
				if(p.useFormatter) {
					$('#'+$.jgrid.jqID(p.rowID)+' .ui-inline-edit', '#'+$.jgrid.jqID($t.p.id)).click();
				} else {
					var opers = $t.p.prmNames,
						oper = opers.oper;
					p.addRowParams.extraparam[oper] = opers.addoper;
					$($t).jqGrid('editRow', p.rowID, p.addRowParams);
					$($t).jqGrid('setSelection', p.rowID);
				}
			});
		},
		inlineNav : function (elem, o) {
			o = $.extend({
				edit: true,
				editicon: 'ui-icon-pencil',
				add: true,
				addicon:'ui-icon-plus',
				save: true,
				saveicon:'ui-icon-disk',
				cancel: true,
				cancelicon:'ui-icon-cancel',
				addParams : {},
				editParams : {},
				restoreAfterSelect : true
			}, $.jgrid.nav, o ||{});
			return this.each(function(){
				if (!this.grid ) { return; }
				var $t = this, onSelect, gID = $.jgrid.jqID($t.p.id);
				$t.p._inlinenav = true;
				// detect the formatactions column
				if(o.addParams.useFormatter === true) {
					var cm = $t.p.colModel,i;
					for (i = 0; i<cm.length; i++) {
						if(cm[i].formatter && cm[i].formatter === 'actions' ) {
							if(cm[i].formatoptions) {
								var defaults =  {
										keys:false,
										onEdit : null,
										onSuccess: null,
										afterSave:null,
										onError: null,
										afterRestore: null,
										extraparam: {},
										url: null
									},
									ap = $.extend( defaults, cm[i].formatoptions );
								o.addParams.addRowParams = {
									'keys' : ap.keys,
									'oneditfunc' : ap.onEdit,
									'successfunc' : ap.onSuccess,
									'url' : ap.url,
									'extraparam' : ap.extraparam,
									'aftersavefunc' : ap.afterSavef,
									'errorfunc': ap.onError,
									'afterrestorefunc' : ap.afterRestore
								};
							}
							break;
						}
					}
				}
				if(o.add) {
					$($t).jqGrid('navButtonAdd', elem,{
						caption : o.addtext,
						title : o.addtitle,
						buttonicon : o.addicon,
						id : $t.p.id+'_iladd',
						onClickButton : function () {
							$($t).jqGrid('addRow', o.addParams);
							if(!o.addParams.useFormatter) {
								$('#'+gID+'_ilsave').removeClass('ui-state-disabled');
								$('#'+gID+'_ilcancel').removeClass('ui-state-disabled');
								$('#'+gID+'_iladd').addClass('ui-state-disabled');
								$('#'+gID+'_iledit').addClass('ui-state-disabled');
							}
						}
					});
				}
				if(o.edit) {
					$($t).jqGrid('navButtonAdd', elem,{
						caption : o.edittext,
						title : o.edittitle,
						buttonicon : o.editicon,
						id : $t.p.id+'_iledit',
						onClickButton : function () {
							var sr = $($t).jqGrid('getGridParam','selrow');
							if(sr) {
								$($t).jqGrid('editRow', sr, o.editParams);
								$('#'+gID+'_ilsave').removeClass('ui-state-disabled');
								$('#'+gID+'_ilcancel').removeClass('ui-state-disabled');
								$('#'+gID+'_iladd').addClass('ui-state-disabled');
								$('#'+gID+'_iledit').addClass('ui-state-disabled');
							} else {
								$.jgrid.viewModal('#alertmod',{gbox:'#gbox_'+gID,jqm:true});$('#jqg_alrt').focus();
							}
						}
					});
				}
				if(o.save) {
					$($t).jqGrid('navButtonAdd', elem,{
						caption : o.savetext || '',
						title : o.savetitle || 'Save row',
						buttonicon : o.saveicon,
						id : $t.p.id+'_ilsave',
						onClickButton : function () {
							var sr = $t.p.savedRow[0].id;
							if(sr) {
								var opers = $t.p.prmNames,
									oper = opers.oper;
								if(!o.editParams.extraparam) {
									o.editParams.extraparam = {};
								}
								if($('#'+$.jgrid.jqID(sr), '#'+gID ).hasClass('jqgrid-new-row')) {
									o.editParams.extraparam[oper] = opers.addoper;
								} else {
									o.editParams.extraparam[oper] = opers.editoper;
								}
								if( $($t).jqGrid('saveRow', sr, o.editParams) ) {
									$($t).jqGrid('showAddEditButtons');
								}
							} else {
								$.jgrid.viewModal('#alertmod',{gbox:'#gbox_'+gID,jqm:true});$('#jqg_alrt').focus();
							}
						}
					});
					$('#'+gID+'_ilsave').addClass('ui-state-disabled');
				}
				if(o.cancel) {
					$($t).jqGrid('navButtonAdd', elem,{
						caption : o.canceltext || '',
						title : o.canceltitle || 'Cancel row editing',
						buttonicon : o.cancelicon,
						id : $t.p.id+'_ilcancel',
						onClickButton : function () {
							var sr = $t.p.savedRow[0].id;
							if(sr) {
								$($t).jqGrid('restoreRow', sr, o.editParams);
								$($t).jqGrid('showAddEditButtons');
							} else {
								$.jgrid.viewModal('#alertmod',{gbox:'#gbox_'+gID,jqm:true});$('#jqg_alrt').focus();
							}
						}
					});
					$('#'+gID+'_ilcancel').addClass('ui-state-disabled');
				}
				if(o.restoreAfterSelect === true) {
					if($.isFunction($t.p.beforeSelectRow)) {
						onSelect = $t.p.beforeSelectRow;
					} else {
						onSelect =  false;
					}
					$t.p.beforeSelectRow = function(id, stat) {
						var ret = true;
						if($t.p.savedRow.length > 0 && $t.p._inlinenav===true && ( id !== $t.p.selrow && $t.p.selrow !==null) ) {
							if($t.p.selrow == o.addParams.rowID ) {
								$($t).jqGrid('delRowData', $t.p.selrow);
							} else {
								$($t).jqGrid('restoreRow', $t.p.selrow, o.editParams);
							}
							$($t).jqGrid('showAddEditButtons');
						}
						if(onSelect) {
							ret = onSelect.call($t, id, stat);
						}
						return ret;
					};
				}

			});
		},
		showAddEditButtons : function()  {
			return this.each(function(){
				if (!this.grid ) { return; }
				var gID = $.jgrid.jqID(this.p.id);
				$('#'+gID+'_ilsave').addClass('ui-state-disabled');
				$('#'+gID+'_ilcancel').addClass('ui-state-disabled');
				$('#'+gID+'_iladd').removeClass('ui-state-disabled');
				$('#'+gID+'_iledit').removeClass('ui-state-disabled');
			});
		}
		//end inline edit
	});
})(jQuery);
/*jshint eqeqeq:false */
/*global jQuery */
(function($){
/*
**
 * jqGrid extension for cellediting Grid Data
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
/**
 * all events and options here are aded anonynous and not in the base grid
 * since the array is to big. Here is the order of execution.
 * From this point we use jQuery isFunction
 * formatCell
 * beforeEditCell,
 * onSelectCell (used only for noneditable cels)
 * afterEditCell,
 * beforeSaveCell, (called before validation of values if any)
 * beforeSubmitCell (if cellsubmit remote (ajax))
 * afterSubmitCell(if cellsubmit remote (ajax)),
 * afterSaveCell,
 * errorCell,
 * serializeCellData - new
 * Options
 * cellsubmit (remote,clientArray) (added in grid options)
 * cellurl
 * ajaxCellOptions
* */
	'use strict';
	$.jgrid.extend({
		editCell : function (iRow,iCol, ed){
			return this.each(function (){
				var $t = this, nm, tmp,cc, cm;
				if (!$t.grid || $t.p.cellEdit !== true) {return;}
				iCol = parseInt(iCol,10);
				// select the row that can be used for other methods
				$t.p.selrow = $t.rows[iRow].id;
				if (!$t.p.knv) {$($t).jqGrid('GridNav');}
				// check to see if we have already edited cell
				if ($t.p.savedRow.length>0) {
				// prevent second click on that field and enable selects
					if (ed===true ) {
						if(iRow == $t.p.iRow && iCol == $t.p.iCol){
							return;
						}
					}
					// save the cell
					$($t).jqGrid('saveCell',$t.p.savedRow[0].id,$t.p.savedRow[0].ic);
				} else {
					window.setTimeout(function () { $('#'+$.jgrid.jqID($t.p.knv)).attr('tabindex','-1').focus();},0);
				}
				cm = $t.p.colModel[iCol];
				nm = cm.name;
				if (nm=='subgrid' || nm=='cb' || nm=='rn') {return;}
				cc = $('td:eq('+iCol+')',$t.rows[iRow]);
				if (cm.editable===true && ed===true && !cc.hasClass('not-editable-cell')) {
					if(parseInt($t.p.iCol,10)>=0  && parseInt($t.p.iRow,10)>=0) {
						$('td:eq('+$t.p.iCol+')',$t.rows[$t.p.iRow]).removeClass('edit-cell ui-state-highlight');
						$($t.rows[$t.p.iRow]).removeClass('selected-row ui-state-hover');
					}
					$(cc).addClass('edit-cell ui-state-highlight');
					$($t.rows[iRow]).addClass('selected-row ui-state-hover');
					try {
						tmp =  $.unformat.call($t,cc,{rowId: $t.rows[iRow].id, colModel:cm},iCol);
					} catch (_) {
						tmp = ( cm.edittype && cm.edittype == 'textarea' ) ? $(cc).text() : $(cc).html();
					}
					if($t.p.autoencode) { tmp = $.jgrid.htmlDecode(tmp); }
					if (!cm.edittype) {cm.edittype = 'text';}
					$t.p.savedRow.push({id:iRow,ic:iCol,name:nm,v:tmp});
					if(tmp === '&nbsp;' || tmp === '&#160;' || (tmp.length===1 && tmp.charCodeAt(0)===160) ) {tmp='';}
					if($.isFunction($t.p.formatCell)) {
						var tmp2 = $t.p.formatCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol);
						if(tmp2 !== undefined ) {tmp = tmp2;}
					}
					var opt = $.extend({}, cm.editoptions || {} ,{id:iRow+'_'+nm,name:nm});
					var elc = $.jgrid.createEl.call($t,cm.edittype,opt,tmp,true,$.extend({},$.jgrid.ajaxOptions,$t.p.ajaxSelectOptions || {}));
					$($t).triggerHandler('jqGridBeforeEditCell', [$t.rows[iRow].id, nm, tmp, iRow, iCol]);
					if ($.isFunction($t.p.beforeEditCell)) {
						$t.p.beforeEditCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol);
					}
					$(cc).html('').append(elc).attr('tabindex','0');
					$.jgrid.bindEv( elc, opt, $t);
					window.setTimeout(function () { $(elc).focus();},0);
					$('input, select, textarea',cc).bind('keydown',function(e) {
						if (e.keyCode === 27) {
							if($('input.hasDatepicker',cc).length >0) {
								if( $('.ui-datepicker').is(':hidden') )  { $($t).jqGrid('restoreCell',iRow,iCol); }
								else { $('input.hasDatepicker',cc).datepicker('hide'); }
							} else {
								$($t).jqGrid('restoreCell',iRow,iCol);
							}
						} //ESC
						if (e.keyCode === 13) {
							$($t).jqGrid('saveCell',iRow,iCol);
							// Prevent default action
							return false;
						} //Enter
						if (e.keyCode === 9)  {
							if(!$t.grid.hDiv.loading ) {
								if (e.shiftKey) {$($t).jqGrid('prevCell',iRow,iCol);} //Shift TAb
								else {$($t).jqGrid('nextCell',iRow,iCol);} //Tab
							} else {
								return false;
							}
						}
						e.stopPropagation();
					});
					$($t).triggerHandler('jqGridAfterEditCell', [$t.rows[iRow].id, nm, tmp, iRow, iCol]);
					if ($.isFunction($t.p.afterEditCell)) {
						$t.p.afterEditCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol);
					}
				} else {
					if (parseInt($t.p.iCol,10)>=0  && parseInt($t.p.iRow,10)>=0) {
						$('td:eq('+$t.p.iCol+')',$t.rows[$t.p.iRow]).removeClass('edit-cell ui-state-highlight');
						$($t.rows[$t.p.iRow]).removeClass('selected-row ui-state-hover');
					}
					cc.addClass('edit-cell ui-state-highlight');
					$($t.rows[iRow]).addClass('selected-row ui-state-hover');
					tmp = cc.html().replace(/\&#160\;/ig,'');
					$($t).triggerHandler('jqGridSelectCell', [$t.rows[iRow].id, nm, tmp, iRow, iCol]);
					if ($.isFunction($t.p.onSelectCell)) {
						$t.p.onSelectCell.call($t, $t.rows[iRow].id,nm,tmp,iRow,iCol);
					}
				}
				$t.p.iCol = iCol; $t.p.iRow = iRow;
			});
		},
		saveCell : function (iRow, iCol){
			return this.each(function(){
				var $t= this, fr;
				if (!$t.grid || $t.p.cellEdit !== true) {return;}
				if ( $t.p.savedRow.length >= 1) {fr = 0;} else {fr=null;}
				if(fr !== null) {
					var cc = $('td:eq('+iCol+')',$t.rows[iRow]),v,v2,
						cm = $t.p.colModel[iCol], nm = cm.name, nmjq = $.jgrid.jqID(nm) ;
					switch (cm.edittype) {
					case 'select':
						if(!cm.editoptions.multiple) {
							v = $('#'+iRow+'_'+nmjq+' option:selected',$t.rows[iRow]).val();
							v2 = $('#'+iRow+'_'+nmjq+' option:selected',$t.rows[iRow]).text();
						} else {
							var sel = $('#'+iRow+'_'+nmjq,$t.rows[iRow]), selectedText = [];
							v = $(sel).val();
							if(v) { v.join(',');} else { v=''; }
							$('option:selected',sel).each(
								function(i,selected){
									selectedText[i] = $(selected).text();
								}
							);
							v2 = selectedText.join(',');
						}
						if(cm.formatter) { v2 = v; }
						break;
					case 'checkbox':
						var cbv  = ['Yes','No'];
						if(cm.editoptions){
							cbv = cm.editoptions.value.split(':');
						}
						v = $('#'+iRow+'_'+nmjq,$t.rows[iRow]).is(':checked') ? cbv[0] : cbv[1];
						v2=v;
						break;
					case 'password':
					case 'text':
					case 'textarea':
					case 'button' :
						v = $('#'+iRow+'_'+nmjq,$t.rows[iRow]).val();
						v2=v;
						break;
					case 'custom' :
						try {
							if(cm.editoptions && $.isFunction(cm.editoptions.custom_value)) {
								v = cm.editoptions.custom_value.call($t, $('.customelement',cc),'get');
								if (v===undefined) { throw 'e2';} else { v2=v; }
							} else { throw 'e1'; }
						} catch (e) {
							if (e=='e1') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.nodefined,$.jgrid.edit.bClose); }
							if (e=='e2') { $.jgrid.info_dialog($.jgrid.errors.errcap,'function \'custom_value\' '+$.jgrid.edit.msg.novalue,$.jgrid.edit.bClose); }
							else {$.jgrid.info_dialog($.jgrid.errors.errcap,e.message,$.jgrid.edit.bClose); }
						}
						break;
					}
					// The common approach is if nothing changed do not do anything
					if (v2 !== $t.p.savedRow[fr].v){
						var vvv = $($t).triggerHandler('jqGridBeforeSaveCell', [$t.rows[iRow].id, nm, v, iRow, iCol]);
						if (vvv) {v = vvv; v2=vvv;}
						if ($.isFunction($t.p.beforeSaveCell)) {
							var vv = $t.p.beforeSaveCell.call($t, $t.rows[iRow].id,nm, v, iRow,iCol);
							if (vv) {v = vv; v2=vv;}
						}
						var cv = $.jgrid.checkValues(v,iCol,$t);
						if(cv[0] === true) {
							var addpost = $($t).triggerHandler('jqGridBeforeSubmitCell', [$t.rows[iRow].id, nm, v, iRow, iCol]) || {};
							if ($.isFunction($t.p.beforeSubmitCell)) {
								addpost = $t.p.beforeSubmitCell.call($t, $t.rows[iRow].id,nm, v, iRow,iCol);
								if (!addpost) {addpost={};}
							}
							if( $('input.hasDatepicker',cc).length >0) { $('input.hasDatepicker',cc).datepicker('hide'); }
							if ($t.p.cellsubmit == 'remote') {
								if ($t.p.cellurl) {
									var postdata = {};
									if($t.p.autoencode) { v = $.jgrid.htmlEncode(v); }
									postdata[nm] = v;
									var idname,oper, opers;
									opers = $t.p.prmNames;
									idname = opers.id;
									oper = opers.oper;
									postdata[idname] = $.jgrid.stripPref($t.p.idPrefix, $t.rows[iRow].id);
									postdata[oper] = opers.editoper;
									postdata = $.extend(addpost,postdata);
									$('#lui_'+$.jgrid.jqID($t.p.id)).show();
									$t.grid.hDiv.loading = true;
									$.ajax( $.extend( {
										url: $t.p.cellurl,
										data :$.isFunction($t.p.serializeCellData) ? $t.p.serializeCellData.call($t, postdata) : postdata,
										type: 'POST',
										complete: function (result, stat) {
											$('#lui_'+$t.p.id).hide();
											$t.grid.hDiv.loading = false;
											if (stat == 'success') {
												var ret = $($t).triggerHandler('jqGridAfterSubmitCell', [$t, result, postdata.id, nm, v, iRow, iCol]) || [true, ''];
												if (ret[0] === true && $.isFunction($t.p.afterSubmitCell)) {
													ret = $t.p.afterSubmitCell.call($t, result,postdata.id,nm,v,iRow,iCol);
												}
												if(ret[0] === true){
													$(cc).empty();
													$($t).jqGrid('setCell',$t.rows[iRow].id, iCol, v2, false, false, true);
													$(cc).addClass('dirty-cell');
													$($t.rows[iRow]).addClass('edited');
													$($t).triggerHandler('jqGridAfterSaveCell', [$t.rows[iRow].id, nm, v, iRow, iCol]);
													if ($.isFunction($t.p.afterSaveCell)) {
														$t.p.afterSaveCell.call($t, $t.rows[iRow].id,nm, v, iRow,iCol);
													}
													$t.p.savedRow.splice(0,1);
												} else {
													$.jgrid.info_dialog($.jgrid.errors.errcap,ret[1],$.jgrid.edit.bClose);
													$($t).jqGrid('restoreCell',iRow,iCol);
												}
											}
										},
										error:function(res,stat,err) {
											$('#lui_'+$.jgrid.jqID($t.p.id)).hide();
											$t.grid.hDiv.loading = false;
											$($t).triggerHandler('jqGridErrorCell', [res, stat, err]);
											if ($.isFunction($t.p.errorCell)) {
												$t.p.errorCell.call($t, res,stat,err);
												$($t).jqGrid('restoreCell',iRow,iCol);
											} else {
												$.jgrid.info_dialog($.jgrid.errors.errcap,res.status+' : '+res.statusText+'<br/>'+stat,$.jgrid.edit.bClose);
												$($t).jqGrid('restoreCell',iRow,iCol);
											}
										}
									}, $.jgrid.ajaxOptions, $t.p.ajaxCellOptions || {}));
								} else {
									try {
										$.jgrid.info_dialog($.jgrid.errors.errcap,$.jgrid.errors.nourl,$.jgrid.edit.bClose);
										$($t).jqGrid('restoreCell',iRow,iCol);
									} catch (e) {}
								}
							}
							if ($t.p.cellsubmit == 'clientArray') {
								$(cc).empty();
								$($t).jqGrid('setCell',$t.rows[iRow].id,iCol, v2, false, false, true);
								$(cc).addClass('dirty-cell');
								$($t.rows[iRow]).addClass('edited');
								$($t).triggerHandler('jqGridAfterSaveCell', [$t.rows[iRow].id, nm, v, iRow, iCol]);
								if ($.isFunction($t.p.afterSaveCell)) {
									$t.p.afterSaveCell.call($t, $t.rows[iRow].id,nm, v, iRow,iCol);
								}
								$t.p.savedRow.splice(0,1);
							}
						} else {
							try {
								window.setTimeout(function(){$.jgrid.info_dialog($.jgrid.errors.errcap,v+' '+cv[1],$.jgrid.edit.bClose);},100);
								$($t).jqGrid('restoreCell',iRow,iCol);
							} catch (e) {}
						}
					} else {
						$($t).jqGrid('restoreCell',iRow,iCol);
					}
				}
				window.setTimeout(function () { $('#'+$.jgrid.jqID($t.p.knv)).attr('tabindex','-1').focus();},0);
			});
		},
		restoreCell : function(iRow, iCol) {
			return this.each(function(){
				var $t= this, fr;
				if (!$t.grid || $t.p.cellEdit !== true ) {return;}
				if ( $t.p.savedRow.length >= 1) {fr = 0;} else {fr=null;}
				if(fr !== null) {
					var cc = $('td:eq('+iCol+')',$t.rows[iRow]);
					// datepicker fix
					if($.isFunction($.fn.datepicker)) {
						try {
							$('input.hasDatepicker',cc).datepicker('hide');
						} catch (e) {}
					}
					$(cc).empty().attr('tabindex','-1');
					$($t).jqGrid('setCell',$t.rows[iRow].id, iCol, $t.p.savedRow[fr].v, false, false, true);
					$($t).triggerHandler('jqGridAfterRestoreCell', [$t.rows[iRow].id, $t.p.savedRow[fr].v, iRow, iCol]);
					if ($.isFunction($t.p.afterRestoreCell)) {
						$t.p.afterRestoreCell.call($t, $t.rows[iRow].id, $t.p.savedRow[fr].v, iRow, iCol);
					}
					$t.p.savedRow.splice(0,1);
				}
				window.setTimeout(function () { $('#'+$t.p.knv).attr('tabindex','-1').focus();},0);
			});
		},
		nextCell : function (iRow,iCol) {
			return this.each(function (){
				var $t = this, nCol=false, i;
				if (!$t.grid || $t.p.cellEdit !== true) {return;}
				// try to find next editable cell
				for (i=iCol+1; i<$t.p.colModel.length; i++) {
					if ( $t.p.colModel[i].editable ===true) {
						nCol = i; break;
					}
				}
				if(nCol !== false) {
					$($t).jqGrid('editCell',iRow,nCol,true);
				} else {
					if ($t.p.savedRow.length >0) {
						$($t).jqGrid('saveCell',iRow,iCol);
					}
				}
			});
		},
		prevCell : function (iRow,iCol) {
			return this.each(function (){
				var $t = this, nCol=false, i;
				if (!$t.grid || $t.p.cellEdit !== true) {return;}
				// try to find next editable cell
				for (i=iCol-1; i>=0; i--) {
					if ( $t.p.colModel[i].editable ===true) {
						nCol = i; break;
					}
				}
				if(nCol !== false) {
					$($t).jqGrid('editCell',iRow,nCol,true);
				} else {
					if ($t.p.savedRow.length >0) {
						$($t).jqGrid('saveCell',iRow,iCol);
					}
				}
			});
		},
		GridNav : function() {
			return this.each(function () {
				var  $t = this;
				if (!$t.grid || $t.p.cellEdit !== true ) {return;}
				// trick to process keydown on non input elements
				$t.p.knv = $t.p.id + '_kn';
				var selection = $('<div style=\'position:fixed;top:-1000000px;width:1px;height:1px;\' tabindex=\'0\'><div tabindex=\'-1\' style=\'width:1px;height:1px;\' id=\''+$t.p.knv+'\'></div></div>'),
					i, kdir;
				function scrollGrid(iR, iC, tp){
					if (tp.substr(0,1)=='v') {
						var ch = $($t.grid.bDiv)[0].clientHeight,
							st = $($t.grid.bDiv)[0].scrollTop,
							nROT = $t.rows[iR].offsetTop+$t.rows[iR].clientHeight,
							pROT = $t.rows[iR].offsetTop;
						if(tp == 'vd') {
							if(nROT >= ch) {
								$($t.grid.bDiv)[0].scrollTop = $($t.grid.bDiv)[0].scrollTop + $t.rows[iR].clientHeight;
							}
						}
						if(tp == 'vu'){
							if (pROT < st ) {
								$($t.grid.bDiv)[0].scrollTop = $($t.grid.bDiv)[0].scrollTop - $t.rows[iR].clientHeight;
							}
						}
					}
					if(tp=='h') {
						var cw = $($t.grid.bDiv)[0].clientWidth,
							sl = $($t.grid.bDiv)[0].scrollLeft,
							nCOL = $t.rows[iR].cells[iC].offsetLeft+$t.rows[iR].cells[iC].clientWidth,
							pCOL = $t.rows[iR].cells[iC].offsetLeft;
						if(nCOL >= cw+parseInt(sl,10)) {
							$($t.grid.bDiv)[0].scrollLeft = $($t.grid.bDiv)[0].scrollLeft + $t.rows[iR].cells[iC].clientWidth;
						} else if (pCOL < sl) {
							$($t.grid.bDiv)[0].scrollLeft = $($t.grid.bDiv)[0].scrollLeft - $t.rows[iR].cells[iC].clientWidth;
						}
					}
				}
				function findNextVisible(iC,act){
					var ind, i;
					if(act == 'lft') {
						ind = iC+1;
						for (i=iC;i>=0;i--){
							if ($t.p.colModel[i].hidden !== true) {
								ind = i;
								break;
							}
						}
					}
					if(act == 'rgt') {
						ind = iC-1;
						for (i=iC; i<$t.p.colModel.length;i++){
							if ($t.p.colModel[i].hidden !== true) {
								ind = i;
								break;
							}
						}
					}
					return ind;
				}

				$(selection).insertBefore($t.grid.cDiv);
				$('#'+$t.p.knv)
					.focus()
					.keydown(function (e){
						kdir = e.keyCode;
						if($t.p.direction == 'rtl') {
							if(kdir===37) { kdir = 39;}
							else if (kdir===39) { kdir = 37; }
						}
						switch (kdir) {
						case 38:
							if ($t.p.iRow-1 >0 ) {
								scrollGrid($t.p.iRow-1,$t.p.iCol,'vu');
								$($t).jqGrid('editCell',$t.p.iRow-1,$t.p.iCol,false);
							}
							break;
						case 40 :
							if ($t.p.iRow+1 <=  $t.rows.length-1) {
								scrollGrid($t.p.iRow+1,$t.p.iCol,'vd');
								$($t).jqGrid('editCell',$t.p.iRow+1,$t.p.iCol,false);
							}
							break;
						case 37 :
							if ($t.p.iCol -1 >=  0) {
								i = findNextVisible($t.p.iCol-1,'lft');
								scrollGrid($t.p.iRow, i,'h');
								$($t).jqGrid('editCell',$t.p.iRow, i,false);
							}
							break;
						case 39 :
							if ($t.p.iCol +1 <=  $t.p.colModel.length-1) {
								i = findNextVisible($t.p.iCol+1,'rgt');
								scrollGrid($t.p.iRow,i,'h');
								$($t).jqGrid('editCell',$t.p.iRow,i,false);
							}
							break;
						case 13:
							if (parseInt($t.p.iCol,10)>=0 && parseInt($t.p.iRow,10)>=0) {
								$($t).jqGrid('editCell',$t.p.iRow,$t.p.iCol,true);
							}
							break;
						default :
							return true;
						}
						return false;
					});
			});
		},
		getChangedCells : function (mthd) {
			var ret=[];
			if (!mthd) {mthd='all';}
			this.each(function(){
				var $t= this,nm;
				if (!$t.grid || $t.p.cellEdit !== true ) {return;}
				$($t.rows).each(function(j){
					var res = {};
					if ($(this).hasClass('edited')) {
						$('td',this).each( function(i) {
							nm = $t.p.colModel[i].name;
							if ( nm !== 'cb' && nm !== 'subgrid') {
								if (mthd=='dirty') {
									if ($(this).hasClass('dirty-cell')) {
										try {
											res[nm] = $.unformat.call($t,this,{rowId:$t.rows[j].id, colModel:$t.p.colModel[i]},i);
										} catch (e){
											res[nm] = $.jgrid.htmlDecode($(this).html());
										}
									}
								} else {
									try {
										res[nm] = $.unformat.call($t,this,{rowId:$t.rows[j].id,colModel:$t.p.colModel[i]},i);
									} catch (e) {
										res[nm] = $.jgrid.htmlDecode($(this).html());
									}
								}
							}
						});
						res.id = this.id;
						ret.push(res);
					}
				});
			});
			return ret;
		}
		/// end  cell editing
	});
})(jQuery);
/*jshint eqeqeq:false */
/*global jQuery */
(function($){
/**
 * jqGrid extension for SubGrid Data
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/
	'use strict';
	$.jgrid.extend({
		setSubGrid : function () {
			return this.each(function (){
				var $t = this, cm, i,
					suboptions = {
						plusicon : 'ui-icon-plus',
						minusicon : 'ui-icon-minus',
						openicon: 'ui-icon-carat-1-sw',
						expandOnLoad:  false,
						delayOnLoad : 50,
						selectOnExpand : false,
						reloadOnExpand : true
					};
				$t.p.subGridOptions = $.extend(suboptions, $t.p.subGridOptions || {});
				$t.p.colNames.unshift('');
				$t.p.colModel.unshift({name:'subgrid',width: $.jgrid.cell_width ?  $t.p.subGridWidth+$t.p.cellLayout : $t.p.subGridWidth,sortable: false,resizable:false,hidedlg:true,search:false,fixed:true});
				cm = $t.p.subGridModel;
				if(cm[0]) {
					cm[0].align = $.extend([],cm[0].align || []);
					for(i=0;i<cm[0].name.length;i++) { cm[0].align[i] = cm[0].align[i] || 'left';}
				}
			});
		},
		addSubGridCell :function (pos,iRow) {
			var prp='',ic,sid;
			this.each(function(){
				prp = this.formatCol(pos,iRow);
				sid= this.p.id;
				ic = this.p.subGridOptions.plusicon;
			});
			return '<td role="gridcell" aria-describedby="'+sid+'_subgrid" class="ui-sgcollapsed sgcollapsed" '+prp+'><a href=\'javascript:void(0);\'><span class=\'ui-icon '+ic+'\'></span></a></td>';
		},
		addSubGrid : function( pos, sind ) {
			return this.each(function(){
				var ts = this;
				if (!ts.grid ) { return; }
				//-------------------------
				var subGridCell = function(trdiv,cell,pos)
				{
					var tddiv = $('<td align=\''+ts.p.subGridModel[0].align[pos]+'\'></td>').html(cell);
					$(trdiv).append(tddiv);
				};
				var subGridXml = function(sjxml, sbid){
					var tddiv, i,  sgmap,
						dummy = $('<table cellspacing=\'0\' cellpadding=\'0\' border=\'0\'><tbody></tbody></table>'),
						trdiv = $('<tr></tr>');
					for (i = 0; i<ts.p.subGridModel[0].name.length; i++) {
						tddiv = $('<th class=\'ui-state-default ui-th-subgrid ui-th-column ui-th-'+ts.p.direction+'\'></th>');
						$(tddiv).html(ts.p.subGridModel[0].name[i]);
						$(tddiv).width( ts.p.subGridModel[0].width[i]);
						$(trdiv).append(tddiv);
					}
					$(dummy).append(trdiv);
					if (sjxml){
						sgmap = ts.p.xmlReader.subgrid;
						$(sgmap.root+' '+sgmap.row, sjxml).each( function(){
							trdiv = $('<tr class=\'ui-widget-content ui-subtblcell\'></tr>');
							if(sgmap.repeatitems === true) {
								$(sgmap.cell,this).each( function(i) {
									subGridCell(trdiv, $(this).text() || '&#160;',i);
								});
							} else {
								var f = ts.p.subGridModel[0].mapping || ts.p.subGridModel[0].name;
								if (f) {
									for (i=0;i<f.length;i++) {
										subGridCell(trdiv, $(f[i],this).text() || '&#160;',i);
									}
								}
							}
							$(dummy).append(trdiv);
						});
					}
					var pID = $('table:first',ts.grid.bDiv).attr('id')+'_';
					$('#'+$.jgrid.jqID(pID+sbid)).append(dummy);
					ts.grid.hDiv.loading = false;
					$('#load_'+$.jgrid.jqID(ts.p.id)).hide();
					return false;
				};
				var subGridJson = function(sjxml, sbid){
					var tddiv,result,i,cur, sgmap,j,
						dummy = $('<table cellspacing=\'0\' cellpadding=\'0\' border=\'0\'><tbody></tbody></table>'),
						trdiv = $('<tr></tr>');
					for (i = 0; i<ts.p.subGridModel[0].name.length; i++) {
						tddiv = $('<th class=\'ui-state-default ui-th-subgrid ui-th-column ui-th-'+ts.p.direction+'\'></th>');
						$(tddiv).html(ts.p.subGridModel[0].name[i]);
						$(tddiv).width( ts.p.subGridModel[0].width[i]);
						$(trdiv).append(tddiv);
					}
					$(dummy).append(trdiv);
					if (sjxml){
						sgmap = ts.p.jsonReader.subgrid;
						result = $.jgrid.getAccessor(sjxml, sgmap.root);
						if ( result !== undefined ) {
							for (i=0;i<result.length;i++) {
								cur = result[i];
								trdiv = $('<tr class=\'ui-widget-content ui-subtblcell\'></tr>');
								if(sgmap.repeatitems === true) {
									if(sgmap.cell) { cur=cur[sgmap.cell]; }
									for (j=0;j<cur.length;j++) {
										subGridCell(trdiv, cur[j] || '&#160;',j);
									}
								} else {
									var f = ts.p.subGridModel[0].mapping || ts.p.subGridModel[0].name;
									if(f.length) {
										for (j=0;j<f.length;j++) {
											subGridCell(trdiv, cur[f[j]] || '&#160;',j);
										}
									}
								}
								$(dummy).append(trdiv);
							}
						}
					}
					var pID = $('table:first',ts.grid.bDiv).attr('id')+'_';
					$('#'+$.jgrid.jqID(pID+sbid)).append(dummy);
					ts.grid.hDiv.loading = false;
					$('#load_'+$.jgrid.jqID(ts.p.id)).hide();
					return false;
				};
				var populatesubgrid = function( rd )
				{
					var sid,dp, i, j;
					sid = $(rd).attr('id');
					dp = {nd_: (new Date().getTime())};
					dp[ts.p.prmNames.subgridid]=sid;
					if(!ts.p.subGridModel[0]) { return false; }
					if(ts.p.subGridModel[0].params) {
						for(j=0; j < ts.p.subGridModel[0].params.length; j++) {
							for(i=0; i<ts.p.colModel.length; i++) {
								if(ts.p.colModel[i].name === ts.p.subGridModel[0].params[j]) {
									dp[ts.p.colModel[i].name]= $('td:eq('+i+')',rd).text().replace(/\&#160\;/ig,'');
								}
							}
						}
					}
					if(!ts.grid.hDiv.loading) {
						ts.grid.hDiv.loading = true;
						$('#load_'+$.jgrid.jqID(ts.p.id)).show();
						if(!ts.p.subgridtype) { ts.p.subgridtype = ts.p.datatype; }
						if($.isFunction(ts.p.subgridtype)) {
							ts.p.subgridtype.call(ts, dp);
						} else {
							ts.p.subgridtype = ts.p.subgridtype.toLowerCase();
						}
						switch(ts.p.subgridtype) {
						case 'xml':
						case 'json':
							$.ajax($.extend({
								type:ts.p.mtype,
								url: ts.p.subGridUrl,
								dataType:ts.p.subgridtype,
								data: $.isFunction(ts.p.serializeSubGridData)? ts.p.serializeSubGridData.call(ts, dp) : dp,
								complete: function(sxml) {
									if(ts.p.subgridtype === 'xml') {
										subGridXml(sxml.responseXML, sid);
									} else {
										subGridJson($.jgrid.parse(sxml.responseText),sid);
									}
									sxml=null;
								}
							}, $.jgrid.ajaxOptions, ts.p.ajaxSubgridOptions || {}));
							break;
						}
					}
					return false;
				};
				var _id, pID,atd, nhc=0, bfsc, r;
				$.each(ts.p.colModel,function(){
					if(this.hidden === true || this.name === 'rn' || this.name === 'cb') {
						nhc++;
					}
				});
				var len = ts.rows.length, i=1;
				if( sind !== undefined && sind > 0) {
					i = sind;
					len = sind+1;
				}
				while(i < len) {
					if($(ts.rows[i]).hasClass('jqgrow')) {
						$(ts.rows[i].cells[pos]).bind('click', function() {
							var tr = $(this).parent('tr')[0];
							r = tr.nextSibling;
							if($(this).hasClass('sgcollapsed')) {
								pID = ts.p.id;
								_id = tr.id;
								if(ts.p.subGridOptions.reloadOnExpand === true || ( ts.p.subGridOptions.reloadOnExpand === false && !$(r).hasClass('ui-subgrid') ) ) {
									atd = pos >=1 ? '<td colspan=\''+pos+'\'>&#160;</td>':'';
									bfsc = $(ts).triggerHandler('jqGridSubGridBeforeExpand', [pID + '_' + _id, _id]);
									bfsc = (bfsc === false || bfsc === 'stop') ? false : true;
									if(bfsc && $.isFunction(ts.p.subGridBeforeExpand)) {
										bfsc = ts.p.subGridBeforeExpand.call(ts, pID+'_'+_id,_id);
									}
									if(bfsc === false) {return false;}
									$(tr).after( '<tr role=\'row\' class=\'ui-subgrid\'>'+atd+'<td class=\'ui-widget-content subgrid-cell\'><span class=\'ui-icon '+ts.p.subGridOptions.openicon+'\'></span></td><td colspan=\''+parseInt(ts.p.colNames.length-1-nhc,10)+'\' class=\'ui-widget-content subgrid-data\'><div id='+pID+'_'+_id+' class=\'tablediv\'></div></td></tr>' );
									$(ts).triggerHandler('jqGridSubGridRowExpanded', [pID + '_' + _id, _id]);
									if( $.isFunction(ts.p.subGridRowExpanded)) {
										ts.p.subGridRowExpanded.call(ts, pID+'_'+ _id,_id);
									} else {
										populatesubgrid(tr);
									}
								} else {
									$(r).show();
								}
								$(this).html('<a href=\'javascript:void(0);\'><span class=\'ui-icon '+ts.p.subGridOptions.minusicon+'\'></span></a>').removeClass('sgcollapsed').addClass('sgexpanded');
								if(ts.p.subGridOptions.selectOnExpand) {
									$(ts).jqGrid('setSelection',_id);
								}
							} else if($(this).hasClass('sgexpanded')) {
								bfsc = $(ts).triggerHandler('jqGridSubGridRowColapsed', [pID + '_' + _id, _id]);
								bfsc = (bfsc === false || bfsc === 'stop') ? false : true;
								if( bfsc &&  $.isFunction(ts.p.subGridRowColapsed)) {
									_id = tr.id;
									bfsc = ts.p.subGridRowColapsed.call(ts, pID+'_'+_id,_id );
								}
								if(bfsc===false) {return false;}
								if(ts.p.subGridOptions.reloadOnExpand === true) {
									$(r).remove('.ui-subgrid');
								} else if($(r).hasClass('ui-subgrid')) { // incase of dynamic deleting
									$(r).hide();
								}
								$(this).html('<a href=\'javascript:void(0);\'><span class=\'ui-icon '+ts.p.subGridOptions.plusicon+'\'></span></a>').removeClass('sgexpanded').addClass('sgcollapsed');
							}
							return false;
						});
					}
					i++;
				}
				if(ts.p.subGridOptions.expandOnLoad === true) {
					$(ts.rows).filter('.jqgrow').each(function(index,row){
						$(row.cells[0]).click();
					});
				}
				ts.subGridXml = function(xml,sid) {subGridXml(xml,sid);};
				ts.subGridJson = function(json,sid) {subGridJson(json,sid);};
			});
		},
		expandSubGridRow : function(rowid) {
			return this.each(function () {
				var $t = this;
				if(!$t.grid && !rowid) {return;}
				if($t.p.subGrid===true) {
					var rc = $(this).jqGrid('getInd',rowid,true);
					if(rc) {
						var sgc = $('td.sgcollapsed',rc)[0];
						if(sgc) {
							$(sgc).trigger('click');
						}
					}
				}
			});
		},
		collapseSubGridRow : function(rowid) {
			return this.each(function () {
				var $t = this;
				if(!$t.grid && !rowid) {return;}
				if($t.p.subGrid===true) {
					var rc = $(this).jqGrid('getInd',rowid,true);
					if(rc) {
						var sgc = $('td.sgexpanded',rc)[0];
						if(sgc) {
							$(sgc).trigger('click');
						}
					}
				}
			});
		},
		toggleSubGridRow : function(rowid) {
			return this.each(function () {
				var $t = this;
				if(!$t.grid && !rowid) {return;}
				if($t.p.subGrid===true) {
					var rc = $(this).jqGrid('getInd',rowid,true);
					if(rc) {
						var sgc = $('td.sgcollapsed',rc)[0];
						if(sgc) {
							$(sgc).trigger('click');
						} else {
							sgc = $('td.sgexpanded',rc)[0];
							if(sgc) {
								$(sgc).trigger('click');
							}
						}
					}
				}
			});
		}
	});
})(jQuery);
/**
 * jqGrid extension - Tree Grid
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
**/

/*jshint eqeqeq:false */
/*global jQuery */
(function($) {
	'use strict';
	$.jgrid.extend({
		setTreeNode : function(i, len){
			return this.each(function(){
				var $t = this;
				if( !$t.grid || !$t.p.treeGrid ) {return;}
				var expCol = $t.p.expColInd,
					expanded = $t.p.treeReader.expanded_field,
					isLeaf = $t.p.treeReader.leaf_field,
					level = $t.p.treeReader.level_field,
					icon = $t.p.treeReader.icon_field,
					loaded = $t.p.treeReader.loaded,  lft, rgt, curLevel, ident,lftpos, twrap,
					ldat, lf;
				while(i<len) {
					var ind = $t.rows[i].id, dind = $t.p._index[ind], expan;
					ldat = $t.p.data[dind];
					//$t.rows[i].level = ldat[level];
					if($t.p.treeGridModel == 'nested') {
						if(!ldat[isLeaf]) {
							lft = parseInt(ldat[$t.p.treeReader.left_field],10);
							rgt = parseInt(ldat[$t.p.treeReader.right_field],10);
							// NS Model
							ldat[isLeaf] = (rgt === lft+1) ? 'true' : 'false';
							$t.rows[i].cells[$t.p._treeleafpos].innerHTML = ldat[isLeaf];
						}
					}
					//else {
					//row.parent_id = rd[$t.p.treeReader.parent_id_field];
					//}
					if (ldat===undefined){i++,len++;continue;}
					curLevel = parseInt(ldat[level],10);
					if($t.p.tree_root_level === 0) {
						ident = curLevel+1;
						lftpos = curLevel;
					} else {
						ident = curLevel;
						lftpos = curLevel -1;
					}
					twrap = '<div class=\'tree-wrap tree-wrap-'+$t.p.direction+'\' style=\'width:'+(ident*18)+'px;\'>';
					twrap += '<div style=\''+($t.p.direction=='rtl' ? 'right:' : 'left:')+(lftpos*18)+'px;\' class=\'ui-icon ';


					if(ldat[loaded] !== undefined) {
						if(ldat[loaded]=='true' || ldat[loaded]===true) {
							ldat[loaded] = true;
						} else {
							ldat[loaded] = false;
						}
					}
					if(ldat[isLeaf] == 'true' || ldat[isLeaf] === true) {
						twrap += ((ldat[icon] !== undefined && ldat[icon] !== '') ? ldat[icon] : $t.p.treeIcons.leaf)+' tree-leaf treeclick';
						ldat[isLeaf] = true;
						lf='leaf';
					} else {
						ldat[isLeaf] = false;
						lf='';
					}
					ldat[expanded] = ((ldat[expanded] == 'true' || ldat[expanded] === true) ? true : false) && (ldat[loaded] || ldat[loaded] === undefined);
					if(ldat[expanded] === false) {
						twrap += ((ldat[isLeaf] === true) ? '\'' : $t.p.treeIcons.plus+' tree-plus treeclick\'');
					} else {
						twrap += ((ldat[isLeaf] === true) ? '\'' : $t.p.treeIcons.minus+' tree-minus treeclick\'');
					}

					twrap += '></div></div>';
					$($t.rows[i].cells[expCol]).wrapInner('<span class=\'cell-wrapper'+lf+'\'></span>').prepend(twrap);

					if(curLevel !== parseInt($t.p.tree_root_level,10)) {
						var pn = $($t).jqGrid('getNodeParent',ldat);
						expan = pn && pn.hasOwnProperty(expanded) ? pn[expanded] : true;
						if( !expan ){
							$($t.rows[i]).css('display','none');
						}
					}
					$($t.rows[i].cells[expCol])
						.find('div.treeclick')
						.bind('click',function(e){
							var target = e.target || e.srcElement,
								ind2 =$(target,$t.rows).closest('tr.jqgrow')[0].id,
								pos = $t.p._index[ind2];
							if(!$t.p.data[pos][isLeaf]){
								if($t.p.data[pos][expanded]){
									$($t).jqGrid('collapseRow',$t.p.data[pos]);
									$($t).jqGrid('collapseNode',$t.p.data[pos]);
								} else {
									$($t).jqGrid('expandRow',$t.p.data[pos]);
									$($t).jqGrid('expandNode',$t.p.data[pos]);
								}
							}
							return false;
						});
					if($t.p.ExpandColClick === true) {
						$($t.rows[i].cells[expCol])
							.find('span.cell-wrapper')
							.css('cursor','pointer')
							.bind('click',function(e) {
								var target = e.target || e.srcElement,
									ind2 =$(target,$t.rows).closest('tr.jqgrow')[0].id,
									pos = $t.p._index[ind2];
								if(!$t.p.data[pos][isLeaf]){
									if($t.p.data[pos][expanded]){
										$($t).jqGrid('collapseRow',$t.p.data[pos]);
										$($t).jqGrid('collapseNode',$t.p.data[pos]);
									} else {
										$($t).jqGrid('expandRow',$t.p.data[pos]);
										$($t).jqGrid('expandNode',$t.p.data[pos]);
									}
								}
								$($t).jqGrid('setSelection',ind2);
								return false;
							});
					}
					i++;
				}

			});
		},
		setTreeGrid : function() {
			return this.each(function (){
				var $t = this, i=0, pico, ecol = false, nm, key, tkey, dupcols=[];
				if(!$t.p.treeGrid) {return;}
				if(!$t.p.treedatatype ) {$.extend($t.p,{treedatatype: $t.p.datatype});}
				$t.p.subGrid = false;$t.p.altRows =false;
				$t.p.pgbuttons = false;$t.p.pginput = false;
				$t.p.gridview =  true;
				if($t.p.rowTotal === null ) { $t.p.rowNum = 10000; }
				$t.p.multiselect = false;$t.p.rowList = [];
				$t.p.expColInd = 0;
				pico = 'ui-icon-triangle-1-' + ($t.p.direction=='rtl' ? 'w' : 'e');
				$t.p.treeIcons = $.extend({plus:pico,minus:'ui-icon-triangle-1-s',leaf:'ui-icon-radio-off'},$t.p.treeIcons || {});
				if($t.p.treeGridModel == 'nested') {
					$t.p.treeReader = $.extend({
						level_field: 'level',
						left_field:'lft',
						right_field: 'rgt',
						leaf_field: 'isLeaf',
						expanded_field: 'expanded',
						loaded: 'loaded',
						icon_field: 'icon'
					},$t.p.treeReader);
				} else if($t.p.treeGridModel == 'adjacency') {
					$t.p.treeReader = $.extend({
						level_field: 'level',
						parent_id_field: 'parent',
						leaf_field: 'isLeaf',
						expanded_field: 'expanded',
						loaded: 'loaded',
						icon_field: 'icon'
					},$t.p.treeReader );
				}
				for ( key in $t.p.colModel){
					if($t.p.colModel.hasOwnProperty(key)) {
						nm = $t.p.colModel[key].name;
						if( nm == $t.p.ExpandColumn && !ecol ) {
							ecol = true;
							$t.p.expColInd = i;
						}
						i++;
						//
						for(tkey in $t.p.treeReader) {
							if($t.p.treeReader.hasOwnProperty(tkey) && $t.p.treeReader[tkey] == nm) {
								dupcols.push(nm);
							}
						}
					}
				}
				$.each($t.p.treeReader,function(j,n){
					if(n && $.inArray(n, dupcols) === -1){
						if(j==='leaf_field') { $t.p._treeleafpos= i; }
						i++;
						$t.p.colNames.push(n);
						$t.p.colModel.push({name:n,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false});
					}
				});
			});
		},
		expandRow: function (record){
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				var childern = $($t).jqGrid('getNodeChildren',record),
					//if ($($t).jqGrid("isVisibleNode",record)) {
					expanded = $t.p.treeReader.expanded_field,
					rows = $t.rows;
				$(childern).each(function(){
					var id  = $.jgrid.getAccessor(this,$t.p.localReader.id);
					$(rows.namedItem(id)).css('display','');
					if(this[expanded]) {
						$($t).jqGrid('expandRow',this);
					}
				});
			//}
			});
		},
		collapseRow : function (record) {
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				var childern = $($t).jqGrid('getNodeChildren',record),
					expanded = $t.p.treeReader.expanded_field,
					rows = $t.rows;
				$(childern).each(function(){
					var id  = $.jgrid.getAccessor(this,$t.p.localReader.id);
					$(rows.namedItem(id)).css('display','none');
					if(this[expanded]){
						$($t).jqGrid('collapseRow',this);
					}
				});
			});
		},
		// NS ,adjacency models
		getRootNodes : function() {
			var result = [];
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				switch ($t.p.treeGridModel) {
				case 'nested' :
					var level = $t.p.treeReader.level_field;
					$($t.p.data).each(function(){
						if(parseInt(this[level],10) === parseInt($t.p.tree_root_level,10)) {
							result.push(this);
						}
					});
					break;
				case 'adjacency' :
					var parent_id = $t.p.treeReader.parent_id_field;
					$($t.p.data).each(function(){
						if(this[parent_id] === null || String(this[parent_id]).toLowerCase() == 'null') {
							result.push(this);
						}
					});
					break;
				}
			});
			return result;
		},
		getNodeDepth : function(rc) {
			var ret = null;
			this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var $t = this;
				switch ($t.p.treeGridModel) {
				case 'nested' :
					var level = $t.p.treeReader.level_field;
					ret = parseInt(rc[level],10) - parseInt($t.p.tree_root_level,10);
					break;
				case 'adjacency' :
					ret = $($t).jqGrid('getNodeAncestors',rc).length;
					break;
				}
			});
			return ret;
		},
		getNodeParent : function(rc) {
			var result = null;
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				switch ($t.p.treeGridModel) {
				case 'nested' :
					var lftc = $t.p.treeReader.left_field,
						rgtc = $t.p.treeReader.right_field,
						levelc = $t.p.treeReader.level_field,
						lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
					$(this.p.data).each(function(){
						if(parseInt(this[levelc],10) === level-1 && parseInt(this[lftc],10) < lft && parseInt(this[rgtc],10) > rgt) {
							result = this;
							return false;
						}
					});
					break;
				case 'adjacency' :
					var parent_id = $t.p.treeReader.parent_id_field,
						dtid = $t.p.localReader.id;
					$(this.p.data).each(function(){
						if(this[dtid] == rc[parent_id] ) {
							result = this;
							return false;
						}
					});
					break;
				}
			});
			return result;
		},
		getNodeChildren : function(rc) {
			var result = [];
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				switch ($t.p.treeGridModel) {
				case 'nested' :
					var lftc = $t.p.treeReader.left_field,
						rgtc = $t.p.treeReader.right_field,
						levelc = $t.p.treeReader.level_field,
						lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
					$(this.p.data).each(function(){
						if(parseInt(this[levelc],10) === level+1 && parseInt(this[lftc],10) > lft && parseInt(this[rgtc],10) < rgt) {
							result.push(this);
						}
					});
					break;
				case 'adjacency' :
					var parent_id = $t.p.treeReader.parent_id_field,
						dtid = $t.p.localReader.id;
					$(this.p.data).each(function(){
						if(this[parent_id] == rc[dtid]) {
							result.push(this);
						}
					});
					break;
				}
			});
			return result;
		},
		getFullTreeNode : function(rc) {
			var result = [];
			this.each(function(){
				var $t = this, len;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				switch ($t.p.treeGridModel) {
				case 'nested' :
					var lftc = $t.p.treeReader.left_field,
						rgtc = $t.p.treeReader.right_field,
						levelc = $t.p.treeReader.level_field,
						lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
					$(this.p.data).each(function(){
						if(parseInt(this[levelc],10) >= level && parseInt(this[lftc],10) >= lft && parseInt(this[lftc],10) <= rgt) {
							result.push(this);
						}
					});
					break;
				case 'adjacency' :
					if(rc) {
						result.push(rc);
						var parent_id = $t.p.treeReader.parent_id_field,
							dtid = $t.p.localReader.id;
						$(this.p.data).each(function(i){
							len = result.length;
							for (i = 0; i < len; i++) {
								if (result[i][dtid] == this[parent_id]) {
									result.push(this);
									break;
								}
							}
						});
					}
					break;
				}
			});
			return result;
		},
		// End NS, adjacency Model
		getNodeAncestors : function(rc) {
			var ancestors = [];
			this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var parent = $(this).jqGrid('getNodeParent',rc);
				while (parent) {
					ancestors.push(parent);
					parent = $(this).jqGrid('getNodeParent',parent);
				}
			});
			return ancestors;
		},
		isVisibleNode : function(rc) {
			var result = true;
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				var ancestors = $($t).jqGrid('getNodeAncestors',rc),
					expanded = $t.p.treeReader.expanded_field;
				$(ancestors).each(function(){
					result = result && this[expanded];
					if(!result) {return false;}
				});
			});
			return result;
		},
		isNodeLoaded : function(rc) {
			var result;
			this.each(function(){
				var $t = this;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				var isLeaf = $t.p.treeReader.leaf_field;
				if(rc !== undefined ) {
					if(rc.loaded !== undefined) {
						result = rc.loaded;
					} else if( rc[isLeaf] || $($t).jqGrid('getNodeChildren',rc).length > 0){
						result = true;
					} else {
						result = false;
					}
				} else {
					result = false;
				}
			});
			return result;
		},
		expandNode : function(rc) {
			return this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var expanded = this.p.treeReader.expanded_field,
					parent = this.p.treeReader.parent_id_field,
					loaded = this.p.treeReader.loaded,
					level = this.p.treeReader.level_field,
					lft = this.p.treeReader.left_field,
					rgt = this.p.treeReader.right_field;

				if(!rc[expanded]) {
					var id = $.jgrid.getAccessor(rc,this.p.localReader.id);
					var rc1 = $('#'+$.jgrid.jqID(id),this.grid.bDiv)[0];
					var position = this.p._index[id];
					if( $(this).jqGrid('isNodeLoaded',this.p.data[position]) ) {
						rc[expanded] = true;
						$('div.treeclick',rc1).removeClass(this.p.treeIcons.plus+' tree-plus').addClass(this.p.treeIcons.minus+' tree-minus');
					} else if (!this.grid.hDiv.loading) {
						rc[expanded] = true;
						$('div.treeclick',rc1).removeClass(this.p.treeIcons.plus+' tree-plus').addClass(this.p.treeIcons.minus+' tree-minus');
						this.p.treeANode = rc1.rowIndex;
						this.p.datatype = this.p.treedatatype;
						if(this.p.treeGridModel == 'nested') {
							$(this).jqGrid('setGridParam',{postData:{nodeid:id,n_left:rc[lft],n_right:rc[rgt],n_level:rc[level]}});
						} else {
							$(this).jqGrid('setGridParam',{postData:{nodeid:id,parentid:rc[parent],n_level:rc[level]}} );
						}
						$(this).trigger('reloadGrid');
						rc[loaded] = true;
						if(this.p.treeGridModel == 'nested') {
							$(this).jqGrid('setGridParam',{postData:{nodeid:'',n_left:'',n_right:'',n_level:''}});
						} else {
							$(this).jqGrid('setGridParam',{postData:{nodeid:'',parentid:'',n_level:''}});
						}
					}
				}
			});
		},
		collapseNode : function(rc) {
			return this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var expanded = this.p.treeReader.expanded_field;
				if(rc[expanded]) {
					rc[expanded] = false;
					var id = $.jgrid.getAccessor(rc,this.p.localReader.id);
					var rc1 = $('#'+$.jgrid.jqID(id),this.grid.bDiv)[0];
					$('div.treeclick',rc1).removeClass(this.p.treeIcons.minus+' tree-minus').addClass(this.p.treeIcons.plus+' tree-plus');
				}
			});
		},
		SortTree : function( sortname, newDir, st, datefmt) {
			return this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var i, len,
					rec, records = [], $t = this, query, roots,
					rt = $(this).jqGrid('getRootNodes');
				// Sorting roots
				query = $.jgrid.from(rt);
				query.orderBy(sortname,newDir,st, datefmt);
				roots = query.select();

				// Sorting children
				for (i = 0, len = roots.length; i < len; i++) {
					rec = roots[i];
					records.push(rec);
					$(this).jqGrid('collectChildrenSortTree',records, rec, sortname, newDir,st, datefmt);
				}
				$.each(records, function(index) {
					var id  = $.jgrid.getAccessor(this,$t.p.localReader.id);
					$('#'+$.jgrid.jqID($t.p.id)+ ' tbody tr:eq('+index+')').after($('tr#'+$.jgrid.jqID(id),$t.grid.bDiv));
				});
				query = null;roots=null;records=null;
			});
		},
		collectChildrenSortTree : function(records, rec, sortname, newDir,st, datefmt) {
			return this.each(function(){
				if(!this.grid || !this.p.treeGrid) {return;}
				var i, len,
					child, ch, query, children;
				ch = $(this).jqGrid('getNodeChildren',rec);
				query = $.jgrid.from(ch);
				query.orderBy(sortname, newDir, st, datefmt);
				children = query.select();
				for (i = 0, len = children.length; i < len; i++) {
					child = children[i];
					records.push(child);
					$(this).jqGrid('collectChildrenSortTree',records, child, sortname, newDir, st, datefmt);
				}
			});
		},
		// experimental
		setTreeRow : function(rowid, data) {
			var success=false;
			this.each(function(){
				var t = this;
				if(!t.grid || !t.p.treeGrid) {return;}
				success = $(t).jqGrid('setRowData',rowid,data);
			});
			return success;
		},
		delTreeNode : function (rowid) {
			return this.each(function () {
				var $t = this, rid = $t.p.localReader.id, i,
					left = $t.p.treeReader.left_field,
					right = $t.p.treeReader.right_field, myright, width, res, key;
				if(!$t.grid || !$t.p.treeGrid) {return;}
				var rc = $t.p._index[rowid];
				if (rc !== undefined) {
				// nested
					myright = parseInt($t.p.data[rc][right],10);
					width = myright -  parseInt($t.p.data[rc][left],10) + 1;
					var dr = $($t).jqGrid('getFullTreeNode',$t.p.data[rc]);
					if(dr.length>0){
						for (i=0;i<dr.length;i++){
							$($t).jqGrid('delRowData',dr[i][rid]);
						}
					}
					if( $t.p.treeGridModel === 'nested') {
					// ToDo - update grid data
						res = $.jgrid.from($t.p.data)
							.greater(left,myright,{stype:'integer'})
							.select();
						if(res.length) {
							for( key in res) {
								if(res.hasOwnProperty(key)) {
									res[key][left] = parseInt(res[key][left],10) - width ;
								}
							}
						}
						res = $.jgrid.from($t.p.data)
							.greater(right,myright,{stype:'integer'})
							.select();
						if(res.length) {
							for( key in res) {
								if(res.hasOwnProperty(key)) {
									res[key][right] = parseInt(res[key][right],10) - width ;
								}
							}
						}
					}
				}
			});
		},
		addChildNode : function( nodeid, parentid, data, expandData ) {
		//return this.each(function(){
			var $t = this[0];
			if(data) {
			// we suppose tha the id is autoincremet and
				var expanded = $t.p.treeReader.expanded_field,
					isLeaf = $t.p.treeReader.leaf_field,
					level = $t.p.treeReader.level_field,
					//icon = $t.p.treeReader.icon_field,
					parent = $t.p.treeReader.parent_id_field,
					left = $t.p.treeReader.left_field,
					right = $t.p.treeReader.right_field,
					loaded = $t.p.treeReader.loaded,
					method, parentindex, parentdata, parentlevel, i, len, max=0, rowind = parentid, leaf, maxright;
				if(expandData===undefined) {expandData = false;}
				if ( nodeid === undefined || nodeid === null ) {
					i = $t.p.data.length-1;
					if(	i>= 0 ) {
						while(i>=0){max = Math.max(max, parseInt($t.p.data[i][$t.p.localReader.id],10)); i--;}
					}
					nodeid = max+1;
				}
				var prow = $($t).jqGrid('getInd', parentid);
				leaf = false;
				// if not a parent we assume root
				if ( parentid === undefined  || parentid === null || parentid==='') {
					parentid = null;
					rowind = null;
					method = 'last';
					parentlevel = $t.p.tree_root_level;
					i = $t.p.data.length+1;
				} else {
					method = 'after';
					parentindex = $t.p._index[parentid];
					parentdata = $t.p.data[parentindex];
					parentid = parentdata[$t.p.localReader.id];
					parentlevel = parseInt(parentdata[level],10)+1;
					var childs = $($t).jqGrid('getFullTreeNode', parentdata);
					// if there are child nodes get the last index of it
					if(childs.length) {
						i = childs[childs.length-1][$t.p.localReader.id];
						rowind = i;
						i = $($t).jqGrid('getInd',rowind)+1;
					} else {
						i = $($t).jqGrid('getInd', parentid)+1;
					}
					// if the node is leaf
					if(parentdata[isLeaf]) {
						leaf = true;
						parentdata[expanded] = true;
						//var prow = $($t).jqGrid('getInd', parentid);
						$($t.rows[prow])
							.find('span.cell-wrapperleaf').removeClass('cell-wrapperleaf').addClass('cell-wrapper')
							.end()
							.find('div.tree-leaf').removeClass($t.p.treeIcons.leaf+' tree-leaf').addClass($t.p.treeIcons.minus+' tree-minus');
						$t.p.data[parentindex][isLeaf] = false;
						parentdata[loaded] = true;
					}
				}
				len = i+1;

				if( data[expanded]===undefined)  {data[expanded]= false;}
				if( data[loaded]===undefined )  { data[loaded] = false;}
				data[level] = parentlevel;
				if( data[isLeaf]===undefined) {data[isLeaf]= true;}
				if( $t.p.treeGridModel === 'adjacency') {
					data[parent] = parentid;
				}
				if( $t.p.treeGridModel === 'nested') {
				// this method requiere more attention
					var query, res, key;
					//maxright = parseInt(maxright,10);
					// ToDo - update grid data
					if(parentid !== null) {
						maxright = parseInt(parentdata[right],10);
						query = $.jgrid.from($t.p.data);
						query = query.greaterOrEquals(right,maxright,{stype:'integer'});
						res = query.select();
						if(res.length) {
							for( key in res) {
								if(res.hasOwnProperty(key)) {
									res[key][left] = res[key][left] > maxright ? parseInt(res[key][left],10) +2 : res[key][left];
									res[key][right] = res[key][right] >= maxright ? parseInt(res[key][right],10) +2 : res[key][right];
								}
							}
						}
						data[left] = maxright;
						data[right]= maxright+1;
					} else {
						maxright = parseInt( $($t).jqGrid('getCol', right, false, 'max'), 10);
						res = $.jgrid.from($t.p.data)
							.greater(left,maxright,{stype:'integer'})
							.select();
						if(res.length) {
							for( key in res) {
								if(res.hasOwnProperty(key)) {
									res[key][left] = parseInt(res[key][left],10) +2 ;
								}
							}
						}
						res = $.jgrid.from($t.p.data)
							.greater(right,maxright,{stype:'integer'})
							.select();
						if(res.length) {
							for( key in res) {
								if(res.hasOwnProperty(key)) {
									res[key][right] = parseInt(res[key][right],10) +2 ;
								}
							}
						}
						data[left] = maxright+1;
						data[right] = maxright + 2;
					}
				}
				if( parentid === null || $($t).jqGrid('isNodeLoaded',parentdata) || leaf ) {
					$($t).jqGrid('addRowData', nodeid, data, method, rowind);
					$($t).jqGrid('setTreeNode', i, len);
				}
				if(parentdata && !parentdata[expanded] && expandData) {
					$($t.rows[prow])
						.find('div.treeclick')
						.click();
				}
			}
		//});
		}
	});
})(jQuery);
/*jshint eqeqeq:false, eqnull:true */
/*global jQuery */
// Grouping module
(function($){
	'use strict';
	$.extend($.jgrid,{
		template : function(format){ //jqgformat
			var args = $.makeArray(arguments).slice(1), j, al = args.length;
			if(format==null) { format = ''; }
			return format.replace(/\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, function(m,i){
				if(!isNaN(parseInt(i,10))) {
					return args[parseInt(i,10)];
				}
				for(j=0; j < al;j++) {
					if($.isArray(args[j])) {
						var nmarr = args[ j ],
							k = nmarr.length;
						while(k--) {
							if(i===nmarr[k].nm) {
								return nmarr[k].v;
							}
						}
					}
				}
			});
		}
	});
	$.jgrid.extend({
		groupingSetup : function () {
			return this.each(function (){
				var $t = this, i, j, cml, cm = $t.p.colModel, grp = $t.p.groupingView;
				if(grp !== null && ( (typeof grp === 'object') || $.isFunction(grp) ) ) {
					if(!grp.groupField.length) {
						$t.p.grouping = false;
					} else {
						if (grp.visibiltyOnNextGrouping === undefined) {
							grp.visibiltyOnNextGrouping = [];
						}

						grp.lastvalues=[];
						grp.groups =[];
						grp.counters =[];
						for(i=0;i<grp.groupField.length;i++) {
							if(!grp.groupOrder[i]) {
								grp.groupOrder[i] = '';
							}
							if(!grp.groupText[i]) {
								grp.groupText[i] = '{0}';
							}
							if( typeof grp.groupColumnShow[i] !== 'boolean') {
								grp.groupColumnShow[i] = true;
							}
							if( typeof grp.groupSummary[i] !== 'boolean') {
								grp.groupSummary[i] = false;
							}
							if(grp.groupColumnShow[i] === true) {
								grp.visibiltyOnNextGrouping[i] = true;
								$($t).jqGrid('showCol',grp.groupField[i]);
							} else {
								grp.visibiltyOnNextGrouping[i] = $('#'+$.jgrid.jqID($t.p.id+'_'+grp.groupField[i])).is(':visible');
								$($t).jqGrid('hideCol',grp.groupField[i]);
							}
						}
						grp.summary =[];
						for(j=0, cml = cm.length; j < cml; j++) {
							if(cm[j].summaryType) {
								grp.summary.push({nm:cm[j].name,st:cm[j].summaryType, v: '', sr: cm[j].summaryRound, srt: cm[j].summaryRoundType || 'round'});
							}
						}
					}
				} else {
					$t.p.grouping = false;
				}
			});
		},
		groupingPrepare : function (rData, gdata, record, irow) {
			this.each(function(){
				var grp = this.p.groupingView, $t= this, i,
					grlen = grp.groupField.length,
					fieldName,
					v,
					displayName,
					displayValue,
					changed = 0;
				for(i=0;i<grlen;i++) {
					fieldName = grp.groupField[i];
					displayName = grp.displayField[i];
					v = record[fieldName];
					displayValue = displayName == null ? null : record[displayName];

					if( displayValue == null ) {
						displayValue = v;
					}
					if( v !== undefined ) {
						if(irow === 0 ) {
						// First record always starts a new group
							grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
							grp.lastvalues[i] = v;
							grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
							$.each(grp.counters[i].summary,function() {
								if ($.isFunction(this.st)) {
									this.v = this.st.call($t, this.v, this.nm, record);
								} else {
									this.v = $($t).jqGrid('groupingCalculations.handler',this.st, this.v, this.nm, this.sr, this.srt, record);
								}
							});
							grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
						} else {
							if( typeof v !== 'object' && grp.lastvalues[i] !== v ) {
							// This record is not in same group as previous one
								grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
								grp.lastvalues[i] = v;
								changed = 1;
								grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
								$.each(grp.counters[i].summary,function() {
									if ($.isFunction(this.st)) {
										this.v = this.st.call($t, this.v, this.nm, record);
									} else {
										this.v = $($t).jqGrid('groupingCalculations.handler',this.st, this.v, this.nm, this.sr, this.srt, record);
									}
								});
								grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
							} else {
								if (changed === 1) {
								// This group has changed because an earlier group changed.
									grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
									grp.lastvalues[i] = v;
									grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
									$.each(grp.counters[i].summary,function() {
										if ($.isFunction(this.st)) {
											this.v = this.st.call($t, this.v, this.nm, record);
										} else {
											this.v = $($t).jqGrid('groupingCalculations.handler',this.st, this.v, this.nm, this.sr, this.srt, record);
										}
									});
									grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
								} else {
									grp.counters[i].cnt += 1;
									grp.groups[grp.counters[i].pos].cnt = grp.counters[i].cnt;
									$.each(grp.counters[i].summary,function() {
										if ($.isFunction(this.st)) {
											this.v = this.st.call($t, this.v, this.nm, record);
										} else {
											this.v = $($t).jqGrid('groupingCalculations.handler',this.st, this.v, this.nm, this.sr, this.srt, record);
										}
									});
									grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
								}
							}
						}
					}
				}
				gdata.push( rData );
			});
			return gdata;
		},
		groupingToggle : function(hid){
			this.each(function(){
				var $t = this,
					grp = $t.p.groupingView,
					strpos = hid.split('_'),
					//uid = hid.substring(0,strpos+1),
					num = parseInt(strpos[strpos.length-2], 10);
				strpos.splice(strpos.length-2,2);
				var uid = strpos.join('_'),
					minus = grp.minusicon,
					plus = grp.plusicon,
					tar = $('#'+$.jgrid.jqID(hid)),
					r = tar.length ? tar[0].nextSibling : null,
					tarspan = $('#'+$.jgrid.jqID(hid)+' span.'+'tree-wrap-'+$t.p.direction),
					collapsed = false, tspan;
				if( tarspan.hasClass(minus) ) {
					if(grp.showSummaryOnHide) {
						if(r){
							while(r) {
								if($(r).hasClass('jqfoot') ) {
									var lv = parseInt($(r).attr('jqfootlevel'),10);
									if(  lv <= num) {
										break;
									}
								}
								$(r).hide();
								r = r.nextSibling;
							}
						}
					} else  {
						if(r){
							while(r) {
								if( $(r).hasClass(uid+'_'+String(num) ) || $(r).hasClass(uid+'_'+String(num-1))) { break; }
								$(r).hide();
								r = r.nextSibling;
							}
						}
					}
					tarspan.removeClass(minus).addClass(plus);
					collapsed = true;
				} else {
					if(r){
						while(r) {
							if($(r).hasClass(uid+'_'+String(num)) || $(r).hasClass(uid+'_'+String(num-1)) ) { break; }
							$(r).show();
							tspan = $(r).find('span.'+'tree-wrap-'+$t.p.direction);
							if( tspan && $(tspan).hasClass(plus) ) {
								$(tspan).removeClass(plus).addClass(minus);
							}
							r = r.nextSibling;
						}
					}
					tarspan.removeClass(plus).addClass(minus);
				}
				$($t).triggerHandler('jqGridGroupingClickGroup', [hid , collapsed]);
				if( $.isFunction($t.p.onClickGroup)) { $t.p.onClickGroup.call($t, hid , collapsed); }

			});
			return false;
		},
		groupingRender : function (grdata, colspans ) {
			return this.each(function(){
				var $t = this,
					grp = $t.p.groupingView,
					str = '', icon = '', hid, clid, pmrtl = grp.groupCollapse ? grp.plusicon : grp.minusicon, gv, cp=[], len =grp.groupField.length;
				pmrtl += ' tree-wrap-'+$t.p.direction;
				$.each($t.p.colModel, function (i,n){
					var ii;
					for(ii=0;ii<len;ii++) {
						if(grp.groupField[ii] === n.name ) {
							cp[ii] = i;
							break;
						}
					}
				});
				var toEnd = 0;
				function findGroupIdx( ind , offset, grp) {
					var ret = false, i;
					if(offset===0) {
						ret = grp[ind];
					} else {
						var id = grp[ind].idx;
						if(id===0) {
							ret = grp[ind];
						}  else {
							for(i=ind;i >= 0; i--) {
								if(grp[i].idx === id-offset) {
									ret = grp[i];
									break;
								}
							}
						}
					}
					return ret;
				}
				var sumreverse = $.makeArray(grp.groupSummary);
				sumreverse.reverse();
				$.each(grp.groups,function(i,n){
					toEnd++;
					clid = $t.p.id+'ghead_'+n.idx;
					hid = clid+'_'+i;
					icon = '<span style=\'cursor:pointer;\' class=\'ui-icon '+pmrtl+'\' onclick="jQuery(\'#'+$.jgrid.jqID($t.p.id)+'\').jqGrid(\'groupingToggle\',\''+hid+'\');return false;"></span>';
					try {
						gv = $t.formatter(hid, n.displayValue, cp[n.idx], n.value );
					} catch (egv) {
						gv = n.displayValue;
					}
					str += '<tr id="'+hid+'" role="row" class= "ui-widget-content jqgroup ui-row-'+$t.p.direction+' '+clid+'"><td style="padding-left:'+(n.idx * 12) + 'px;'+'" colspan="'+colspans+'">'+icon+$.jgrid.template(grp.groupText[n.idx], gv, n.cnt, n.summary)+'</td></tr>';
					var leaf = len-1 === n.idx;
					if( leaf ) {
						var gg = grp.groups[i+1], k, kk, ik;
						var end = gg !== undefined ?  grp.groups[i+1].startRow : grdata.length;
						for(kk=n.startRow;kk<end;kk++) {
							str += grdata[kk].join('');
						}
						var jj;
						if (gg !== undefined) {
							for (jj = 0; jj < grp.groupField.length; jj++) {
								if (gg.dataIndex === grp.groupField[jj]) {
									break;
								}
							}
							toEnd = grp.groupField.length - jj;
						}
						for (ik = 0; ik < toEnd; ik++) {
							if(!sumreverse[ik]) { continue; }
							var hhdr = '';
							if(grp.groupCollapse && !grp.showSummaryOnHide) {
								hhdr = ' style="display:none;"';
							}
							str += '<tr'+hhdr+' jqfootlevel="'+(n.idx-ik)+'" role="row" class="ui-widget-content jqfoot ui-row-'+$t.p.direction+'">';
							var fdata = findGroupIdx(i, ik, grp.groups),
								cm = $t.p.colModel,
								vv, grlen = fdata.cnt;
							for(k=0; k<colspans;k++) {
								var tmpdata = '<td '+$t.formatCol(k,1,'')+'>&#160;</td>',
									tplfld = '{0}';
								$.each(fdata.summary,function(){
									if(this.nm === cm[k].name) {
										if(cm[k].summaryTpl)  {
											tplfld = cm[k].summaryTpl;
										}
										if(typeof this.st === 'string' && this.st.toLowerCase() === 'avg') {
											if(this.v && grlen > 0) {
												this.v = (this.v/grlen);
											}
										}
										try {
											vv = $t.formatter('', this.v, k, this);
										} catch (ef) {
											vv = this.v;
										}
										tmpdata= '<td '+$t.formatCol(k,1,'')+'>'+$.jgrid.format(tplfld,vv)+ '</td>';
										return false;
									}
								});
								str += tmpdata;
							}
							str += '</tr>';
						}
						toEnd = jj;
					}
				});
				$('#'+$.jgrid.jqID($t.p.id)+' tbody:first').append(str);
				// free up memory
				str = null;
			});
		},
		groupingGroupBy : function (name, options ) {
			return this.each(function(){
				var $t = this;
				if(typeof name === 'string') {
					name = [name];
				}
				var grp = $t.p.groupingView;
				$t.p.grouping = true;

				//Set default, in case visibilityOnNextGrouping is undefined
				if (grp.visibiltyOnNextGrouping === undefined) {
					grp.visibiltyOnNextGrouping = [];
				}
				var i;
				// show previous hidden groups if they are hidden and weren't removed yet
				for(i=0;i<grp.groupField.length;i++) {
					if(!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i]) {
						$($t).jqGrid('showCol',grp.groupField[i]);
					}
				}
				// set visibility status of current group columns on next grouping
				for(i=0;i<name.length;i++) {
					grp.visibiltyOnNextGrouping[i] = $('#'+$.jgrid.jqID($t.p.id)+'_'+$.jgrid.jqID(name[i])).is(':visible');
				}
				$t.p.groupingView = $.extend($t.p.groupingView, options || {});
				grp.groupField = name;
				$($t).trigger('reloadGrid');
			});
		},
		groupingRemove : function (current) {
			return this.each(function(){
				var $t = this;
				if(current === undefined) {
					current = true;
				}
				$t.p.grouping = false;
				if(current===true) {
					var grp = $t.p.groupingView, i;
					// show previous hidden groups if they are hidden and weren't removed yet
					for(i=0;i<grp.groupField.length;i++) {
						if (!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i]) {
							$($t).jqGrid('showCol', grp.groupField);
						}
					}
					$('tr.jqgroup, tr.jqfoot','#'+$.jgrid.jqID($t.p.id)+' tbody:first').remove();
					$('tr.jqgrow:hidden','#'+$.jgrid.jqID($t.p.id)+' tbody:first').show();
				} else {
					$($t).trigger('reloadGrid');
				}
			});
		},
		groupingCalculations : {
			handler: function(fn, v, field, round, roundType, rc) {
				var funcs = {
					sum: function() {
						return parseFloat(v||0) + parseFloat((rc[field]||0));
					},

					min: function() {
						if(v==='') {
							return parseFloat(rc[field]||0);
						}
						return Math.min(parseFloat(v),parseFloat(rc[field]||0));
					},

					max: function() {
						if(v==='') {
							return parseFloat(rc[field]||0);
						}
						return Math.max(parseFloat(v),parseFloat(rc[field]||0));
					},

					count: function() {
						if(v==='') {v=0;}
						if(rc.hasOwnProperty(field)) {
							return v+1;
						}
						return 0;
					},

					avg: function() {
					// the same as sum, but at end we divide it
					// so use sum instead of duplicating the code (?)
						return funcs.sum();
					}
				};

				if(!funcs[fn]) {
					throw ('jqGrid Grouping No such method: ' + fn);
				}
				var res = funcs[fn]();

				if (round != null) {
					if (roundType == 'fixed') {
						res = res.toFixed(round);
					} else {
						var mul = Math.pow(10, round);
						res = Math.round(res * mul) / mul;
					}
				}

				return res;
			}
		}
	});
})(jQuery);
/*jshint eqeqeq:false, eqnull:true, devel:true */
/*global jQuery, xmlJsonClass */
(function($){
/*
 * jqGrid extension for constructing Grid Data from external file
 * Tony Tomov tony@trirand.com
 * http://trirand.com/blog/
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
**/

	'use strict';
	$.jgrid.extend({
		jqGridImport : function(o) {
			o = $.extend({
				imptype : 'xml', // xml, json, xmlstring, jsonstring
				impstring: '',
				impurl: '',
				mtype: 'GET',
				impData : {},
				xmlGrid :{
					config : 'roots>grid',
					data: 'roots>rows'
				},
				jsonGrid :{
					config : 'grid',
					data: 'data'
				},
				ajaxOptions :{}
			}, o || {});
			return this.each(function(){
				var $t = this;
				var xmlConvert = function (xml,o) {
					var cnfg = $(o.xmlGrid.config,xml)[0];
					var xmldata = $(o.xmlGrid.data,xml)[0], jstr, jstr1, key;
					if(xmlJsonClass.xml2json && $.jgrid.parse) {
						jstr = xmlJsonClass.xml2json(cnfg,' ');
						jstr = $.jgrid.parse(jstr);
						for(key in jstr) {
							if(jstr.hasOwnProperty(key)) {
								jstr1=jstr[key];
							}
						}
						if(xmldata) {
							// save the datatype
							var svdatatype = jstr.grid.datatype;
							jstr.grid.datatype = 'xmlstring';
							jstr.grid.datastr = xml;
							$($t).jqGrid( jstr1 ).jqGrid('setGridParam',{datatype:svdatatype});
						} else {
							$($t).jqGrid( jstr1 );
						}
						jstr = null;jstr1=null;
					} else {
						alert('xml2json or parse are not present');
					}
				};
				var jsonConvert = function (jsonstr,o){
					if (jsonstr && typeof jsonstr == 'string') {
						var _jsonparse = false;
						if($.jgrid.useJSON) {
							$.jgrid.useJSON = false;
							_jsonparse = true;
						}
						var json = $.jgrid.parse(jsonstr);
						if(_jsonparse) { $.jgrid.useJSON = true; }
						var gprm = json[o.jsonGrid.config];
						var jdata = json[o.jsonGrid.data];
						if(jdata) {
							var svdatatype = gprm.datatype;
							gprm.datatype = 'jsonstring';
							gprm.datastr = jdata;
							$($t).jqGrid( gprm ).jqGrid('setGridParam',{datatype:svdatatype});
						} else {
							$($t).jqGrid( gprm );
						}
					}
				};
				switch (o.imptype){
				case 'xml':
					$.ajax($.extend({
						url:o.impurl,
						type:o.mtype,
						data: o.impData,
						dataType:'xml',
						complete: function(xml,stat) {
							if(stat == 'success') {
								xmlConvert(xml.responseXML,o);
								$($t).triggerHandler('jqGridImportComplete', [xml, o]);
								if($.isFunction(o.importComplete)) {
									o.importComplete(xml);
								}
							}
							xml=null;
						}
					}, o.ajaxOptions));
					break;
				case 'xmlstring' :
					// we need to make just the conversion and use the same code as xml
					if(o.impstring && typeof o.impstring == 'string') {
						var xmld = $.jgrid.stringToDoc(o.impstring);
						if(xmld) {
							xmlConvert(xmld,o);
							$($t).triggerHandler('jqGridImportComplete', [xmld, o]);
							if($.isFunction(o.importComplete)) {
								o.importComplete(xmld);
							}
							o.impstring = null;
						}
						xmld = null;
					}
					break;
				case 'json':
					$.ajax($.extend({
						url:o.impurl,
						type:o.mtype,
						data: o.impData,
						dataType:'json',
						complete: function(json) {
							try {
								jsonConvert(json.responseText,o );
								$($t).triggerHandler('jqGridImportComplete', [json, o]);
								if($.isFunction(o.importComplete)) {
									o.importComplete(json);
								}
							} catch (ee){}
							json=null;
						}
					}, o.ajaxOptions ));
					break;
				case 'jsonstring' :
					if(o.impstring && typeof o.impstring == 'string') {
						jsonConvert(o.impstring,o );
						$($t).triggerHandler('jqGridImportComplete', [o.impstring, o]);
						if($.isFunction(o.importComplete)) {
							o.importComplete(o.impstring);
						}
						o.impstring = null;
					}
					break;
				}
			});
		},
		jqGridExport : function(o) {
			o = $.extend({
				exptype : 'xmlstring',
				root: 'grid',
				ident: '\t'
			}, o || {});
			var ret = null;
			this.each(function () {
				if(!this.grid) { return;}
				var key, gprm = $.extend(true, {},$(this).jqGrid('getGridParam'));
				// we need to check for:
				// 1.multiselect, 2.subgrid  3. treegrid and remove the unneded columns from colNames
				if(gprm.rownumbers) {
					gprm.colNames.splice(0,1);
					gprm.colModel.splice(0,1);
				}
				if(gprm.multiselect) {
					gprm.colNames.splice(0,1);
					gprm.colModel.splice(0,1);
				}
				if(gprm.subGrid) {
					gprm.colNames.splice(0,1);
					gprm.colModel.splice(0,1);
				}
				gprm.knv = null;
				if(gprm.treeGrid) {
					for (key in gprm.treeReader) {
						if(gprm.treeReader.hasOwnProperty(key)) {
							gprm.colNames.splice(gprm.colNames.length-1);
							gprm.colModel.splice(gprm.colModel.length-1);
						}
					}
				}
				switch (o.exptype) {
				case 'xmlstring' :
					ret = '<'+o.root+'>'+xmlJsonClass.json2xml(gprm,o.ident)+'</'+o.root+'>';
					break;
				case 'jsonstring' :
					ret = '{'+ xmlJsonClass.toJson(gprm,o.root,o.ident,false)+'}';
					if(gprm.postData.filters !== undefined) {
						ret=ret.replace(/filters":"/,'filters":');
						ret=ret.replace(/}]}"/,'}]}');
					}
					break;
				}
			});
			return ret;
		},
		excelExport : function(o) {
			o = $.extend({
				exptype : 'remote',
				url : null,
				oper: 'oper',
				tag: 'excel',
				exportOptions : {}
			}, o || {});
			return this.each(function(){
				if(!this.grid) { return;}
				var url;
				if(o.exptype == 'remote') {
					var pdata = $.extend({},this.p.postData);
					pdata[o.oper] = o.tag;
					var params = jQuery.param(pdata);
					if(o.url.indexOf('?') != -1) { url = o.url+'&'+params; }
					else { url = o.url+'?'+params; }
					window.location = url;
				}
			});
		}
	});
})(jQuery);
/*jshint evil:true, eqeqeq:false, eqnull:true, devel:true */
/*global jQuery */
(function($){
/*
**
 * jqGrid addons using jQuery UI
 * Author: Mark Williams
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl-2.0.html
 * depends on jQuery UI
**/
	'use strict';
	if ($.jgrid.msie && $.jgrid.msiever()==8) {
		$.expr[':'].hidden = function(elem) {
			return elem.offsetWidth === 0 || elem.offsetHeight === 0 ||
			elem.style.display == 'none';
		};
	}
	// requiere load multiselect before grid
	$.jgrid._multiselect = false;
	if($.ui) {
		if ($.ui.multiselect ) {
			if($.ui.multiselect.prototype._setSelected) {
				var setSelected = $.ui.multiselect.prototype._setSelected;
				$.ui.multiselect.prototype._setSelected = function(item,selected) {
					var ret = setSelected.call(this,item,selected);
					if (selected && this.selectedList) {
						var elt = this.element;
						this.selectedList.find('li').each(function() {
							if ($(this).data('optionLink')) {
								$(this).data('optionLink').remove().appendTo(elt);
							}
						});
					}
					return ret;
				};
			}
			if($.ui.multiselect.prototype.destroy) {
				$.ui.multiselect.prototype.destroy = function() {
					this.element.show();
					this.container.remove();
					if ($.Widget === undefined) {
						$.widget.prototype.destroy.apply(this, arguments);
					} else {
						$.Widget.prototype.destroy.apply(this, arguments);
					}
				};
			}
			$.jgrid._multiselect = true;
		}
	}

	$.jgrid.extend({
		sortableColumns : function (tblrow)
		{
			return this.each(function (){
				var ts = this, tid= $.jgrid.jqID( ts.p.id );
				function start() {ts.p.disableClick = true;}
				var sortable_opts = {
					'tolerance' : 'pointer',
					'axis' : 'x',
					'scrollSensitivity': '1',
					'items': '>th:not(:has(#jqgh_'+tid+'_cb'+',#jqgh_'+tid+'_rn'+',#jqgh_'+tid+'_subgrid),:hidden)',
					'placeholder': {
						element: function(item) {
							var el = $(document.createElement(item[0].nodeName))
								.addClass(item[0].className+' ui-sortable-placeholder ui-state-highlight')
								.removeClass('ui-sortable-helper')[0];
							return el;
						},
						update: function(self, p) {
							p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10));
							p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10));
						}
					},
					'update': function(event, ui) {
						var p = $(ui.item).parent(),
							th = $('>th', p),
							colModel = ts.p.colModel,
							cmMap = {}, tid= ts.p.id+'_';
						$.each(colModel, function(i) { cmMap[this.name]=i; });
						var permutation = [];
						th.each(function() {
							var id = $('>div', this).get(0).id.replace(/^jqgh_/, '').replace(tid,'');
							if (cmMap.hasOwnProperty(id)) {
								permutation.push(cmMap[id]);
							}
						});

						$(ts).jqGrid('remapColumns',permutation, true, true);
						if ($.isFunction(ts.p.sortable.update)) {
							ts.p.sortable.update(permutation);
						}
						setTimeout(function(){ts.p.disableClick=false;}, 50);
					}
				};
				if (ts.p.sortable.options) {
					$.extend(sortable_opts, ts.p.sortable.options);
				} else if ($.isFunction(ts.p.sortable)) {
					ts.p.sortable = { 'update' : ts.p.sortable };
				}
				if (sortable_opts.start) {
					var s = sortable_opts.start;
					sortable_opts.start = function(e,ui) {
						start();
						s.call(this,e,ui);
					};
				} else {
					sortable_opts.start = start;
				}
				if (ts.p.sortable.exclude) {
					sortable_opts.items += ':not('+ts.p.sortable.exclude+')';
				}
				tblrow.sortable(sortable_opts).data('sortable').floating = true;
			});
		},
		columnChooser : function(opts) {
			var self = this;
			if($('#colchooser_'+$.jgrid.jqID(self[0].p.id)).length ) { return; }
			var selector = $('<div id="colchooser_'+self[0].p.id+'" style="position:relative;overflow:hidden"><div><select multiple="multiple"></select></div></div>');
			var select = $('select', selector);

			function insert(perm,i,v) {
				if(i>=0){
					var a = perm.slice();
					var b = a.splice(i,Math.max(perm.length-i,i));
					if(i>perm.length) { i = perm.length; }
					a[i] = v;
					return a.concat(b);
				}
			}
			opts = $.extend({
				'width' : 420,
				'height' : 240,
				'classname' : null,
				'done' : function(perm) { if (perm) { self.jqGrid('remapColumns', perm, true); } },
				/* msel is either the name of a ui widget class that
               extends a multiselect, or a function that supports
               creating a multiselect object (with no argument,
               or when passed an object), and destroying it (when
               passed the string "destroy"). */
				'msel' : 'multiselect',
				/* "msel_opts" : {}, */

				/* dlog is either the name of a ui widget class that
               behaves in a dialog-like way, or a function, that
               supports creating a dialog (when passed dlog_opts)
               or destroying a dialog (when passed the string
               "destroy")
               */
				'dlog' : 'dialog',
				'dialog_opts' : {
					'minWidth': 470
				},
				/* dlog_opts is either an option object to be passed
               to "dlog", or (more likely) a function that creates
               the options object.
               The default produces a suitable options object for
               ui.dialog */
				'dlog_opts' : function(opts) {
					var buttons = {};
					buttons[opts.bSubmit] = function() {
						opts.apply_perm();
						opts.cleanup(false);
					};
					buttons[opts.bCancel] = function() {
						opts.cleanup(true);
					};
					return $.extend(true, {
						'buttons': buttons,
						'close': function() {
							opts.cleanup(true);
						},
						'modal' : opts.modal || false,
						'resizable': opts.resizable || true,
						'width': opts.width+20
					}, opts.dialog_opts || {});
				},
				/* Function to get the permutation array, and pass it to the
               "done" function */
				'apply_perm' : function() {
					$('option',select).each(function() {
						if (this.selected) {
							self.jqGrid('showCol', colModel[this.value].name);
						} else {
							self.jqGrid('hideCol', colModel[this.value].name);
						}
					});

					var perm = [];
					//fixedCols.slice(0);
					$('option:selected',select).each(function() { perm.push(parseInt(this.value,10)); });
					$.each(perm, function() { delete colMap[colModel[parseInt(this,10)].name]; });
					$.each(colMap, function() {
						var ti = parseInt(this,10);
						perm = insert(perm,ti,ti);
					});
					if (opts.done) {
						opts.done.call(self, perm);
					}
				},
				/* Function to cleanup the dialog, and select. Also calls the
               done function with no permutation (to indicate that the
               columnChooser was aborted */
				'cleanup' : function(calldone) {
					call(opts.dlog, selector, 'destroy');
					call(opts.msel, select, 'destroy');
					selector.remove();
					if (calldone && opts.done) {
						opts.done.call(self);
					}
				},
				'msel_opts' : {}
			}, $.jgrid.col, opts || {});
			if($.ui) {
				if ($.ui.multiselect ) {
					if(opts.msel == 'multiselect') {
						if(!$.jgrid._multiselect) {
						// should be in language file
							alert('Multiselect plugin loaded after jqGrid. Please load the plugin before the jqGrid!');
							return;
						}
						opts.msel_opts = $.extend($.ui.multiselect.defaults,opts.msel_opts);
					}
				}
			}
			if (opts.caption) {
				selector.attr('title', opts.caption);
			}
			if (opts.classname) {
				selector.addClass(opts.classname);
				select.addClass(opts.classname);
			}
			if (opts.width) {
				$('>div',selector).css({'width': opts.width,'margin':'0 auto'});
				select.css('width', opts.width);
			}
			if (opts.height) {
				$('>div',selector).css('height', opts.height);
				select.css('height', opts.height - 10);
			}
			var colModel = self.jqGrid('getGridParam', 'colModel');
			var colNames = self.jqGrid('getGridParam', 'colNames');
			var colMap = {}, fixedCols = [];

			select.empty();
			$.each(colModel, function(i) {
				colMap[this.name] = i;
				if (this.hidedlg) {
					if (!this.hidden) {
						fixedCols.push(i);
					}
					return;
				}

				select.append('<option value=\''+i+'\' '+
																										(this.hidden?'':'selected=\'selected\'')+'>'+$.jgrid.stripHtml(colNames[i])+'</option>');
			});
			function call(fn, obj) {
				if (!fn) { return; }
				if (typeof fn == 'string') {
					if ($.fn[fn]) {
						$.fn[fn].apply(obj, $.makeArray(arguments).slice(2));
					}
				} else if ($.isFunction(fn)) {
					fn.apply(obj, $.makeArray(arguments).slice(2));
				}
			}

			var dopts = $.isFunction(opts.dlog_opts) ? opts.dlog_opts.call(self, opts) : opts.dlog_opts;
			call(opts.dlog, selector, dopts);
			var mopts = $.isFunction(opts.msel_opts) ? opts.msel_opts.call(self, opts) : opts.msel_opts;
			call(opts.msel, select, mopts);
		},
		sortableRows : function (opts) {
		// Can accept all sortable options and events
			return this.each(function(){
				var $t = this;
				if(!$t.grid) { return; }
				// Currently we disable a treeGrid sortable
				if($t.p.treeGrid) { return; }
				if($.fn.sortable) {
					opts = $.extend({
						'cursor':'move',
						'axis' : 'y',
						'items': '.jqgrow'
					},
					opts || {});
					if(opts.start && $.isFunction(opts.start)) {
						opts._start_ = opts.start;
						delete opts.start;
					} else {opts._start_=false;}
					if(opts.update && $.isFunction(opts.update)) {
						opts._update_ = opts.update;
						delete opts.update;
					} else {opts._update_ = false;}
					opts.start = function(ev,ui) {
						$(ui.item).css('border-width','0px');
						$('td',ui.item).each(function(i){
							this.style.width = $t.grid.cols[i].style.width;
						});
						if($t.p.subGrid) {
							var subgid = $(ui.item).attr('id');
							try {
								$($t).jqGrid('collapseSubGridRow',subgid);
							} catch (e) {}
						}
						if(opts._start_) {
							opts._start_.apply(this,[ev,ui]);
						}
					};
					opts.update = function (ev,ui) {
						$(ui.item).css('border-width','');
						if($t.p.rownumbers === true) {
							$('td.jqgrid-rownum',$t.rows).each(function( i ){
								$(this).html( i+1+(parseInt($t.p.page,10)-1)*parseInt($t.p.rowNum,10) );
							});
						}
						if(opts._update_) {
							opts._update_.apply(this,[ev,ui]);
						}
					};
					$('tbody:first',$t).sortable(opts);
					$('tbody:first',$t).disableSelection();
				}
			});
		},
		gridDnD : function(opts) {
			return this.each(function(){
				var $t = this, i, cn;
				if(!$t.grid) { return; }
				// Currently we disable a treeGrid drag and drop
				if($t.p.treeGrid) { return; }
				if(!$.fn.draggable || !$.fn.droppable) { return; }
				function updateDnD ()
				{
					var datadnd = $.data($t,'dnd');
					$('tr.jqgrow:not(.ui-draggable)',$t).draggable($.isFunction(datadnd.drag) ? datadnd.drag.call($($t),datadnd) : datadnd.drag);
				}
				var appender = '<table id=\'jqgrid_dnd\' class=\'ui-jqgrid-dnd\'></table>';
				if($('#jqgrid_dnd')[0] === undefined) {
					$('body').append(appender);
				}

				if(typeof opts == 'string' && opts == 'updateDnD' && $t.p.jqgdnd===true) {
					updateDnD();
					return;
				}
				opts = $.extend({
					'drag' : function (opts) {
						return $.extend({
							start : function (ev, ui) {
								var i, subgid;
								// if we are in subgrid mode try to collapse the node
								if($t.p.subGrid) {
									subgid = $(ui.helper).attr('id');
									try {
										$($t).jqGrid('collapseSubGridRow',subgid);
									} catch (e) {}
								}
								// hack
								// drag and drop does not insert tr in table, when the table has no rows
								// we try to insert new empty row on the target(s)
								for (i=0;i<$.data($t,'dnd').connectWith.length;i++){
									if($($.data($t,'dnd').connectWith[i]).jqGrid('getGridParam','reccount') == '0' ){
										$($.data($t,'dnd').connectWith[i]).jqGrid('addRowData','jqg_empty_row',{});
									}
								}
								ui.helper.addClass('ui-state-highlight');
								$('td',ui.helper).each(function(i) {
									this.style.width = $t.grid.headers[i].width+'px';
								});
								if(opts.onstart && $.isFunction(opts.onstart) ) { opts.onstart.call($($t),ev,ui); }
							},
							stop :function(ev,ui) {
								var i, ids;
								if(ui.helper.dropped && !opts.dragcopy) {
									ids = $(ui.helper).attr('id');
									if(ids === undefined) { ids = $(this).attr('id'); }
									$($t).jqGrid('delRowData',ids );
								}
								// if we have a empty row inserted from start event try to delete it
								for (i=0;i<$.data($t,'dnd').connectWith.length;i++){
									$($.data($t,'dnd').connectWith[i]).jqGrid('delRowData','jqg_empty_row');
								}
								if(opts.onstop && $.isFunction(opts.onstop) ) { opts.onstop.call($($t),ev,ui); }
							}
						},opts.drag_opts || {});
					},
					'drop' : function (opts) {
						return $.extend({
							accept: function(d) {
								if (!$(d).hasClass('jqgrow')) { return d;}
								var tid = $(d).closest('table.ui-jqgrid-btable');
								if(tid.length > 0 && $.data(tid[0],'dnd') !== undefined) {
									var cn = $.data(tid[0],'dnd').connectWith;
									return $.inArray('#'+$.jgrid.jqID(this.id),cn) != -1 ? true : false;
								}
								return false;
							},
							drop: function(ev, ui) {
								if (!$(ui.draggable).hasClass('jqgrow')) { return; }
								var accept = $(ui.draggable).attr('id');
								var getdata = ui.draggable.parent().parent().jqGrid('getRowData',accept);
								if(!opts.dropbyname) {
									var j =0, tmpdata = {}, nm, key;
									var dropmodel = $('#'+$.jgrid.jqID(this.id)).jqGrid('getGridParam','colModel');
									try {
										for (key in getdata) {
											if (getdata.hasOwnProperty(key)) {
												nm = dropmodel[j].name;
												if( !(nm == 'cb' || nm =='rn' || nm == 'subgrid' )) {
													if(getdata.hasOwnProperty(key) && dropmodel[j]) {
														tmpdata[nm] = getdata[key];
													}
												}
												j++;
											}
										}
										getdata = tmpdata;
									} catch (e) {}
								}
								ui.helper.dropped = true;
								if(opts.beforedrop && $.isFunction(opts.beforedrop) ) {
									//parameters to this callback - event, element, data to be inserted, sender, reciever
									// should return object which will be inserted into the reciever
									var datatoinsert = opts.beforedrop.call(this,ev,ui,getdata,$('#'+$.jgrid.jqID($t.p.id)),$(this));
									if (datatoinsert !== undefined && datatoinsert !== null && typeof datatoinsert == 'object') { getdata = datatoinsert; }
								}
								if(ui.helper.dropped) {
									var grid;
									if(opts.autoid) {
										if($.isFunction(opts.autoid)) {
											grid = opts.autoid.call(this,getdata);
										} else {
											grid = Math.ceil(Math.random()*1000);
											grid = opts.autoidprefix+grid;
										}
									}
									// NULL is interpreted as undefined while null as object
									$('#'+$.jgrid.jqID(this.id)).jqGrid('addRowData',grid,getdata,opts.droppos);
								}
								if(opts.ondrop && $.isFunction(opts.ondrop) ) { opts.ondrop.call(this,ev,ui, getdata); }
							}}, opts.drop_opts || {});
					},
					'onstart' : null,
					'onstop' : null,
					'beforedrop': null,
					'ondrop' : null,
					'drop_opts' : {
						'activeClass': 'ui-state-active',
						'hoverClass': 'ui-state-hover'
					},
					'drag_opts' : {
						'revert': 'invalid',
						'helper': 'clone',
						'cursor': 'move',
						'appendTo' : '#jqgrid_dnd',
						'zIndex': 5000
					},
					'dragcopy': false,
					'dropbyname' : false,
					'droppos' : 'first',
					'autoid' : true,
					'autoidprefix' : 'dnd_'
				}, opts || {});

				if(!opts.connectWith) { return; }
				opts.connectWith = opts.connectWith.split(',');
				opts.connectWith = $.map(opts.connectWith,function(n){return $.trim(n);});
				$.data($t,'dnd',opts);

				if($t.p.reccount != '0' && !$t.p.jqgdnd) {
					updateDnD();
				}
				$t.p.jqgdnd = true;
				for (i=0;i<opts.connectWith.length;i++){
					cn =opts.connectWith[i];
					$(cn).droppable($.isFunction(opts.drop) ? opts.drop.call($($t),opts) : opts.drop);
				}
			});
		},
		gridResize : function(opts) {
			return this.each(function(){
				var $t = this, gID = $.jgrid.jqID($t.p.id);
				if(!$t.grid || !$.fn.resizable) { return; }
				opts = $.extend({}, opts || {});
				if(opts.alsoResize ) {
					opts._alsoResize_ = opts.alsoResize;
					delete opts.alsoResize;
				} else {
					opts._alsoResize_ = false;
				}
				if(opts.stop && $.isFunction(opts.stop)) {
					opts._stop_ = opts.stop;
					delete opts.stop;
				} else {
					opts._stop_ = false;
				}
				opts.stop = function (ev, ui) {
					$($t).jqGrid('setGridParam',{height:$('#gview_'+gID+' .ui-jqgrid-bdiv').height()});
					$($t).jqGrid('setGridWidth',ui.size.width,opts.shrinkToFit);
					if(opts._stop_) { opts._stop_.call($t,ev,ui); }
				};
				if(opts._alsoResize_) {
					var optstest = '{\'#gview_'+gID+' .ui-jqgrid-bdiv\':true,\'' +opts._alsoResize_+'\':true}';
					opts.alsoResize = eval('('+optstest+')'); // the only way that I found to do this
				} else {
					opts.alsoResize = $('.ui-jqgrid-bdiv','#gview_'+gID);
				}
				delete opts._alsoResize_;
				$('#gbox_'+gID).resizable(opts);
			});
		}
	});

})(jQuery);
/*
 Transform a table to a jqGrid.
 Peter Romianowski <peter.romianowski@optivo.de>
 If the first column of the table contains checkboxes or
 radiobuttons then the jqGrid is made selectable.
*/
// Addition - selector can be a class or id
function tableToGrid(selector, options) {
	jQuery(selector).each(function() {
		if(this.grid) {return;} //Adedd from Tony Tomov
		// This is a small "hack" to make the width of the jqGrid 100%
		jQuery(this).width('99%');
		var w = jQuery(this).width();

		// Text whether we have single or multi select
		var inputCheckbox = jQuery('tr td:first-child input[type=checkbox]:first', jQuery(this));
		var inputRadio = jQuery('tr td:first-child input[type=radio]:first', jQuery(this));
		var selectMultiple = inputCheckbox.length > 0;
		var selectSingle = !selectMultiple && inputRadio.length > 0;
		var selectable = selectMultiple || selectSingle;
		//var inputName = inputCheckbox.attr("name") || inputRadio.attr("name");

		// Build up the columnModel and the data
		var colModel = [];
		var colNames = [];
		jQuery('th', jQuery(this)).each(function() {
			if (colModel.length === 0 && selectable) {
				colModel.push({
					name: '__selection__',
					index: '__selection__',
					width: 0,
					hidden: true
				});
				colNames.push('__selection__');
			} else {
				colModel.push({
					name: jQuery(this).attr('id') || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
					index: jQuery(this).attr('id') || jQuery.trim(jQuery.jgrid.stripHtml(jQuery(this).html())).split(' ').join('_'),
					width: jQuery(this).width() || 150
				});
				colNames.push(jQuery(this).html());
			}
		});
		var data = [];
		var rowIds = [];
		var rowChecked = [];
		jQuery('tbody > tr', jQuery(this)).each(function() {
			var row = {};
			var rowPos = 0;
			jQuery('td', jQuery(this)).each(function() {
				if (rowPos === 0 && selectable) {
					var input = jQuery('input', jQuery(this));
					var rowId = input.attr('value');
					rowIds.push(rowId || data.length);
					if (input.is(':checked')) {
						rowChecked.push(rowId);
					}
					row[colModel[rowPos].name] = input.attr('value');
				} else {
					row[colModel[rowPos].name] = jQuery(this).html();
				}
				rowPos++;
			});
			if(rowPos >0) { data.push(row); }
		});

		// Clear the original HTML table
		jQuery(this).empty();

		// Mark it as jqGrid
		jQuery(this).addClass('scroll');

		jQuery(this).jqGrid(jQuery.extend({
			datatype: 'local',
			width: w,
			colNames: colNames,
			colModel: colModel,
			multiselect: selectMultiple
		//inputName: inputName,
		//inputValueCol: imputName != null ? "__selection__" : null
		}, options || {}));

		// Add data
		var a;
		for (a = 0; a < data.length; a++) {
			var id = null;
			if (rowIds.length > 0) {
				id = rowIds[a];
				if (id && id.replace) {
				// We have to do this since the value of a checkbox
				// or radio button can be anything
					id = encodeURIComponent(id).replace(/[.\-%]/g, '_');
				}
			}
			if (id === null) {
				id = a + 1;
			}
			jQuery(this).jqGrid('addRowData',id, data[a]);
		}

		// Set the selection
		for (a = 0; a < rowChecked.length; a++) {
			jQuery(this).jqGrid('setSelection',rowChecked[a]);
		}
	});

}
